#include "escheme.h" #include #define MAKEINT scheme_make_integer_value_from_unsigned_long_long #define NAME "extension" #define FUNCTION "get-pointer-address" static Scheme_Object *getPointerAddress(int argc,Scheme_Object **argv) { if (argc != 1) scheme_signal_error(FUNCTION " takes 1 argument, got %d arguments.",argc); Scheme_Object* ptr = argv[0]; if(ptr==NULL) return MAKEINT(0); if(SCHEME_CPTRP(ptr)) { return MAKEINT((uintptr_t)SCHEME_CPTR_VAL(ptr)); } scheme_signal_error(FUNCTION " called on something that isn't a pointer! (%V)",ptr); return NULL; } Scheme_Object* scheme_module_name(void) { return scheme_intern_symbol(NAME); } Scheme_Object* scheme_initialize(Scheme_Env* env) { Scheme_Env* mod = scheme_primitive_module( scheme_module_name(), env); Scheme_Object* procedure = scheme_make_prim_w_arity( getPointerAddress, FUNCTION, 1, 1); scheme_add_global(FUNCTION,procedure,mod); scheme_finish_primitive_module(mod); return procedure; } Scheme_Object* scheme_reload(Scheme_Env* env) { return scheme_initialize(env); }