📄 chicken.h
字号:
typedef struct C_block_struct{ C_header header; C_word data[ 1 ];} C_SCHEME_BLOCK;typedef struct C_symbol_table_struct{ char *name; unsigned int size; C_word *table; struct C_symbol_table_struct *next;} C_SYMBOL_TABLE;typedef struct C_gc_root_struct{ C_word value; struct C_gc_root_struct *next, *prev;} C_GC_ROOT;typedef struct C_ptable_entry_struct{ C_char *id; void *ptr;} C_PTABLE_ENTRY;#ifdef __x86_64__# define C_AMD64_ABI_WEIRDNESS , ...#else# define C_AMD64_ABI_WEIRDNESS #endif/* C_WORD_p<P>_<B>: List of ((2 ** P) * B) 'C_word' parameters */#define C_WORD_p0_0#define C_WORD_p1_0#define C_WORD_p2_0#define C_WORD_p3_0#define C_WORD_p4_0#define C_WORD_p5_0#define C_WORD_p6_0#define C_WORD_p7_0#define C_WORD_p0_1 C_word,#define C_WORD_p1_1 C_word, C_word,#define C_WORD_p2_1 C_WORD_p1_1 C_WORD_p1_1#define C_WORD_p3_1 C_WORD_p2_1 C_WORD_p2_1#define C_WORD_p4_1 C_WORD_p3_1 C_WORD_p3_1#define C_WORD_p5_1 C_WORD_p4_1 C_WORD_p4_1#define C_WORD_p6_1 C_WORD_p5_1 C_WORD_p5_1#define C_WORD_p7_1 C_WORD_p6_1 C_WORD_p6_1/* DECL_C_PROC_p0 (n0, p7,p6,p5,p4,p3,p2,p1,p0): * declare function C_proc<n0>, which have <n0> 'C_word' parameters * (not counting last 'C_word C_AMD64_ABI_WEIRDNESS' one). * We must have: n0 = SUM (i = 7 to 0, p<i> * (1 << i)). * DECL_C_PROC_p<N+1> (...): * declare 2 as much functions as DECL_C_PROC_p<N>... */#define DECL_C_PROC_p0( n0, p7,p6,p5,p4,p3,p2,p1,p0) \ typedef void (C_ccall *C_proc##n0) (C_WORD_p7_##p7 C_WORD_p6_##p6 \ C_WORD_p5_##p5 C_WORD_p4_##p4 \ C_WORD_p3_##p3 C_WORD_p2_##p2 \ C_WORD_p1_##p1 C_WORD_p0_##p0 \ C_word C_AMD64_ABI_WEIRDNESS) C_noret;#define DECL_C_PROC_p1( n0,n1, p7,p6,p5,p4,p3,p2,p1) \ DECL_C_PROC_p0 (n0, p7,p6,p5,p4,p3,p2,p1,0) \ DECL_C_PROC_p0 (n1, p7,p6,p5,p4,p3,p2,p1,1)#define DECL_C_PROC_p2( n0,n1,n2,n3, p7,p6,p5,p4,p3,p2) \ DECL_C_PROC_p1 (n0,n1, p7,p6,p5,p4,p3,p2,0) \ DECL_C_PROC_p1 (n2,n3, p7,p6,p5,p4,p3,p2,1)#define DECL_C_PROC_p3( n0,n1,n2,n3,n4,n5,n6,n7, p7,p6,p5,p4,p3) \ DECL_C_PROC_p2 (n0,n1,n2,n3, p7,p6,p5,p4,p3,0) \ DECL_C_PROC_p2 (n4,n5,n6,n7, p7,p6,p5,p4,p3,1)DECL_C_PROC_p1 (2,3, 0,0,0,0,0,0,1)DECL_C_PROC_p2 (4,5,6,7, 0,0,0,0,0,1)DECL_C_PROC_p3 (8,9,10,11,12,13,14,15, 0,0,0,0,1)DECL_C_PROC_p3 (16,17,18,19,20,21,22,23, 0,0,0,1,0)DECL_C_PROC_p3 (24,25,26,27,28,29,30,31, 0,0,0,1,1)DECL_C_PROC_p3 (32,33,34,35,36,37,38,39, 0,0,1,0,0)DECL_C_PROC_p3 (40,41,42,43,44,45,46,47, 0,0,1,0,1)DECL_C_PROC_p3 (48,49,50,51,52,53,54,55, 0,0,1,1,0)DECL_C_PROC_p3 (56,57,58,59,60,61,62,63, 0,0,1,1,1)DECL_C_PROC_p1 (64,65, 0,1,0,0,0,0,0)DECL_C_PROC_p0 (66, 0,1,0,0,0,0,1,0)DECL_C_PROC_p0 (67, 0,1,0,0,0,0,1,1)DECL_C_PROC_p2 (68,69,70,71, 0,1,0,0,0,1)DECL_C_PROC_p3 (72,73,74,75,76,77,78,79, 0,1,0,0,1)DECL_C_PROC_p3 (80,81,82,83,84,85,86,87, 0,1,0,1,0)DECL_C_PROC_p3 (88,89,90,91,92,93,94,95, 0,1,0,1,1)DECL_C_PROC_p3 (96,97,98,99,100,101,102,103, 0,1,1,0,0)DECL_C_PROC_p3 (104,105,106,107,108,109,110,111, 0,1,1,0,1)DECL_C_PROC_p3 (112,113,114,115,116,117,118,119, 0,1,1,1,0)DECL_C_PROC_p3 (120,121,122,123,124,125,126,127, 0,1,1,1,1)DECL_C_PROC_p0 (128, 1,0,0,0,0,0,0,0)/* Macros: */#define C_align4(n) (((n) + 3) & ~3)#define C_align8(n) (((n) + 7) & ~7)#define C_align16(n) (((n) + 15) & ~15)/* This is word-size dependent: */#ifdef C_SIXTY_FOUR# define C_align(n) C_align8(n)# define C_wordstobytes(n) ((n) << 3)# define C_bytestowords(n) (((n) + 7) >> 3)# define C_wordsperdouble(n) (n)# define C_WORD_MIN LONG_MIN# define C_WORD_MAX LONG_MAX# define C_UWORD_MAX ULONG_MAX#else# define C_align(n) C_align4(n)# define C_wordstobytes(n) ((n) << 2)# define C_bytestowords(n) (((n) + 3) >> 2)# define C_wordsperdouble(n) ((n) << 1)# define C_WORD_MIN INT_MIN# define C_WORD_MAX INT_MAX# define C_UWORD_MAX UINT_MAX#endif#ifndef C_PROVIDE_LIBC_STUBS# define C_FILEPTR FILE *# define C_stdin stdin# define C_stdout stdout# define C_stderr stderr# define C_memcpy memcpy# define C_memcmp memcmp# define C_strcpy strcpy# define C_strncpy strncpy# define C_strcmp strcmp# define C_strncmp strncmp# define C_strlen strlen# define C_strcat strcat# define C_memset memset# define C_memmove memmove# define C_strncasecmp strncasecmp# define C_malloc malloc# define C_calloc calloc# define C_free free# define C_strchr strchr# define C_realloc realloc# define C_strdup strdup# define C_strtol strtol# define C_strtod strtod# define C_strtoul strtoul# define C_fopen fopen# define C_fclose fclose# define C_strpbrk strpbrk# define C_gcvt gcvt# define C_sprintf sprintf# define C_snprintf snprintf# define C_printf printf# define C_fprintf fprintf# define C_fflush fflush# define C_getchar getchar# define C_exit exit# define C_dlopen dlopen# define C_dlclose dlclose# define C_dlsym dlsym# define C_fwrite fwrite# define C_fread fread# define C_fputs fputs# define C_fputc fputc# define C_putchar putchar# define C_fgetc fgetc# define C_fgets fgets# define C_ungetc ungetc# define C_system system# define C_isatty isatty# define C_fileno fileno# define C_select select# define C_signal signal# define C_getrusage getrusage# define C_tolower tolower# define C_toupper toupper# define C_gettimeofday gettimeofday# define C_gmtime gmtime# define C_localtime localtime# define C_setjmp setjmp# define C_longjmp longjmp# define C_alloca alloca# define C_strerror strerror# define C_isalpha isalpha# define C_isdigit isdigit# define C_isspace isspace# define C_islower islower# define C_isupper isupper#else# include "chicken-libc-stubs.h"#endif#define C_return(x) return(x)#define C_memcpy_slots(t, f, n) C_memcpy((t), (f), (n) * sizeof(C_word))#define C_block_header(x) (((C_SCHEME_BLOCK *)(x))->header)#define C_header_bits(x) (C_block_header(x) & C_HEADER_BITS_MASK)#define C_header_size(x) (C_block_header(x) & C_HEADER_SIZE_MASK)#define C_make_header(type, size) ((C_header)(((type) & C_HEADER_BITS_MASK) | ((size) & C_HEADER_SIZE_MASK)))#define C_symbol_value(x) (C_block_item(x, 0))#define C_block_item(x, i) (((C_SCHEME_BLOCK *)(x))->data[ i ])#define C_set_block_item(x, i, y) (C_block_item(x, i) = (y))#define C_save(x) (*(--C_temporary_stack) = (C_word)(x))#define C_adjust_stack(n) (C_temporary_stack -= (n))#define C_rescue(x, i) (C_temporary_stack[ i ] = (x))#define C_save_rest(s, c, n) for(va_start(v, s); c-- > (n); C_save(va_arg(v, C_word)))#define C_rest_count(c) ((C_temporary_stack_bottom - C_temporary_stack) - (c))#define C_restore (*(C_temporary_stack++))#define C_heaptop ((C_word **)(&C_fromspace_top))#define C_pick(n) (C_temporary_stack[ n ])#define C_drop(n) (C_temporary_stack += (n))#define C_alloc(n) ((C_word *)C_alloca((n) * sizeof(C_word)))#define C_stack_pointer ((C_word *)C_alloca(0))#define C_stack_pointer_test ((C_word *)C_alloca(1))#define C_demand_2(n) (((C_word *)C_fromspace_top + (n)) < (C_word *)C_fromspace_limit)#define C_fix(n) (((C_word)(n) << C_FIXNUM_SHIFT) | C_FIXNUM_BIT)#define C_unfix(x) ((x) >> C_FIXNUM_SHIFT)#define C_make_character(c) ((((c) & C_CHAR_BIT_MASK) << 8) | C_CHARACTER_BITS)#define C_character_code(x) (((x) >> 8) & C_CHAR_BIT_MASK)#define C_flonum_magnitude(x) (*((double *)(((C_SCHEME_BLOCK *)(x))->data)))#define C_c_string(x) ((C_char *)(((C_SCHEME_BLOCK *)(x))->data))#define C_c_pointer(x) ((void *)(x))#define C_c_pointer_nn(x) ((void *)C_block_item(x, 0))#define C_truep(x) ((x) != C_SCHEME_FALSE)#define C_immediatep(x) ((x) & C_IMMEDIATE_MARK_BITS)#define C_mk_bool(x) ((x) ? C_SCHEME_TRUE : C_SCHEME_FALSE)#define C_mk_nbool(x) ((x) ? C_SCHEME_FALSE : C_SCHEME_TRUE)#define C_port_file(p) ((C_FILEPTR)C_block_item(p, 0))#define C_data_pointer(x) ((void *)((C_SCHEME_BLOCK *)(x))->data)#define C_invert_flag(f) (!(f))#define C_fitsinfixnump(n) (((n) & C_INT_SIGN_BIT) == (((n) & C_INT_TOP_BIT) << 1))#define C_ufitsinfixnump(n) (((n) & (C_INT_SIGN_BIT | (C_INT_SIGN_BIT >> 1))) == 0)#define C_quickflonumtruncate(n) (C_fix((C_word)C_flonum_magnitude(n)))#define C_and(x, y) (C_truep(x) ? (y) : C_SCHEME_FALSE)#define C_c_bytevector(x) ((unsigned char *)C_data_pointer(x))#define C_c_bytevector_or_null(x) ((unsigned char *)C_data_pointer_or_null(x))#define C_c_u8vector(x) ((unsigned char *)C_data_pointer(C_u_i_cdr(x)))#define C_c_u8vector_or_null(x) ((unsigned char *)C_srfi_4_vector_or_null(x))#define C_c_s8vector(x) ((char *)C_data_pointer(C_u_i_cdr(x)))#define C_c_s8vector_or_null(x) ((char *)C_srfi_4_vector_or_null(x))#define C_c_u16vector(x) ((unsigned short *)C_data_pointer(C_u_i_cdr(x)))#define C_c_u16vector_or_null(x) ((unsigned short *)C_srfi_4_vector_or_null(x))#define C_c_s16vector(x) ((short *)C_data_pointer(C_u_i_cdr(x)))#define C_c_s16vector_or_null(x) ((short *)C_srfi_4_vector_or_null(x))#define C_c_u32vector(x) ((C_u32 *)C_data_pointer(C_u_i_cdr(x)))#define C_c_u32vector_or_null(x) ((C_u32 *)C_srfi_4_vector_or_null(x))#define C_c_s32vector(x) ((C_s32 *)C_data_pointer(C_u_i_cdr(x)))#define C_c_s32vector_or_null(x) ((C_s32 *)C_srfi_4_vector_or_null(x))#define C_c_f32vector(x) ((float *)C_data_pointer(C_u_i_cdr(x)))#define C_c_f32vector_or_null(x) ((float *)C_srfi_4_vector_or_null(x))#define C_c_f64vector(x) ((double *)C_data_pointer(C_u_i_cdr(x)))#define C_c_f64vector_or_null(x) ((double *)C_srfi_4_vector_or_null(x))#ifdef C_STRESS_TEST# define C_STRESS_FAILURE 3# define C_stress (rand() % C_STRESS_FAILURE)#else# define C_stress 1#endif#if C_STACK_GROWS_DOWNWARD# define C_demand(n) (C_stress && ((C_word)(C_stack_pointer - C_stack_limit) > (n)))# define C_stack_probe(p) (C_stress && ((C_word *)(p) >= C_stack_limit))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -