/* scheme.h for Chez Scheme Version 9.5.9 (a6osx) */ /* Do not edit this file. It is automatically generated and */ /* specifically tailored to the version of Chez Scheme named */ /* above. Always be certain that you have the correct scheme.h */ /* for the version of Chez Scheme you are using. */ /* Warning: Some macros may evaluate arguments more than once. */ /* Specify declaration of exports. */ #ifdef _WIN32 # if __cplusplus # ifdef SCHEME_IMPORT # define EXPORT extern "C" __declspec (dllimport) # elif SCHEME_STATIC # define EXPORT extern "C" # else # define EXPORT extern "C" __declspec (dllexport) # endif # else # ifdef SCHEME_IMPORT # define EXPORT extern __declspec (dllimport) # elif SCHEME_STATIC # define EXPORT extern # else # define EXPORT extern __declspec (dllexport) # endif # endif #else # if __cplusplus # define EXPORT extern "C" # else # define EXPORT extern # endif #endif /* Chez Scheme Version and machine type */ #define VERSION "9.5.9" #define MACHINE_TYPE "a6osx" /* All Scheme objects are of type ptr. Type iptr and */ /* uptr are signed and unsigned ints of the same size */ /* as a ptr */ typedef void * ptr; typedef long int iptr; typedef unsigned long int uptr; /* String elements are 32-bit tagged char objects */ typedef unsigned int string_char; /* Bytevector elements are 8-bit unsigned "octets" */ typedef unsigned char octet; /* Type predicates */ #define Sfixnump(x) (((uptr)(x)&0x7)==0x0) #define Scharp(x) (((uptr)(x)&0xFF)==0x16) #define Snullp(x) ((uptr)(x)==0x26) #define Seof_objectp(x) ((uptr)(x)==0x36) #define Sbwp_objectp(x) ((uptr)(x)==0x4E) #define Sbooleanp(x) (((uptr)(x)&0xF7)==0x6) #define Spairp(x) (((uptr)(x)&0x7)==0x1) #define Ssymbolp(x) (((uptr)(x)&0x7)==0x3) #define Sprocedurep(x) (((uptr)(x)&0x7)==0x5) #define Sflonump(x) (((uptr)(x)&0x7)==0x2) #define Svectorp(x) ((((uptr)(x)&0x7)==0x7) &&\ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x7)==0x0)) #define Sfxvectorp(x) ((((uptr)(x)&0x7)==0x7) &&\ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x7)==0x3)) #define Sbytevectorp(x) ((((uptr)(x)&0x7)==0x7) &&\ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x3)==0x1)) #define Sstringp(x) ((((uptr)(x)&0x7)==0x7) &&\ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x7)==0x2)) #define Sbignump(x) ((((uptr)(x)&0x7)==0x7) &&\ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x1F)==0x6)) #define Sboxp(x) ((((uptr)(x)&0x7)==0x7) &&\ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x7F)==0xE)) #define Sinexactnump(x) ((((uptr)(x)&0x7)==0x7) &&\ ((uptr)((*((ptr *)((uptr)(x)+1))))==0x36)) #define Sexactnump(x) ((((uptr)(x)&0x7)==0x7) &&\ ((uptr)((*((ptr *)((uptr)(x)+1))))==0x56)) #define Sratnump(x) ((((uptr)(x)&0x7)==0x7) &&\ ((uptr)((*((ptr *)((uptr)(x)+1))))==0x16)) #define Sinputportp(x) ((((uptr)(x)&0x7)==0x7) &&\ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x1FF)==0x11E)) #define Soutputportp(x) ((((uptr)(x)&0x7)==0x7) &&\ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x2FF)==0x21E)) #define Srecordp(x) ((((uptr)(x)&0x7)==0x7) &&\ (((uptr)((*((ptr *)((uptr)(x)+1))))&0x7)==0x7)) /* Accessors */ #define Sfixnum_value(x) ((iptr)(x)/8) #define Schar_value(x) ((string_char)((uptr)(x)>>8)) #define Sboolean_value(x) ((x) != Sfalse) #define Scar(x) (*((ptr *)((uptr)(x)+7))) #define Scdr(x) (*((ptr *)((uptr)(x)+15))) #define Sflonum_value(x) (*((double *)((uptr)(x)+6))) #define Svector_length(x) ((iptr)((uptr)(*((iptr *)((uptr)(x)+1)))>>4)) #define Svector_ref(x,i) (((ptr *)((uptr)(x)+9))[i]) #define Sfxvector_length(x) ((iptr)((uptr)(*((iptr *)((uptr)(x)+1)))>>4)) #define Sfxvector_ref(x,i) (((ptr *)((uptr)(x)+9))[i]) #define Sbytevector_length(x) ((iptr)((uptr)(*((iptr *)((uptr)(x)+1)))>>3)) #define Sbytevector_u8_ref(x,i) (((octet *)((uptr)(x)+9))[i]) /* Warning: Sbytevector_data(x) returns a pointer into x. */ #define Sbytevector_data(x) &Sbytevector_u8_ref(x,0) #define Sstring_length(x) ((iptr)((uptr)(*((iptr *)((uptr)(x)+1)))>>4)) #define Sstring_ref(x,i) Schar_value(((string_char *)((uptr)(x)+9))[i]) #define Sunbox(x) (*((ptr *)((uptr)(x)+9))) EXPORT iptr Sinteger_value(ptr); #define Sunsigned_value(x) (uptr)Sinteger_value(x) EXPORT int Sinteger32_value(ptr); #define Sunsigned32_value(x) (unsigned int)Sinteger32_value(x) EXPORT long Sinteger64_value(ptr); #define Sunsigned64_value(x) (unsigned long)Sinteger64_value(x) /* Mutators */ EXPORT void Sset_box(ptr, ptr); EXPORT void Sset_car(ptr, ptr); EXPORT void Sset_cdr(ptr, ptr); #define Sstring_set(x,i,c) ((void)((((string_char *)((uptr)(x)+9))[i]) = (string_char)(uptr)Schar(c))) #define Sfxvector_set(x,i,n) ((void)(Sfxvector_ref(x,i) = (n))) #define Sbytevector_u8_set(x,i,n) ((void)(Sbytevector_u8_ref(x,i) = (n))) EXPORT void Svector_set(ptr, iptr, ptr); /* Constructors */ #define Sfixnum(x) ((ptr)(uptr)((x)*8)) #define Schar(x) ((ptr)(uptr)((x)<<8|0x16)) #define Snil ((ptr)0x26) #define Strue ((ptr)0xE) #define Sfalse ((ptr)0x6) #define Sboolean(x) ((x)?Strue:Sfalse) #define Sbwp_object ((ptr)0x4E) #define Seof_object ((ptr)0x36) #define Svoid ((ptr)0x3E) EXPORT ptr Scons(ptr, ptr); EXPORT ptr Sstring_to_symbol(const char *); EXPORT ptr Ssymbol_to_string(ptr); EXPORT ptr Sflonum(double); EXPORT ptr Smake_vector(iptr, ptr); EXPORT ptr Smake_fxvector(iptr, ptr); EXPORT ptr Smake_bytevector(iptr, int); EXPORT ptr Smake_string(iptr, int); EXPORT ptr Smake_uninitialized_string(iptr); EXPORT ptr Sstring(const char *); EXPORT ptr Sstring_of_length(const char *, iptr); EXPORT ptr Sstring_utf8(const char*, iptr); EXPORT ptr Sbox(ptr); EXPORT ptr Sinteger(iptr); EXPORT ptr Sunsigned(uptr); EXPORT ptr Sinteger32(int); EXPORT ptr Sunsigned32(unsigned int); EXPORT ptr Sinteger64(long); EXPORT ptr Sunsigned64(unsigned long); /* Miscellaneous */ EXPORT ptr Stop_level_value(ptr); EXPORT void Sset_top_level_value(ptr, ptr); EXPORT void Slock_object(ptr); EXPORT void Sunlock_object(ptr); EXPORT int Slocked_objectp(ptr); EXPORT void Sforeign_symbol(const char *, void *); EXPORT void Sregister_symbol(const char *, void *); /* Support for calls into Scheme */ EXPORT ptr Scall0(ptr); EXPORT ptr Scall1(ptr, ptr); EXPORT ptr Scall2(ptr, ptr, ptr); EXPORT ptr Scall3(ptr, ptr, ptr, ptr); EXPORT void Sinitframe(iptr); EXPORT void Sput_arg(iptr, ptr); EXPORT ptr Scall(ptr, iptr); /* Warning: Sforeign_callable_entry_point(x) returns a pointer into x. */ #define Sforeign_callable_entry_point(x) ((void (*)(void))((uptr)(x)+65)) #define Sforeign_callable_code_object(x) ((ptr)((uptr)(x)-65)) /* Customization support. */ EXPORT const char * Skernel_version(void); EXPORT void Sretain_static_relocation(void); EXPORT void Sset_verbose(int); EXPORT void Sscheme_init(void (*)(void)); EXPORT void Sregister_boot_file(const char *); EXPORT void Sregister_boot_file_fd(const char *, int fd); EXPORT void Sregister_heap_file(const char *); EXPORT void Scompact_heap(void); EXPORT void Ssave_heap(const char *, int); EXPORT void Sbuild_heap(const char *, void (*)(void)); EXPORT void Senable_expeditor(const char *); EXPORT int Sscheme_start(int, const char *[]); EXPORT int Sscheme_script(const char *, int, const char *[]); EXPORT int Sscheme_program(const char *, int, const char *[]); EXPORT void Sscheme_deinit(void); /* Features. */ #define FEATURE_ICONV #define FEATURE_EXPEDITOR /* Locking macros. */ #define INITLOCK(addr) \ __asm__ __volatile__ ("movq $0, (%0)"\ : \ : "r" (addr) \ : "memory") #define SPINLOCK(addr) \ __asm__ __volatile__ ("0:\n\t"\ "movq $1, %%rax\n\t"\ "xchgq (%0), %%rax\n\t"\ "cmpq $0, %%rax\n\t"\ "je 2f\n\t"\ "1:\n\t"\ "pause\n\t"\ "cmpq $0, (%0)\n\t"\ "je 0b\n\t"\ "jmp 1b\n\t"\ "2:"\ : \ : "r" (addr) \ : "rax", "flags", "memory") #define UNLOCK(addr) \ __asm__ __volatile__ ("movq $0, (%0)"\ : \ : "r" (addr) \ :"memory") #define LOCKED_INCR(addr, ret) \ __asm__ __volatile__ ("lock; incq (%1)\n\t"\ "sete %b0\n\t"\ "movzx %b0, %0\n\t"\ : "=q" (ret) \ : "r" (addr) \ : "flags", "memory") #define LOCKED_DECR(addr, ret) \ __asm__ __volatile__ ("lock; decq (%1)\n\t"\ "sete %b0\n\t"\ "movzx %b0, %0\n\t"\ : "=q" (ret) \ : "r" (addr) \ : "flags", "memory")