⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chicken.h

📁 Scheme跨平台编译器
💻 H
📖 第 1 页 / 共 5 页
字号:
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 + -