1 typedef struct { 2 /*========================================================================*/ 3 /* setjmpup (continuations) */ 4 /*========================================================================*/ 5 void (*scheme_init_jmpup_buf)(Scheme_Jumpup_Buf *b); 6 int (*scheme_setjmpup_relative)(Scheme_Jumpup_Buf *b, void *base, 7 void * volatile start, struct Scheme_Cont *cont); 8 void (*scheme_longjmpup)(Scheme_Jumpup_Buf *b); 9 void (*scheme_reset_jmpup_buf)(Scheme_Jumpup_Buf *b); 10 #ifdef USE_MZ_SETJMP 11 Scheme_Setjmp_Proc (*scheme_get_mz_setjmp)(void); 12 int (*scheme_mz_setjmp)(mz_pre_jmp_buf b); 13 void (*scheme_mz_longjmp)(mz_pre_jmp_buf b, int v); 14 #endif 15 void (*scheme_clear_escape)(void); 16 Scheme_Jumpup_Buf_Holder *(*scheme_new_jmpupbuf_holder)(void); 17 /*========================================================================*/ 18 /* parameters */ 19 /*========================================================================*/ 20 Scheme_Config *(*scheme_current_config)(void); 21 Scheme_Config *(*scheme_minimal_config)(void); 22 Scheme_Config *(*scheme_extend_config)(Scheme_Config *c, int pos, Scheme_Object *init_val); 23 void (*scheme_install_config)(Scheme_Config *); 24 Scheme_Object *(*scheme_get_param)(Scheme_Config *c, int pos); 25 void (*scheme_set_param)(Scheme_Config *c, int pos, Scheme_Object *o); 26 Scheme_Object *(*scheme_get_thread_param)(Scheme_Config *c, Scheme_Thread_Cell_Table *cells, int pos); 27 void (*scheme_set_thread_param)(Scheme_Config *c, Scheme_Thread_Cell_Table *cells, int pos, Scheme_Object *o); 28 Scheme_Env *(*scheme_get_env)(Scheme_Config *config); 29 Scheme_Thread_Cell_Table *(*scheme_empty_cell_table)(); 30 Scheme_Thread_Cell_Table *(*scheme_inherit_cells)(Scheme_Thread_Cell_Table *cells); 31 Scheme_Object *(*scheme_current_break_cell)(); 32 /*========================================================================*/ 33 /* threads */ 34 /*========================================================================*/ 35 #ifndef USE_THREAD_LOCAL 36 # ifndef LINK_EXTENSIONS_BY_TABLE 37 Scheme_Thread *scheme_current_thread; 38 volatile int scheme_fuel_counter; 39 # else 40 Scheme_Thread **scheme_current_thread_ptr; 41 volatile int *scheme_fuel_counter_ptr; 42 # endif 43 #endif 44 Scheme_Thread *(*scheme_get_current_thread)(); 45 int (*scheme_is_atomic)(void); 46 void (*scheme_start_atomic)(void); 47 void (*scheme_end_atomic)(void); 48 void (*scheme_end_atomic_no_swap)(void); 49 void (*scheme_start_in_scheduler)(void); 50 void (*scheme_end_in_scheduler)(void); 51 void (*scheme_start_atomic_no_break)(void); 52 void (*scheme_end_atomic_can_break)(void); 53 void (*scheme_out_of_fuel)(void); 54 Scheme_Object *(*scheme_thread)(Scheme_Object *thunk); 55 Scheme_Object *(*scheme_thread_w_details)(Scheme_Object *thunk, 56 Scheme_Config *init_config, 57 Scheme_Thread_Cell_Table *copy_from, 58 Scheme_Object *break_cell, 59 Scheme_Custodian *owning_custodian, 60 int suspend_to_kill); 61 void (*scheme_kill_thread)(Scheme_Thread *p); 62 void (*scheme_break_thread)(Scheme_Thread *p); 63 void (*scheme_break_kind_thread)(Scheme_Thread *p, int kind); 64 void (*scheme_break_main_thread)(); 65 void (*scheme_break_main_thread_at)(void *); 66 void (*scheme_break_kind_main_thread_at)(void *, int kind); 67 void *(*scheme_get_main_thread_break_handle)(); 68 void (*scheme_set_break_main_target)(Scheme_Thread *p); 69 void (*scheme_thread_block)(float sleep_time); 70 void (*scheme_thread_block_enable_break)(float sleep_time, int enable); 71 void (*scheme_swap_thread)(Scheme_Thread *process); 72 void (*scheme_making_progress)(); 73 void (*scheme_weak_suspend_thread)(Scheme_Thread *p); 74 void (*scheme_weak_resume_thread)(Scheme_Thread *p); 75 int (*scheme_block_until)(Scheme_Ready_Fun f, Scheme_Needs_Wakeup_Fun, Scheme_Object *, float); 76 int (*scheme_block_until_enable_break)(Scheme_Ready_Fun f, Scheme_Needs_Wakeup_Fun, Scheme_Object *, 77 float, int enable); 78 int (*scheme_block_until_unless)(Scheme_Ready_Fun f, Scheme_Needs_Wakeup_Fun fdf, 79 Scheme_Object *data, float delay, 80 Scheme_Object *unless, 81 int enable_break); 82 void (*scheme_wait_input_allowed)(Scheme_Input_Port *port, int nonblock); 83 int (*scheme_unless_ready)(Scheme_Object *unless); 84 int (*scheme_in_main_thread)(void); 85 void (*scheme_cancel_sleep)(void); 86 void (*scheme_start_sleeper_thread)(void (*mzsleep)(float seconds, void *fds), float secs, void *fds, int hit_fd); 87 void (*scheme_end_sleeper_thread)(); 88 void (*scheme_set_place_sleep)(Scheme_Sleep_Proc slp); 89 void (*scheme_notify_sleep_progress)(); 90 Scheme_Object *(*scheme_make_thread_cell)(Scheme_Object *def_val, int inherited); 91 Scheme_Object *(*scheme_thread_cell_get)(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells); 92 void (*scheme_thread_cell_set)(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells, Scheme_Object *v); 93 int (*scheme_tls_allocate)(); 94 void (*scheme_tls_set)(int pos, void *v); 95 void *(*scheme_tls_get)(int pos); 96 Scheme_Custodian *(*scheme_make_custodian)(Scheme_Custodian *); 97 Scheme_Custodian_Reference *(*scheme_add_managed)(Scheme_Custodian *m, Scheme_Object *o, 98 Scheme_Close_Custodian_Client *f, void *data, 99 int strong); 100 Scheme_Custodian_Reference *(*scheme_add_managed_close_on_exit)(Scheme_Custodian *m, Scheme_Object *o, 101 Scheme_Close_Custodian_Client *f, void *data); 102 void (*scheme_custodian_check_available)(Scheme_Custodian *m, const char *who, const char *what); 103 int (*scheme_custodian_is_available)(Scheme_Custodian *m); 104 void (*scheme_remove_managed)(Scheme_Custodian_Reference *m, Scheme_Object *o); 105 void (*scheme_close_managed)(Scheme_Custodian *m); 106 void (*scheme_schedule_custodian_close)(Scheme_Custodian *c); 107 void (*scheme_add_custodian_extractor)(Scheme_Type t, Scheme_Custodian_Extractor e); 108 int (*scheme_flush_managed)(Scheme_Plumber *p, int catch_errors); 109 Scheme_Object *(*scheme_add_flush)(Scheme_Plumber *p, Scheme_Object *proc_or_port, int weak_flush); 110 void (*scheme_remove_flush)(Scheme_Object *h); 111 void (*scheme_add_atexit_closer)(Scheme_Exit_Closer_Func f); 112 int (*scheme_atexit)(void (*func)(void)); 113 void (*scheme_add_evt)(Scheme_Type type, 114 Scheme_Ready_Fun ready, 115 Scheme_Needs_Wakeup_Fun wakeup, 116 Scheme_Sync_Filter_Fun filter, 117 int can_redirect); 118 void (*scheme_add_evt_through_sema)(Scheme_Type type, 119 Scheme_Sync_Sema_Fun sema, 120 Scheme_Sync_Filter_Fun filter); 121 int (*scheme_is_evt)(Scheme_Object *o); 122 Scheme_Object *(*scheme_sync)(int argc, Scheme_Object *argv[]); 123 Scheme_Object *(*scheme_sync_enable_break)(int argc, Scheme_Object *argv[]); 124 Scheme_Object *(*scheme_sync_timeout)(int argc, Scheme_Object *argv[]); 125 Scheme_Object *(*scheme_make_evt_set)(int argc, Scheme_Object **argv); 126 void (*scheme_add_swap_callback)(Scheme_Closure_Func f, Scheme_Object *data); 127 void (*scheme_add_swap_out_callback)(Scheme_Closure_Func f, Scheme_Object *data); 128 Scheme_Object *(*scheme_call_enable_break)(Scheme_Prim *prim, int argc, Scheme_Object *argv[]); 129 int (*scheme_close_should_force_port_closed)(); 130 void (*scheme_push_kill_action)(Scheme_Kill_Action_Func f, void *d); 131 void (*scheme_pop_kill_action)(); 132 void (*scheme_set_can_break)(int on); 133 void (*scheme_push_break_enable)(Scheme_Cont_Frame_Data *cframe, int on, int pre_check); 134 void (*scheme_pop_break_enable)(Scheme_Cont_Frame_Data *cframe, int post_check); 135 Scheme_Object *(*scheme_abort_continuation_no_dws)(Scheme_Object *pt, Scheme_Object *v); 136 Scheme_Object *(*scheme_call_with_composable_no_dws)(Scheme_Object *proc, Scheme_Object *pt); 137 Scheme_On_Atomic_Timeout_Proc (*scheme_set_on_atomic_timeout)(Scheme_On_Atomic_Timeout_Proc p, void *data); 138 /*========================================================================*/ 139 /* error handling */ 140 /*========================================================================*/ 141 void (*scheme_signal_error)(const char *msg, ...); 142 void (*scheme_raise_exn)(int exnid, ...); 143 void (*scheme_warning)(char *msg, ...); 144 void (*scheme_raise)(Scheme_Object *exn); 145 int (*scheme_log_level_p)(Scheme_Logger *logger, int level); 146 int (*scheme_log_level_topic_p)(Scheme_Logger *logger, int level, Scheme_Object *name); 147 void (*scheme_log)(Scheme_Logger *logger, int level, int flags, 148 const char *msg, ...); 149 void (*scheme_log_w_data)(Scheme_Logger *logger, int level, int flags, 150 Scheme_Object *data, 151 const char *msg, ...); 152 void (*scheme_log_message)(Scheme_Logger *logger, int level, char *buffer, intptr_t len, Scheme_Object *data); 153 void (*scheme_log_name_message)(Scheme_Logger *logger, int level, Scheme_Object *name, 154 char *buffer, intptr_t len, Scheme_Object *data); 155 void (*scheme_log_name_pfx_message)(Scheme_Logger *logger, int level, Scheme_Object *name, 156 char *buffer, intptr_t len, Scheme_Object *data, 157 int prefix_message); 158 void (*scheme_log_abort)(char *buffer); 159 void (*scheme_log_warning)(char *buffer); 160 void (*scheme_glib_log_message)(const char *log_domain, int log_level, const char *message, void *user_data); 161 void *(*scheme_glib_log_message_test)(char *str); 162 void (*scheme_out_of_memory_abort)(); 163 void (*scheme_wrong_count)(const char *name, int minc, int maxc, int argc, Scheme_Object **argv); 164 void (*scheme_wrong_count_m)(const char *name, int minc, int maxc, int argc, Scheme_Object **argv, int is_method); 165 void (*scheme_case_lambda_wrong_count)(const char *name, int argc, Scheme_Object **argv, int is_method, int count, ...); 166 void (*scheme_wrong_type)(const char *name, const char *expected, int which, int argc, Scheme_Object **argv); 167 void (*scheme_wrong_contract)(const char *name, const char *expected, int which, int argc, Scheme_Object **argv); 168 void (*scheme_wrong_field_type)(Scheme_Object *c_name, const char *expected, Scheme_Object *o); 169 void (*scheme_wrong_field_contract)(Scheme_Object *c_name, const char *expected, Scheme_Object *o); 170 void (*scheme_arg_mismatch)(const char *name, const char *msg, Scheme_Object *o); 171 void (*scheme_contract_error)(const char *name, const char *msg, ...); 172 void (*scheme_wrong_return_arity)(const char *where, int expected, int got, Scheme_Object **argv, const char *context_detail, ...); 173 void (*scheme_unbound_global)(Scheme_Bucket *b); 174 Scheme_Object *(*scheme_dynamic_wind)(void (*pre)(void *), 175 Scheme_Object *(* volatile act)(void *), 176 void (* volatile post)(void *), 177 Scheme_Object *(*jmp_handler)(void *), 178 void * volatile data); 179 /*========================================================================*/ 180 /* types */ 181 /*========================================================================*/ 182 Scheme_Type (*scheme_make_type)(const char *name); 183 char *(*scheme_get_type_name)(Scheme_Type type); 184 char *(*scheme_get_type_name_or_null)(Scheme_Type type); 185 /*========================================================================*/ 186 /* constants */ 187 /*========================================================================*/ 188 Scheme_Object *scheme_eof; 189 Scheme_Object *(*scheme_make_eof)(void); 190 Scheme_Object *scheme_null; 191 Scheme_Object *(*scheme_make_null)(void); 192 Scheme_Object *scheme_true; 193 Scheme_Object *(*scheme_make_true)(void); 194 Scheme_Object *scheme_false; 195 Scheme_Object *(*scheme_make_false)(void); 196 Scheme_Object *scheme_void; 197 Scheme_Object *(*scheme_make_void)(void); 198 Scheme_Object *scheme_undefined; 199 Scheme_Object *scheme_tail_call_waiting; 200 Scheme_Object *scheme_multiple_values; 201 unsigned short **scheme_uchar_table; 202 unsigned char **scheme_uchar_cases_table; 203 unsigned char **scheme_uchar_cats_table; 204 int *scheme_uchar_ups; 205 int *scheme_uchar_downs; 206 int *scheme_uchar_titles; 207 int *scheme_uchar_folds; 208 unsigned char *scheme_uchar_combining_classes; 209 void *scheme_on_demand_jit_code; 210 /*========================================================================*/ 211 /* evaluation */ 212 /*========================================================================*/ 213 Scheme_Object *(*scheme_eval)(Scheme_Object *obj, Scheme_Env *env); 214 Scheme_Object *(*scheme_eval_multi)(Scheme_Object *obj, Scheme_Env *env); 215 Scheme_Object *(*scheme_eval_with_prompt)(Scheme_Object *obj, Scheme_Env *env); 216 Scheme_Object *(*scheme_eval_multi_with_prompt)(Scheme_Object *obj, Scheme_Env *env); 217 Scheme_Object *(*scheme_eval_compiled)(Scheme_Object *obj, Scheme_Env *env); 218 Scheme_Object *(*scheme_eval_compiled_multi)(Scheme_Object *obj, Scheme_Env *env); 219 Scheme_Object *(*_scheme_eval_compiled)(Scheme_Object *obj, Scheme_Env *env); 220 Scheme_Object *(*_scheme_eval_compiled_multi)(Scheme_Object *obj, Scheme_Env *env); 221 Scheme_Object *(*scheme_apply)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); 222 Scheme_Object *(*scheme_apply_multi)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); 223 Scheme_Object *(*scheme_apply_no_eb)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); 224 Scheme_Object *(*scheme_apply_multi_no_eb)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); 225 Scheme_Object *(*scheme_apply_to_list)(Scheme_Object *rator, Scheme_Object *argss); 226 Scheme_Object *(*scheme_apply_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); 227 Scheme_Object *(*scheme_apply_multi_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); 228 Scheme_Object *(*_scheme_apply_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); 229 Scheme_Object *(*_scheme_apply_multi_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); 230 Scheme_Object *(*scheme_eval_string)(const char *str, Scheme_Env *env); 231 Scheme_Object *(*scheme_eval_string_multi)(const char *str, Scheme_Env *env); 232 Scheme_Object *(*scheme_eval_string_all)(const char *str, Scheme_Env *env, int all); 233 Scheme_Object *(*scheme_eval_string_with_prompt)(const char *str, Scheme_Env *env); 234 Scheme_Object *(*scheme_eval_string_multi_with_prompt)(const char *str, Scheme_Env *env); 235 Scheme_Object *(*scheme_eval_string_all_with_prompt)(const char *str, Scheme_Env *env, int all); 236 Scheme_Object *(*scheme_eval_all_with_prompt)(Scheme_Object *port, Scheme_Env *env, int all); 237 Scheme_Object *(*scheme_eval_module_string)(const char *str, Scheme_Env *env); 238 Scheme_Object *(*_scheme_apply_known_prim_closure)(Scheme_Object *rator, int argc, 239 Scheme_Object **argv); 240 Scheme_Object *(*_scheme_apply_known_prim_closure_multi)(Scheme_Object *rator, int argc, 241 Scheme_Object **argv); 242 Scheme_Object *(*_scheme_apply_prim_closure)(Scheme_Object *rator, int argc, 243 Scheme_Object **argv); 244 Scheme_Object *(*_scheme_apply_prim_closure_multi)(Scheme_Object *rator, int argc, 245 Scheme_Object **argv); 246 Scheme_Object **(*scheme_current_argument_stack)(); 247 Scheme_Object *(*scheme_call_with_prompt)(Scheme_Closed_Prim f, void *data); 248 Scheme_Object *(*scheme_call_with_prompt_multi)(Scheme_Closed_Prim f, void *data); 249 Scheme_Object *(*_scheme_call_with_prompt)(Scheme_Closed_Prim f, void *data); 250 Scheme_Object *(*_scheme_call_with_prompt_multi)(Scheme_Closed_Prim f, void *data); 251 Scheme_Object *(*scheme_values)(int c, Scheme_Object **v); 252 Scheme_Object *(*scheme_check_one_value)(Scheme_Object *v); 253 /* Tail calls - only use these when you're writing new functions/syntax */ 254 Scheme_Object *(*scheme_tail_apply)(Scheme_Object *f, int n, Scheme_Object **arg); 255 Scheme_Object *(*scheme_tail_apply_no_copy)(Scheme_Object *f, int n, Scheme_Object **arg); 256 Scheme_Object *(*scheme_tail_apply_to_list)(Scheme_Object *f, Scheme_Object *l); 257 Scheme_Object *(*scheme_tail_eval_expr)(Scheme_Object *obj); 258 void (*scheme_set_tail_buffer_size)(int s); 259 Scheme_Object *(*scheme_force_value)(Scheme_Object *); 260 Scheme_Object *(*scheme_force_one_value)(Scheme_Object *); 261 void (*scheme_ignore_result)(Scheme_Object *); 262 MZ_MARK_STACK_TYPE (*scheme_set_cont_mark)(Scheme_Object *key, Scheme_Object *val); 263 void (*scheme_push_continuation_frame)(Scheme_Cont_Frame_Data *); 264 void (*scheme_pop_continuation_frame)(Scheme_Cont_Frame_Data *); 265 void (*scheme_temp_dec_mark_depth)(); 266 void (*scheme_temp_inc_mark_depth)(); 267 Scheme_Object *(*scheme_current_continuation_marks)(Scheme_Object *prompt_tag); 268 Scheme_Object *(*scheme_extract_one_cc_mark)(Scheme_Object *mark_set, 269 Scheme_Object *key); 270 Scheme_Object *(*scheme_extract_one_cc_mark_to_tag)(Scheme_Object *mark_set, 271 Scheme_Object *key, 272 Scheme_Object *prompt_tag); 273 /* Internal */ 274 Scheme_Object *(*scheme_do_eval)(Scheme_Object *obj, int _num_rands, Scheme_Object **rands, int val); 275 void (*scheme_detach_multple_array)(Scheme_Object **a); 276 /*========================================================================*/ 277 /* memory management */ 278 /*========================================================================*/ 279 /* The core allocator functions depend on the GC. Macros in scheme.h */ 280 /* map to the apporpriate core allocation function. */ 281 #ifndef SCHEME_NO_GC 282 # ifndef SCHEME_NO_GC_PROTO 283 void *(*GC_malloc)(size_t size_in_bytes); 284 void *(*GC_malloc_atomic)(size_t size_in_bytes); 285 # ifdef MZ_PRECISE_GC 286 void *(*GC_malloc_one_tagged)(size_t size_in_bytes); 287 void *(*GC_malloc_atomic_uncollectable)(size_t size_in_bytes); 288 void *(*scheme_malloc_uncollectable)(size_t size_in_bytes); 289 void *(*GC_malloc_allow_interior)(size_t size_in_bytes); 290 void *(*GC_malloc_atomic_allow_interior)(size_t size_in_bytes); 291 void *(*GC_malloc_tagged_allow_interior)(size_t size_in_bytes); 292 # else 293 void *(*GC_malloc_stubborn)(size_t size_in_bytes); 294 void *(*GC_malloc_uncollectable)(size_t size_in_bytes); 295 # endif 296 # endif 297 #endif 298 void *(*scheme_malloc_code)(intptr_t size); 299 void *(*scheme_malloc_permanent_code)(intptr_t size); 300 void (*scheme_free_code)(void *p); 301 #ifndef MZ_PRECISE_GC 302 void *(*scheme_malloc_gcable_code)(intptr_t size); 303 #endif 304 void *(*scheme_malloc_eternal)(size_t n); 305 void (*scheme_end_stubborn_change)(void *p); 306 void *(*scheme_calloc)(size_t num, size_t size); 307 char *(*scheme_strdup)(const char *str); 308 char *(*scheme_strdup_eternal)(const char *str); 309 void *(*scheme_malloc_fail_ok)(void *(*f)(size_t), size_t); 310 #ifndef MZ_PRECISE_GC 311 void (*scheme_late_weak_reference)(void **p); 312 void (*scheme_late_weak_reference_indirect)(void **p, void *v); 313 void (*scheme_weak_reference)(void **p); 314 void (*scheme_weak_reference_indirect)(void **p, void *v); 315 void (*scheme_unweak_reference)(void **p); 316 #endif 317 void (*scheme_add_finalizer)(void *p, void (*f)(void *p, void *data), void *data); 318 void (*scheme_add_finalizer_once)(void *p, void (*f)(void *p, void *data), void *data); 319 void (*scheme_subtract_finalizer)(void *p, void (*f)(void *p, void *data), void *data); 320 void (*scheme_add_scheme_finalizer)(void *p, void (*f)(void *p, void *data), void *data); 321 void (*scheme_add_scheme_finalizer_once)(void *p, void (*f)(void *p, void *data), void *data); 322 void (*scheme_register_finalizer)(void *p, 323 void (*f)(void *p, void *data), void *data, 324 void (**oldf)(void *p, void *data), 325 void **olddata); 326 void (*scheme_remove_all_finalization)(void *p); 327 void (*scheme_dont_gc_ptr)(void *p); 328 void (*scheme_gc_ptr_ok)(void *p); 329 void (*scheme_collect_garbage)(void); 330 void (*scheme_collect_garbage_minor)(void); 331 void (*scheme_enable_garbage_collection)(int on); 332 void (*scheme_incremental_garbage_collection)(int on); 333 #ifdef MZ_PRECISE_GC 334 # ifndef USE_THREAD_LOCAL 335 void **GC_variable_stack; 336 # endif 337 void (*GC_register_traversers)(short tag, Size_Proc size, Mark_Proc mark, Fixup_Proc fixup, 338 int is_constant_size, int is_atomic); 339 void *(*GC_resolve)(void *p); 340 void (*GC_mark)(void *p); 341 void (*GC_fixup)(void *p); 342 void *(*GC_fixup_self)(void *p); 343 #endif 344 void **(*scheme_malloc_immobile_box)(void *p); 345 void (*scheme_free_immobile_box)(void **b); 346 Scheme_Object *(*scheme_add_gc_callback)(Scheme_Object *pre, Scheme_Object *post); 347 void (*scheme_remove_gc_callback)(Scheme_Object *key); 348 void (*scheme_register_type_gc_shape)(Scheme_Type type, intptr_t *shape_str); 349 /*========================================================================*/ 350 /* hash tables */ 351 /*========================================================================*/ 352 Scheme_Bucket_Table *(*scheme_make_bucket_table)(intptr_t size_hint, int type); 353 void (*scheme_add_to_table)(Scheme_Bucket_Table *table, const char *key, void *val, int); 354 void (*scheme_change_in_table)(Scheme_Bucket_Table *table, const char *key, void *new_val); 355 void *(*scheme_lookup_in_table)(Scheme_Bucket_Table *table, const char *key); 356 Scheme_Bucket *(*scheme_bucket_from_table)(Scheme_Bucket_Table *table, const char *key); 357 int (*scheme_bucket_table_equal)(Scheme_Bucket_Table *t1, Scheme_Bucket_Table *t2); 358 Scheme_Bucket_Table *(*scheme_clone_bucket_table)(Scheme_Bucket_Table *bt); 359 void (*scheme_clear_bucket_table)(Scheme_Bucket_Table *bt); 360 int (*scheme_bucket_table_index)(Scheme_Bucket_Table *hash, mzlonglong pos, Scheme_Object **_key, Scheme_Object **_val); 361 Scheme_Object *(*scheme_bucket_table_next)(Scheme_Bucket_Table *hash, mzlonglong start); 362 Scheme_Hash_Table *(*scheme_make_hash_table)(int type); 363 Scheme_Hash_Table *(*scheme_make_hash_table_equal)(); 364 Scheme_Hash_Table *(*scheme_make_hash_table_eqv)(); 365 void (*scheme_hash_set)(Scheme_Hash_Table *table, Scheme_Object *key, Scheme_Object *val); 366 Scheme_Object *(*scheme_hash_get)(Scheme_Hash_Table *table, Scheme_Object *key); 367 Scheme_Object *(*scheme_eq_hash_get)(Scheme_Hash_Table *table, Scheme_Object *key); 368 void (*scheme_hash_set_atomic)(Scheme_Hash_Table *table, Scheme_Object *key, Scheme_Object *val); 369 Scheme_Object *(*scheme_hash_get_atomic)(Scheme_Hash_Table *table, Scheme_Object *key); 370 int (*scheme_hash_table_equal)(Scheme_Hash_Table *t1, Scheme_Hash_Table *t2); 371 int (*scheme_is_hash_table_equal)(Scheme_Object *o); 372 int (*scheme_is_hash_table_eqv)(Scheme_Object *o); 373 Scheme_Hash_Table *(*scheme_clone_hash_table)(Scheme_Hash_Table *ht); 374 void (*scheme_clear_hash_table)(Scheme_Hash_Table *ht); 375 int (*scheme_hash_table_index)(Scheme_Hash_Table *hash, mzlonglong pos, Scheme_Object **_key, Scheme_Object **_val); 376 Scheme_Object *(*scheme_hash_table_next)(Scheme_Hash_Table *hash, mzlonglong start); 377 Scheme_Hash_Tree *(*scheme_make_hash_tree)(int kind); 378 Scheme_Hash_Tree *(*scheme_hash_tree_set)(Scheme_Hash_Tree *tree, Scheme_Object *key, Scheme_Object *val); 379 Scheme_Object *(*scheme_hash_tree_get)(Scheme_Hash_Tree *tree, Scheme_Object *key); 380 Scheme_Object *(*scheme_eq_hash_tree_get)(Scheme_Hash_Tree *tree, Scheme_Object *key); 381 mzlonglong (*scheme_hash_tree_next)(Scheme_Hash_Tree *tree, mzlonglong pos); 382 int (*scheme_hash_tree_index)(Scheme_Hash_Tree *tree, mzlonglong pos, Scheme_Object **_key, Scheme_Object **_val); 383 int (*scheme_hash_tree_equal)(Scheme_Hash_Tree *t1, Scheme_Hash_Tree *t2); 384 int (*scheme_is_hash_tree_equal)(Scheme_Object *o); 385 int (*scheme_is_hash_tree_eqv)(Scheme_Object *o); 386 /*========================================================================*/ 387 /* basic Scheme value constructors */ 388 /*========================================================================*/ 389 Scheme_Object *(*scheme_make_prim)(Scheme_Prim *prim); 390 Scheme_Object *(*scheme_make_noneternal_prim)(Scheme_Prim *prim); 391 Scheme_Object *(*scheme_make_prim_w_arity)(Scheme_Prim *prim, const char *name, 392 mzshort mina, mzshort maxa); 393 Scheme_Object *(*scheme_make_folding_prim)(Scheme_Prim *prim, 394 const char *name, 395 mzshort mina, mzshort maxa, 396 short functional); 397 Scheme_Object *(*scheme_make_immed_prim)(Scheme_Prim *prim, 398 const char *name, 399 mzshort mina, mzshort maxa); 400 Scheme_Object *(*scheme_make_noncm_prim)(Scheme_Prim *prim, 401 const char *name, 402 mzshort mina, mzshort maxa); 403 Scheme_Object *(*scheme_make_noneternal_prim_w_arity)(Scheme_Prim *prim, 404 const char *name, 405 mzshort mina, mzshort maxa); 406 Scheme_Object *(*scheme_make_prim_w_everything)(Scheme_Prim *fun, int eternal, 407 const char *name, 408 mzshort mina, mzshort maxa, 409 int folding, 410 mzshort minr, mzshort maxr); 411 Scheme_Object *(*scheme_make_prim_closure_w_arity)(Scheme_Primitive_Closure_Proc *prim, 412 int size, Scheme_Object **vals, 413 const char *name, 414 mzshort mina, mzshort maxa); 415 Scheme_Object *(*scheme_make_folding_prim_closure)(Scheme_Primitive_Closure_Proc *prim, 416 int size, Scheme_Object **vals, 417 const char *name, 418 mzshort mina, mzshort maxa, 419 short functional); 420 Scheme_Object *(*scheme_make_closed_prim)(Scheme_Closed_Prim *prim, void *data); 421 Scheme_Object *(*scheme_make_closed_prim_w_arity)(Scheme_Closed_Prim *prim, 422 void *data, const char *name, 423 mzshort mina, mzshort maxa); 424 Scheme_Object *(*scheme_make_folding_closed_prim)(Scheme_Closed_Prim *prim, 425 void *data, const char *name, 426 mzshort mina, mzshort maxa, 427 short functional); 428 Scheme_Object *(*scheme_make_closed_prim_w_everything)(Scheme_Closed_Prim *fun, 429 void *data, 430 const char *name, 431 mzshort mina, mzshort maxa, 432 short folding, 433 mzshort minr, mzshort maxr); 434 void (*scheme_prim_is_method)(Scheme_Object *o); 435 Scheme_Object *(*scheme_make_pair)(Scheme_Object *car, Scheme_Object *cdr); 436 Scheme_Object *(*scheme_make_mutable_pair)(Scheme_Object *car, Scheme_Object *cdr); 437 Scheme_Object *(*scheme_make_list_pair)(Scheme_Object *car, Scheme_Object *cdr); 438 Scheme_Object *(*scheme_make_raw_pair)(Scheme_Object *, Scheme_Object *); 439 Scheme_Object *(*scheme_make_byte_string)(const char *chars); 440 Scheme_Object *(*scheme_make_sized_byte_string)(char *chars, intptr_t len, int copy); 441 Scheme_Object *(*scheme_make_sized_offset_byte_string)(char *chars, intptr_t d, intptr_t len, int copy); 442 Scheme_Object *(*scheme_make_immutable_sized_byte_string)(char *chars, intptr_t len, int copy); 443 Scheme_Object *(*scheme_make_byte_string_without_copying)(char *chars); 444 Scheme_Object *(*scheme_alloc_byte_string)(intptr_t size, char fill); 445 Scheme_Object *(*scheme_append_byte_string)(Scheme_Object *, Scheme_Object *); 446 Scheme_Object *(*scheme_make_utf8_string)(const char *chars); 447 Scheme_Object *(*scheme_make_sized_utf8_string)(char *chars, intptr_t len); 448 Scheme_Object *(*scheme_make_sized_offset_utf8_string)(char *chars, intptr_t d, intptr_t len); 449 Scheme_Object *(*scheme_make_immutable_sized_utf8_string)(char *chars, intptr_t len); 450 Scheme_Object *(*scheme_make_locale_string)(const char *chars); 451 Scheme_Object *(*scheme_char_string_to_byte_string)(Scheme_Object *s); 452 Scheme_Object *(*scheme_byte_string_to_char_string)(Scheme_Object *s); 453 Scheme_Object *(*scheme_char_string_to_byte_string_locale)(Scheme_Object *s); 454 Scheme_Object *(*scheme_byte_string_to_char_string_locale)(Scheme_Object *s); 455 Scheme_Object *(*scheme_char_string_to_path)(Scheme_Object *p); 456 Scheme_Object *(*scheme_path_to_char_string)(Scheme_Object *p); 457 Scheme_Object *(*scheme_make_char_string)(const mzchar *chars); 458 Scheme_Object *(*scheme_make_sized_char_string)(mzchar *chars, intptr_t len, int copy); 459 Scheme_Object *(*scheme_make_sized_offset_char_string)(mzchar *chars, intptr_t d, intptr_t len, int copy); 460 Scheme_Object *(*scheme_make_immutable_sized_char_string)(mzchar *chars, intptr_t len, int copy); 461 Scheme_Object *(*scheme_make_char_string_without_copying)(mzchar *chars); 462 Scheme_Object *(*scheme_alloc_char_string)(intptr_t size, mzchar fill); 463 Scheme_Object *(*scheme_append_char_string)(Scheme_Object *, Scheme_Object *); 464 mzchar *(*scheme_string_recase)(mzchar *s, int d, int len, int mode, int inplace, int *_len); 465 Scheme_Object *(*scheme_make_vector)(intptr_t size, Scheme_Object *fill); 466 Scheme_Double_Vector *(*scheme_alloc_flvector)(intptr_t size); 467 #ifdef MZ_LONG_DOUBLE 468 Scheme_Long_Double_Vector *(*scheme_alloc_extflvector)(intptr_t size); 469 #endif 470 Scheme_Vector *(*scheme_alloc_fxvector)(intptr_t size); 471 Scheme_Object *(*scheme_make_integer_value)(intptr_t i); 472 Scheme_Object *(*scheme_make_integer_value_from_unsigned)(uintptr_t i); 473 Scheme_Object *(*scheme_make_integer_value_from_long_long)(mzlonglong i); 474 Scheme_Object *(*scheme_make_integer_value_from_unsigned_long_long)(umzlonglong i); 475 Scheme_Object *(*scheme_make_integer_value_from_long_halves)(uintptr_t lowhalf, uintptr_t hihalf); 476 Scheme_Object *(*scheme_make_integer_value_from_unsigned_long_halves)(uintptr_t lowhalf, uintptr_t hihalf); 477 Scheme_Object *(*scheme_make_double)(double d); 478 #ifdef MZ_LONG_DOUBLE 479 Scheme_Object *(*scheme_make_long_double)(mz_long_double d); 480 #endif 481 #ifdef MZ_USE_SINGLE_FLOATS 482 Scheme_Object *(*scheme_make_float)(float f) ; 483 #endif 484 Scheme_Object *(*scheme_make_char)(mzchar ch); 485 Scheme_Object *(*scheme_make_char_or_nul)(mzchar ch); 486 Scheme_Object *(*scheme_make_sema)(intptr_t v); 487 void (*scheme_post_sema)(Scheme_Object *o); 488 void (*scheme_post_sema_all)(Scheme_Object *o); 489 int (*scheme_wait_sema)(Scheme_Object *o, int just_try); 490 int (*scheme_try_plain_sema)(Scheme_Object *o); 491 Scheme_Object **scheme_char_constants; 492 Scheme_Object *(*scheme_make_channel)(); 493 Scheme_Object *(*scheme_make_channel_put_evt)(Scheme_Object *ch, Scheme_Object *v); 494 int (*scheme_get_int_val)(Scheme_Object *o, intptr_t *v); 495 int (*scheme_get_unsigned_int_val)(Scheme_Object *o, uintptr_t *v); 496 int (*scheme_get_long_long_val)(Scheme_Object *o, mzlonglong *v); 497 int (*scheme_get_unsigned_long_long_val)(Scheme_Object *o, umzlonglong *v); 498 double (*scheme_real_to_double)(Scheme_Object *r); 499 #ifdef MZ_LONG_DOUBLE 500 mz_long_double (*scheme_real_to_long_double)(Scheme_Object *r); 501 #endif 502 Scheme_Object *(*scheme_make_cptr)(void *cptr, Scheme_Object *typetag); 503 Scheme_Object *(*scheme_make_offset_cptr)(void *cptr, intptr_t offset, Scheme_Object *typetag); 504 Scheme_Object *(*scheme_make_external_cptr)(void *cptr, Scheme_Object *typetag); 505 Scheme_Object *(*scheme_make_offset_external_cptr)(void *cptr, intptr_t offset, Scheme_Object *typetag); 506 int (*scheme_is_cpointer)(Scheme_Object *cp); 507 const char *(*scheme_get_proc_name)(Scheme_Object *p, int *len, int for_error); 508 /*========================================================================*/ 509 /* strings */ 510 /*========================================================================*/ 511 intptr_t (*scheme_utf8_decode)(const unsigned char *s, intptr_t start, intptr_t end, 512 unsigned int *us, intptr_t dstart, intptr_t dend, 513 intptr_t *ipos, char utf16, int permissive); 514 intptr_t (*scheme_utf8_decode_offset_prefix)(const unsigned char *s, intptr_t start, intptr_t end, 515 unsigned int *us, intptr_t dstart, intptr_t dend, 516 intptr_t *ipos, char utf16, int permissive); 517 intptr_t (*scheme_utf8_decode_as_prefix)(const unsigned char *s, intptr_t start, intptr_t end, 518 unsigned int *us, intptr_t dstart, intptr_t dend, 519 intptr_t *ipos, char utf16, int permissive); 520 intptr_t (*scheme_utf8_decode_all)(const unsigned char *s, intptr_t len, unsigned int *us, 521 int permissive); 522 intptr_t (*scheme_utf8_decode_prefix)(const unsigned char *s, intptr_t len, unsigned int *us, 523 int permissive); 524 mzchar *(*scheme_utf8_decode_to_buffer)(const unsigned char *s, intptr_t len, 525 mzchar *buf, intptr_t blen); 526 mzchar *(*scheme_utf8_decode_to_buffer_len)(const unsigned char *s, intptr_t len, 527 mzchar *buf, intptr_t blen, intptr_t *rlen); 528 intptr_t (*scheme_utf8_decode_count)(const unsigned char *s, intptr_t start, intptr_t end, 529 int *_state, int might_continue, int permissive); 530 intptr_t (*scheme_utf8_encode)(const unsigned int *us, intptr_t start, intptr_t end, 531 unsigned char *s, intptr_t dstart, 532 char utf16); 533 intptr_t (*scheme_utf8_encode_all)(const unsigned int *us, intptr_t len, unsigned char *s); 534 char *(*scheme_utf8_encode_to_buffer)(const mzchar *s, intptr_t len, 535 char *buf, intptr_t blen); 536 char *(*scheme_utf8_encode_to_buffer_len)(const mzchar *s, intptr_t len, 537 char *buf, intptr_t blen, intptr_t *rlen); 538 unsigned short *(*scheme_ucs4_to_utf16)(const mzchar *text, intptr_t start, intptr_t end, 539 unsigned short *buf, intptr_t bufsize, 540 intptr_t *ulen, intptr_t term_size); 541 mzchar *(*scheme_utf16_to_ucs4)(const unsigned short *text, intptr_t start, intptr_t end, 542 mzchar *buf, intptr_t bufsize, 543 intptr_t *ulen, intptr_t term_size); 544 Scheme_Object *(*scheme_open_converter)(const char *from_e, const char *to_e); 545 void (*scheme_close_converter)(Scheme_Object *conv); 546 char *(*scheme_getenv)(char *name); 547 /*========================================================================*/ 548 /* bignums */ 549 /*========================================================================*/ 550 Scheme_Object *(*scheme_make_bignum)(intptr_t v); 551 Scheme_Object *(*scheme_make_bignum_from_unsigned)(uintptr_t v); 552 Scheme_Object *(*scheme_make_bignum_from_long_long)(mzlonglong v); 553 Scheme_Object *(*scheme_make_bignum_from_unsigned_long_long)(umzlonglong v); 554 double (*scheme_bignum_to_double)(const Scheme_Object *n); 555 Scheme_Object *(*scheme_bignum_from_double)(double d); 556 #ifdef MZ_LONG_DOUBLE 557 mz_long_double (*scheme_bignum_to_long_double)(const Scheme_Object *n); 558 Scheme_Object *(*scheme_bignum_from_long_double)(mz_long_double d); 559 #endif 560 #ifdef MZ_USE_SINGLE_FLOATS 561 float (*scheme_bignum_to_float)(const Scheme_Object *n); 562 Scheme_Object *(*scheme_bignum_from_float)(float d); 563 #else 564 # define scheme_bignum_to_float scheme_bignum_to_double 565 # define scheme_bignum_from_float scheme_bignum_from_double 566 #endif 567 char *(*scheme_bignum_to_string)(const Scheme_Object *n, int radix); 568 char *(*scheme_bignum_to_allocated_string)(const Scheme_Object *n, int radix, int alloc); 569 Scheme_Object *(*scheme_read_bignum)(const mzchar *str, int offset, int radix); 570 Scheme_Object *(*scheme_read_bignum_bytes)(const char *str, int offset, int radix); 571 Scheme_Object *(*scheme_bignum_normalize)(const Scheme_Object *n); 572 /*========================================================================*/ 573 /* rationals */ 574 /*========================================================================*/ 575 Scheme_Object *(*scheme_make_rational)(const Scheme_Object *r, const Scheme_Object *d); 576 double (*scheme_rational_to_double)(const Scheme_Object *n); 577 Scheme_Object *(*scheme_rational_from_double)(double d); 578 #ifdef MZ_LONG_DOUBLE 579 mz_long_double (*scheme_rational_to_long_double)(const Scheme_Object *n); 580 Scheme_Object *(*scheme_rational_from_long_double)(mz_long_double d); 581 #endif 582 #ifdef MZ_USE_SINGLE_FLOATS 583 float (*scheme_rational_to_float)(const Scheme_Object *n); 584 Scheme_Object *(*scheme_rational_from_float)(float d); 585 #else 586 # define scheme_rational_to_float scheme_rational_to_double 587 # define scheme_rational_from_float scheme_rational_from_double 588 #endif 589 Scheme_Object *(*scheme_rational_normalize)(const Scheme_Object *n); 590 Scheme_Object *(*scheme_rational_numerator)(const Scheme_Object *n); 591 Scheme_Object *(*scheme_rational_denominator)(const Scheme_Object *n); 592 /*========================================================================*/ 593 /* complexes */ 594 /*========================================================================*/ 595 Scheme_Object *(*scheme_make_complex)(const Scheme_Object *r, const Scheme_Object *i); 596 Scheme_Object *(*scheme_complex_normalize)(const Scheme_Object *n); 597 Scheme_Object *(*scheme_complex_real_part)(const Scheme_Object *n); 598 Scheme_Object *(*scheme_complex_imaginary_part)(const Scheme_Object *n); 599 /* Exact/inexact: */ 600 int (*scheme_is_exact)(const Scheme_Object *n); 601 int (*scheme_is_inexact)(const Scheme_Object *n); 602 /*========================================================================*/ 603 /* macros, syntax, and compilation */ 604 /*========================================================================*/ 605 Scheme_Object *(*scheme_expand)(Scheme_Object *form, Scheme_Env *env); 606 Scheme_Object *(*scheme_compile)(Scheme_Object *form, Scheme_Env *env, int writeable); 607 /*========================================================================*/ 608 /* ports */ 609 /*========================================================================*/ 610 Scheme_Object *(*scheme_read)(Scheme_Object *port); 611 Scheme_Object *(*scheme_read_syntax)(Scheme_Object *port, Scheme_Object *stxsrc); 612 void (*scheme_write)(Scheme_Object *obj, Scheme_Object *port); 613 void (*scheme_print)(Scheme_Object *obj, Scheme_Object *port); 614 void (*scheme_display)(Scheme_Object *obj, Scheme_Object *port); 615 void (*scheme_write_w_max)(Scheme_Object *obj, Scheme_Object *port, intptr_t maxl); 616 void (*scheme_display_w_max)(Scheme_Object *obj, Scheme_Object *port, intptr_t maxl); 617 void (*scheme_print_w_max)(Scheme_Object *obj, Scheme_Object *port, intptr_t maxl); 618 void (*scheme_write_byte_string)(const char *str, intptr_t len, Scheme_Object *port); 619 void (*scheme_write_char_string)(const mzchar *str, intptr_t len, Scheme_Object *port); 620 intptr_t (*scheme_put_byte_string)(const char *who, Scheme_Object *port, 621 const char *str, intptr_t d, intptr_t len, 622 int rarely_block); 623 intptr_t (*scheme_put_char_string)(const char *who, Scheme_Object *port, 624 const mzchar *str, intptr_t d, intptr_t len); 625 char *(*scheme_write_to_string)(Scheme_Object *obj, intptr_t *len); 626 char *(*scheme_display_to_string)(Scheme_Object *obj, intptr_t *len); 627 char *(*scheme_print_to_string)(Scheme_Object *obj, intptr_t *len); 628 char *(*scheme_write_to_string_w_max)(Scheme_Object *obj, intptr_t *len, intptr_t maxl); 629 char *(*scheme_display_to_string_w_max)(Scheme_Object *obj, intptr_t *len, intptr_t maxl); 630 char *(*scheme_print_to_string_w_max)(Scheme_Object *obj, intptr_t *len, intptr_t maxl); 631 void (*scheme_debug_print)(Scheme_Object *obj); 632 void (*scheme_flush_output)(Scheme_Object *port); 633 char *(*scheme_format)(mzchar *format, int flen, int argc, Scheme_Object **argv, intptr_t *rlen); 634 void (*scheme_printf)(mzchar *format, int flen, int argc, Scheme_Object **argv); 635 char *(*scheme_format_utf8)(char *format, int flen, int argc, Scheme_Object **argv, intptr_t *rlen); 636 void (*scheme_printf_utf8)(char *format, int flen, int argc, Scheme_Object **argv); 637 int (*scheme_getc)(Scheme_Object *port); 638 int (*scheme_get_byte)(Scheme_Object *port); 639 int (*scheme_peekc)(Scheme_Object *port); 640 int (*scheme_peek_byte)(Scheme_Object *port); 641 int (*scheme_peekc_skip)(Scheme_Object *port, Scheme_Object *skip); 642 int (*scheme_peek_byte_skip)(Scheme_Object *port, Scheme_Object *skip, Scheme_Object *unless_evt); 643 int (*scheme_getc_special_ok)(Scheme_Object *port); 644 int (*scheme_get_byte_special_ok)(Scheme_Object *port); 645 int (*scheme_peekc_special_ok)(Scheme_Object *port); 646 int (*scheme_peek_byte_special_ok_skip)(Scheme_Object *port, Scheme_Object *skip, Scheme_Object *unless_evt); 647 int (*scheme_peekc_special_ok_skip)(Scheme_Object *port, Scheme_Object *skip); 648 void (*scheme_ungetc)(int ch, Scheme_Object *port); 649 int (*scheme_byte_ready)(Scheme_Object *port); 650 int (*scheme_char_ready)(Scheme_Object *port); 651 int (*scheme_peekc_is_ungetc)(Scheme_Object *port); 652 void (*scheme_need_wakeup)(Scheme_Object *port, void *fds); 653 intptr_t (*scheme_get_byte_string)(const char *who, 654 Scheme_Object *port, 655 char *buffer, intptr_t offset, intptr_t size, 656 int only_avail, 657 int peek, Scheme_Object *peek_skip); 658 intptr_t (*scheme_get_byte_string_unless)(const char *who, 659 Scheme_Object *port, 660 char *buffer, intptr_t offset, intptr_t size, 661 int only_avail, 662 int peek, Scheme_Object *peek_skip, 663 Scheme_Object *unless_evt); 664 intptr_t (*scheme_get_byte_string_special_ok_unless)(const char *who, 665 Scheme_Object *port, 666 char *buffer, intptr_t offset, intptr_t size, 667 int only_avail, 668 int peek, Scheme_Object *peek_skip, 669 Scheme_Object *unless_evt); 670 Scheme_Object *(*scheme_progress_evt)(Scheme_Object *port); 671 int (*scheme_peeked_read)(Scheme_Object *port, 672 intptr_t size, 673 Scheme_Object *unless_evt, 674 Scheme_Object *target_evt); 675 intptr_t (*scheme_get_char_string)(const char *who, 676 Scheme_Object *port, 677 mzchar *buffer, intptr_t offset, intptr_t size, 678 int peek, Scheme_Object *peek_skip); 679 intptr_t (*scheme_get_bytes)(Scheme_Object *port, intptr_t size, char *buffer, int offset); 680 Scheme_Object *(*scheme_get_ready_special)(Scheme_Object *port, Scheme_Object *stxsrc, int peek); 681 intptr_t (*scheme_tell)(Scheme_Object *port); 682 intptr_t (*scheme_tell_can_redirect)(Scheme_Object *port, int not_via_loc); 683 intptr_t (*scheme_output_tell)(Scheme_Object *port); 684 intptr_t (*scheme_tell_line)(Scheme_Object *port); 685 intptr_t (*scheme_tell_column)(Scheme_Object *port); 686 void (*scheme_tell_all)(Scheme_Object *port, intptr_t *line, intptr_t *col, intptr_t *pos); 687 void (*scheme_set_port_location)(int argc, Scheme_Object **argv); 688 void (*scheme_count_lines)(Scheme_Object *port); 689 void (*scheme_close_input_port)(Scheme_Object *port); 690 void (*scheme_close_output_port)(Scheme_Object *port); 691 Scheme_Object *(*scheme_write_special)(int argc, Scheme_Object *argv[]); 692 Scheme_Object *(*scheme_write_special_nonblock)(int argc, Scheme_Object *argv[]); 693 Scheme_Object *(*scheme_make_write_evt)(const char *who, Scheme_Object *port, 694 Scheme_Object *special, char *str, intptr_t start, intptr_t size); 695 Scheme_Port *(*scheme_port_record)(Scheme_Object *port); 696 Scheme_Input_Port *(*scheme_input_port_record)(Scheme_Object *port); 697 Scheme_Output_Port *(*scheme_output_port_record)(Scheme_Object *port); 698 int (*scheme_is_input_port)(Scheme_Object *port); 699 int (*scheme_is_output_port)(Scheme_Object *port); 700 Scheme_Object *(*scheme_make_port_type)(const char *name); 701 Scheme_Input_Port *(*scheme_make_input_port)(Scheme_Object *subtype, void *data, 702 Scheme_Object *name, 703 Scheme_Get_String_Fun get_byte_string_fun, 704 Scheme_Peek_String_Fun peek_string_fun, 705 Scheme_Progress_Evt_Fun progress_evt_fun, 706 Scheme_Peeked_Read_Fun peeked_read_fun, 707 Scheme_In_Ready_Fun byte_ready_fun, 708 Scheme_Close_Input_Fun close_fun, 709 Scheme_Need_Wakeup_Input_Fun need_wakeup_fun, 710 int must_close); 711 Scheme_Output_Port *(*scheme_make_output_port)(Scheme_Object *subtype, void *data, 712 Scheme_Object *name, 713 Scheme_Write_String_Evt_Fun write_byte_string_evt_fun, 714 Scheme_Write_String_Fun write_byte_string_fun, 715 Scheme_Out_Ready_Fun ready_fun, 716 Scheme_Close_Output_Fun close_fun, 717 Scheme_Need_Wakeup_Output_Fun need_wakeup_fun, 718 Scheme_Write_Special_Evt_Fun write_special_evt_fun, 719 Scheme_Write_Special_Fun write_special_fun, 720 int must_close); 721 void (*scheme_set_next_port_custodian)(Scheme_Custodian *c); 722 void (*scheme_set_port_location_fun)(Scheme_Port *port, 723 Scheme_Location_Fun location_fun); 724 void (*scheme_set_port_count_lines_fun)(Scheme_Port *port, 725 Scheme_Count_Lines_Fun count_lines_fun); 726 void (*scheme_port_count_lines)(Scheme_Port *ip, const char *buffer, 727 intptr_t offset, intptr_t got); 728 Scheme_Object *(*scheme_progress_evt_via_get)(Scheme_Input_Port *port); 729 int (*scheme_peeked_read_via_get)(Scheme_Input_Port *port, 730 intptr_t size, 731 Scheme_Object *unless_evt, 732 Scheme_Object *target_ch); 733 Scheme_Object *(*scheme_write_evt_via_write)(Scheme_Output_Port *port, 734 const char *str, intptr_t offset, intptr_t size); 735 Scheme_Object *(*scheme_write_special_evt_via_write_special)(Scheme_Output_Port *port, 736 Scheme_Object *special); 737 Scheme_Object *(*scheme_open_input_file)(const char *name, const char *who); 738 Scheme_Object *(*scheme_open_output_file)(const char *name, const char *who); 739 Scheme_Object *(*scheme_open_input_output_file)(const char *name, const char *who, Scheme_Object **oport); 740 Scheme_Object *(*scheme_open_output_file_with_mode)(const char *name, const char *who, int text); 741 Scheme_Object *(*scheme_make_file_input_port)(FILE *fp); 742 Scheme_Object *(*scheme_make_named_file_input_port)(FILE *fp, Scheme_Object *name); 743 Scheme_Object *(*scheme_make_file_output_port)(FILE *fp); 744 Scheme_Object *(*scheme_make_fd_input_port)(int fd, Scheme_Object *name, int regfile, int win_textmode); 745 Scheme_Object *(*scheme_make_fd_output_port)(int fd, Scheme_Object *name, int regfile, int win_textmode, int read_too); 746 Scheme_Object *(*scheme_make_byte_string_input_port)(const char *str); 747 Scheme_Object *(*scheme_make_sized_byte_string_input_port)(const char *str, intptr_t len); 748 Scheme_Object *(*scheme_make_byte_string_output_port)(); 749 char *(*scheme_get_sized_byte_string_output)(Scheme_Object *port, intptr_t *len); 750 char *(*scheme_get_reset_sized_byte_string_output)(Scheme_Object *port, intptr_t *len, int reset, intptr_t startpos, intptr_t endpos); 751 void (*scheme_pipe)(Scheme_Object **read, Scheme_Object **write); 752 void (*scheme_pipe_with_limit)(Scheme_Object **write, Scheme_Object **read, int maxsize); 753 Scheme_Object *(*scheme_make_null_output_port)(int can_write_special); 754 Scheme_Object *(*scheme_make_redirect_output_port)(Scheme_Object *port); 755 intptr_t (*scheme_set_file_position)(Scheme_Object *port, intptr_t pos); 756 int (*scheme_file_exists)(char *filename); 757 int (*scheme_directory_exists)(char *dirname); 758 char *(*scheme_expand_filename)(char* filename, int ilen, const char *errorin, int *ex, int guards); 759 char *(*scheme_expand_user_filename)(char* filename, int ilen, const char *errorin, int *ex, int guards); 760 char *(*scheme_expand_string_filename)(Scheme_Object *f, const char *errorin, int *ex, int guards); 761 char *(*scheme_os_getcwd)(char *buf, size_t buflen, int *actlen, int noexn); 762 int (*scheme_os_setcwd)(char *buf, int noexn); 763 char *(*scheme_getdrive)(void); 764 Scheme_Object *(*scheme_split_path)(const char *path, int len, Scheme_Object **base, int *isdir, int kind); 765 Scheme_Object *(*scheme_build_path)(int argc, Scheme_Object **argv); 766 Scheme_Object *(*scheme_path_to_directory_path)(Scheme_Object *p); 767 Scheme_Object *(*scheme_path_to_complete_path)(Scheme_Object *path, Scheme_Object *relto_path); 768 Scheme_Object *(*scheme_simplify_path)(int argc, Scheme_Object *argv[]); 769 Scheme_Object *(*scheme_make_path)(const char *chars); 770 Scheme_Object *(*scheme_make_sized_path)(char *chars, intptr_t len, int copy); 771 Scheme_Object *(*scheme_make_sized_offset_path)(char *chars, intptr_t d, intptr_t len, int copy); 772 Scheme_Object *(*scheme_make_sized_offset_kind_path)(char *chars, intptr_t d, intptr_t len, int copy, int kind); 773 Scheme_Object *(*scheme_make_path_without_copying)(char *chars); 774 void *(*scheme_alloc_fdset_array)(int count, int permanent); 775 void *(*scheme_init_fdset_array)(void *fdarray, int count); 776 void *(*scheme_get_fdset)(void *fdarray, int pos); 777 void (*scheme_fdzero)(void *fd); 778 void (*scheme_fdset)(void *fd, int pos); 779 void (*scheme_fdclr)(void *fd, int pos); 780 int (*scheme_fdisset)(void *fd, int pos); 781 void (*scheme_add_fd_handle)(void *h, void *fds, int repost); 782 void (*scheme_add_fd_eventmask)(void *fds, int mask); 783 void (*scheme_collapse_win_fd)(void *fds); 784 void (*scheme_set_wakeup_time)(void *fds, double end_time); 785 void (*scheme_security_check_file)(const char *who, const char *filename, int guards); 786 void (*scheme_security_check_file_link)(const char *who, const char *filename, const char *content); 787 void (*scheme_security_check_network)(const char *who, const char *host, int port, int client); 788 struct mz_addrinfo *(*scheme_get_host_address)(const char *address, int id, int *err, 789 int family, int passive, int tcp); 790 void (*scheme_free_host_address)(struct mz_addrinfo *a); 791 const char *(*scheme_host_address_strerror)(int errnum); 792 void (*scheme_getnameinfo)(void *sa, int salen, 793 char *host, int hostlen, 794 char *serv, int servlen); 795 int (*scheme_get_port_file_descriptor)(Scheme_Object *p, intptr_t *_fd); 796 intptr_t (*scheme_get_port_fd)(Scheme_Object *p); 797 int (*scheme_get_port_socket)(Scheme_Object *p, intptr_t *_s); 798 void (*scheme_socket_to_ports)(intptr_t s, const char *name, int takeover, 799 Scheme_Object **_inp, Scheme_Object **_outp); 800 Scheme_Object *(*scheme_fd_to_semaphore)(intptr_t fd, int mode, int is_socket); 801 void (*scheme_set_type_printer)(Scheme_Type stype, Scheme_Type_Printer printer); 802 void (*scheme_print_bytes)(Scheme_Print_Params *pp, const char *str, int offset, int len); 803 void (*scheme_print_utf8)(Scheme_Print_Params *pp, const char *str, int offset, int len); 804 void (*scheme_print_string)(Scheme_Print_Params *pp, const mzchar *str, int offset, int len); 805 Scheme_Object *(*scheme_read_byte_string)(Scheme_Object *port); 806 /*========================================================================*/ 807 /* namespace/environment */ 808 /*========================================================================*/ 809 Scheme_Object *(*scheme_make_namespace)(int argc, Scheme_Object *argv[]); 810 void (*scheme_add_global)(const char *name, Scheme_Object *val, Scheme_Env *env); 811 void (*scheme_add_global_symbol)(Scheme_Object *name, Scheme_Object *val, 812 Scheme_Env *env); 813 Scheme_Object *(*scheme_make_envunbox)(Scheme_Object *value); 814 Scheme_Object *(*scheme_lookup_global)(Scheme_Object *symbol, Scheme_Env *env); 815 Scheme_Bucket *(*scheme_global_bucket)(Scheme_Object *symbol, Scheme_Env *env); 816 Scheme_Bucket *(*scheme_module_bucket)(Scheme_Object *mod, Scheme_Object *var, int pos, Scheme_Env *env); 817 Scheme_Object *(*scheme_builtin_value)(const char *name); /* convenience */ 818 void (*scheme_set_global_bucket)(char *proc, Scheme_Bucket *var, Scheme_Object *val, 819 int set_undef); 820 Scheme_Env *(*scheme_primitive_module)(Scheme_Object *name, Scheme_Env *for_env); 821 void (*scheme_finish_primitive_module)(Scheme_Env *env); 822 void (*scheme_set_primitive_module_phaseless)(Scheme_Env *env, int phaseless); 823 void (*scheme_protect_primitive_provide)(Scheme_Env *env, Scheme_Object *name); 824 Scheme_Object *(*scheme_make_modidx)(Scheme_Object *path, 825 Scheme_Object *base, 826 Scheme_Object *resolved); 827 Scheme_Object *(*scheme_dynamic_require)(int argc, Scheme_Object *argv[]); 828 Scheme_Object *(*scheme_dynamic_require_reader)(int argc, Scheme_Object *argv[]); 829 Scheme_Object *(*scheme_namespace_require)(Scheme_Object *); 830 int (*scheme_is_module_path)(Scheme_Object *); 831 int (*scheme_is_module_path_index)(Scheme_Object *); 832 int (*scheme_is_resolved_module_path)(Scheme_Object *); 833 Scheme_Object *(*scheme_datum_to_kernel_stx)(Scheme_Object *e); 834 int (*scheme_module_is_declared)(Scheme_Object *name, int try_load); 835 /*========================================================================*/ 836 /* symbols */ 837 /*========================================================================*/ 838 Scheme_Object *(*scheme_intern_symbol)(const char *name); 839 Scheme_Object *(*scheme_intern_exact_symbol)(const char *name, uintptr_t len); 840 Scheme_Object *(*scheme_intern_exact_char_symbol)(const mzchar *name, uintptr_t len); 841 Scheme_Object *(*scheme_make_symbol)(const char *name); /* Make uninterned */ 842 Scheme_Object *(*scheme_make_exact_symbol)(const char *name, uintptr_t len); /* Exact case */ 843 Scheme_Object *(*scheme_make_exact_char_symbol)(const mzchar *name, uintptr_t len); /* Exact case */ 844 const char *(*scheme_symbol_name)(Scheme_Object *sym); 845 const char *(*scheme_symbol_name_and_size)(Scheme_Object *sym, uintptr_t *l, int flags); 846 char *(*scheme_symbol_val)(Scheme_Object *sym); 847 Scheme_Object *(*scheme_intern_exact_keyword)(const char *name, uintptr_t len); 848 Scheme_Object *(*scheme_intern_exact_char_keyword)(const mzchar *name, uintptr_t len); 849 /*========================================================================*/ 850 /* structs */ 851 /*========================================================================*/ 852 Scheme_Object **(*scheme_make_struct_values)(Scheme_Object *struct_type, 853 Scheme_Object **names, 854 int count, int flags); 855 Scheme_Object **(*scheme_make_struct_names)(Scheme_Object *base, 856 Scheme_Object *field_names, 857 int flags, int *count_out); 858 Scheme_Object *(*scheme_make_struct_type)(Scheme_Object *base, 859 Scheme_Object *parent, 860 Scheme_Object *inspector, 861 int num_fields, int num_uninit_fields, 862 Scheme_Object *uninit_val, 863 Scheme_Object *properties, 864 Scheme_Object *guard); 865 Scheme_Object *(*scheme_make_struct_type2)(Scheme_Object *base, 866 Scheme_Object *parent, 867 Scheme_Object *inspector, 868 int num_fields, int num_uninit_fields, 869 Scheme_Object *uninit_val, 870 Scheme_Object *proc_attr, 871 Scheme_Object *properties, 872 char *immutable_array, 873 Scheme_Object *guard); 874 Scheme_Object *(*scheme_make_struct_instance)(Scheme_Object *stype, 875 int argc, 876 Scheme_Object **argv); 877 int (*scheme_is_struct_instance)(Scheme_Object *type, Scheme_Object *v); 878 Scheme_Object *(*scheme_struct_ref)(Scheme_Object *s, int pos); 879 void (*scheme_struct_set)(Scheme_Object *s, int pos, Scheme_Object *v); 880 Scheme_Object *(*scheme_make_struct_type_property)(Scheme_Object *name); 881 Scheme_Object *(*scheme_make_struct_type_property_w_guard)(Scheme_Object *name, Scheme_Object *guard); 882 Scheme_Object *(*scheme_struct_type_property_ref)(Scheme_Object *prop, Scheme_Object *s); 883 Scheme_Object *(*scheme_chaperone_struct_type_property_ref)(Scheme_Object *prop, Scheme_Object *s); 884 Scheme_Object *(*scheme_make_location)(Scheme_Object *src, 885 Scheme_Object *line, 886 Scheme_Object *col, 887 Scheme_Object *pos, 888 Scheme_Object *span); 889 int (*scheme_is_location)(Scheme_Object *o); 890 Scheme_Object *(*scheme_make_inspector)(Scheme_Object *superior); 891 int (*scheme_is_subinspector)(Scheme_Object *i, Scheme_Object *sup); 892 /*========================================================================*/ 893 /* utilities */ 894 /*========================================================================*/ 895 int (*scheme_eq)(Scheme_Object *obj1, Scheme_Object *obj2); 896 int (*scheme_eqv)(Scheme_Object *obj1, Scheme_Object *obj2); 897 int (*scheme_equal)(Scheme_Object *obj1, Scheme_Object *obj2); 898 int (*scheme_chaperone_of)(Scheme_Object *obj1, Scheme_Object *obj2); 899 int (*scheme_impersonator_of)(Scheme_Object *obj1, Scheme_Object *obj2); 900 #ifdef MZ_PRECISE_GC 901 intptr_t (*scheme_hash_key)(Scheme_Object *o); 902 #endif 903 intptr_t (*scheme_equal_hash_key)(Scheme_Object *o); 904 intptr_t (*scheme_equal_hash_key2)(Scheme_Object *o); 905 intptr_t (*scheme_recur_equal_hash_key)(Scheme_Object *o, void *cycle_data); 906 intptr_t (*scheme_recur_equal_hash_key2)(Scheme_Object *o, void *cycle_data); 907 intptr_t (*scheme_eqv_hash_key)(Scheme_Object *o); 908 intptr_t (*scheme_eqv_hash_key2)(Scheme_Object *o); 909 void (*scheme_set_type_equality)(Scheme_Type type, 910 Scheme_Equal_Proc f, 911 Scheme_Primary_Hash_Proc hash1, 912 Scheme_Secondary_Hash_Proc hash2); 913 int (*scheme_recur_equal)(Scheme_Object *obj1, Scheme_Object *obj2, void *cycle_info); 914 Scheme_Object *(*scheme_build_list)(int argc, Scheme_Object **argv); 915 Scheme_Object *(*scheme_build_list_offset)(int argc, Scheme_Object **argv, int delta); 916 int (*scheme_is_list)(Scheme_Object *obj1); 917 int (*scheme_list_length)(Scheme_Object *list); 918 int (*scheme_proper_list_length)(Scheme_Object *list); 919 Scheme_Object *(*scheme_alloc_list)(int size); 920 Scheme_Object *(*scheme_map_1)(Scheme_Object *(*f)(Scheme_Object*), Scheme_Object *l); 921 Scheme_Object *(*scheme_car)(Scheme_Object *pair); 922 Scheme_Object *(*scheme_cdr)(Scheme_Object *pair); 923 Scheme_Object *(*scheme_cadr)(Scheme_Object *pair); 924 Scheme_Object *(*scheme_caddr)(Scheme_Object *pair); 925 Scheme_Object *(*scheme_vector_to_list)(Scheme_Object *vec); 926 Scheme_Object *(*scheme_list_to_vector)(Scheme_Object *list); 927 Scheme_Object *(*scheme_append)(Scheme_Object *lstx, Scheme_Object *lsty); 928 Scheme_Object *(*scheme_reverse)(Scheme_Object *l); 929 Scheme_Object *(*scheme_box)(Scheme_Object *v); 930 Scheme_Object *(*scheme_unbox)(Scheme_Object *obj); 931 void (*scheme_set_box)(Scheme_Object *b, Scheme_Object *v); 932 Scheme_Object *(*scheme_make_weak_box)(Scheme_Object *v); 933 Scheme_Object *(*scheme_make_late_weak_box)(Scheme_Object *v); 934 Scheme_Object *(*scheme_make_ephemeron)(Scheme_Object *key, Scheme_Object *val); 935 Scheme_Object *(*scheme_ephemeron_value)(Scheme_Object *o); 936 Scheme_Object *(*scheme_ephemeron_key)(Scheme_Object *o); 937 Scheme_Object *(*scheme_make_late_will_executor)(); 938 Scheme_Object *(*scheme_load)(const char *file); 939 Scheme_Object *(*scheme_load_extension)(const char *filename, Scheme_Env *env); 940 void (*scheme_register_extension_global)(void *ptr, intptr_t size); 941 intptr_t (*scheme_get_seconds)(void); 942 uintptr_t (*scheme_get_milliseconds)(void); 943 double (*scheme_get_inexact_milliseconds)(void); 944 intptr_t (*scheme_get_process_milliseconds)(void); 945 intptr_t (*scheme_get_process_children_milliseconds)(void); 946 intptr_t (*scheme_get_thread_milliseconds)(Scheme_Object *thrd); 947 char *(*scheme_banner)(void); 948 char *(*scheme_version)(void); 949 int (*scheme_check_proc_arity)(const char *where, int a, 950 int which, int argc, Scheme_Object **argv); 951 int (*scheme_check_proc_arity2)(const char *where, int a, 952 int which, int argc, Scheme_Object **argv, 953 int false_ok); 954 char *(*scheme_make_provided_string)(Scheme_Object *o, int count, intptr_t *len); 955 char *(*scheme_make_args_string)(const char *s, int which, int argc, Scheme_Object **argv, intptr_t *len); 956 char *(*scheme_make_arg_lines_string)(const char *s, int which, int argc, Scheme_Object **argv, intptr_t *len); 957 const char *(*scheme_system_library_subpath)(); 958 void (*scheme_signal_received)(void); 959 void (*scheme_signal_received_at)(void *); 960 void *(*scheme_get_signal_handle)(); 961 void (*scheme_wait_until_signal_received)(void); 962 intptr_t (*scheme_char_strlen)(const mzchar *s); 963 Scheme_Object *(*scheme_stx_extract_marks)(Scheme_Object *stx); 964 int (*scheme_get_place_id)(void); 965 Scheme_Hash_Table *(*scheme_get_place_table)(void); 966 void *(*scheme_register_process_global)(const char *key, void *val); 967 Scheme_Object *(*scheme_malloc_key)(void); 968 void (*scheme_free_key)(Scheme_Object *k); 969 void *(*scheme_jit_find_code_end)(void *p); 970 void (*scheme_jit_now)(Scheme_Object *f); 971 void (*scheme_set_signal_handler)(int sig_id, Scheme_Signal_Handler_Proc proc); 972 #ifndef SCHEME_EX_INLINE 973 } Scheme_Extension_Table; 974 #endif 975