add scheme_get_place_table()

This commit is contained in:
Matthew Flatt 2010-09-14 09:35:44 -06:00
parent cb09dfbdd3
commit a5c7d4f5f8
11 changed files with 39 additions and 0 deletions

View File

@ -339,3 +339,21 @@ Returns the string that is used as the Racket startup banner.}
@function[(char* scheme_version)]{ @function[(char* scheme_version)]{
Returns a string for the executing version of Racket.} Returns a string for the executing version of Racket.}
@function[(Scheme_Object* scheme_get_place_table)]{
Returns an @racket[eq?]-based hash table that is global to the current
place.}
@function[(void* scheme_register_process_global
[const-char* key]
[void* val])]{
Gets or sets a value in a process-global table (i.e., shared across
multiple places, if any). If @var{val} is NULL, the current mapping
for @var{key} is given, otherwise @var{val} is installed as the value
for @var{key} and @cpp{NULL} is returned. The given @var{val} must not
refer to garbage-collected memory.
This function is intended for infrequent use with a small number of
keys.}

View File

@ -583,4 +583,5 @@ EXPORTS
scheme_get_signal_handle scheme_get_signal_handle
scheme_char_strlen scheme_char_strlen
scheme_stx_extract_marks scheme_stx_extract_marks
scheme_get_place_table
scheme_register_process_global scheme_register_process_global

View File

@ -599,4 +599,5 @@ EXPORTS
scheme_get_signal_handle scheme_get_signal_handle
scheme_char_strlen scheme_char_strlen
scheme_stx_extract_marks scheme_stx_extract_marks
scheme_get_place_table
scheme_register_process_global scheme_register_process_global

View File

@ -600,4 +600,5 @@ scheme_signal_received_at
scheme_get_signal_handle scheme_get_signal_handle
scheme_char_strlen scheme_char_strlen
scheme_stx_extract_marks scheme_stx_extract_marks
scheme_get_place_table
scheme_register_process_global scheme_register_process_global

View File

@ -607,4 +607,5 @@ scheme_signal_received_at
scheme_get_signal_handle scheme_get_signal_handle
scheme_char_strlen scheme_char_strlen
scheme_stx_extract_marks scheme_stx_extract_marks
scheme_get_place_table
scheme_register_process_global scheme_register_process_global

View File

@ -294,6 +294,7 @@ typedef struct Thread_Local_Variables {
struct Scheme_Hash_Table *place_local_parallel_symbol_table_; struct Scheme_Hash_Table *place_local_parallel_symbol_table_;
struct FFI_Sync_Queue *ffi_sync_queue_; struct FFI_Sync_Queue *ffi_sync_queue_;
struct Scheme_GC_Pre_Post_Callback_Desc *gc_prepost_callback_descs_; struct Scheme_GC_Pre_Post_Callback_Desc *gc_prepost_callback_descs_;
struct Scheme_Hash_Table *place_local_misc_table_;
} Thread_Local_Variables; } Thread_Local_Variables;
#if defined(IMPLEMENT_THREAD_LOCAL_VIA_PTHREADS) #if defined(IMPLEMENT_THREAD_LOCAL_VIA_PTHREADS)
@ -589,6 +590,7 @@ XFORM_GC_VARIABLE_STACK_THROUGH_THREAD_LOCAL;
#define place_local_parallel_symbol_table XOA (scheme_get_thread_local_variables()->place_local_parallel_symbol_table_) #define place_local_parallel_symbol_table XOA (scheme_get_thread_local_variables()->place_local_parallel_symbol_table_)
#define ffi_sync_queue XOA (scheme_get_thread_local_variables()->ffi_sync_queue_) #define ffi_sync_queue XOA (scheme_get_thread_local_variables()->ffi_sync_queue_)
#define gc_prepost_callback_descs XOA (scheme_get_thread_local_variables()->gc_prepost_callback_descs_) #define gc_prepost_callback_descs XOA (scheme_get_thread_local_variables()->gc_prepost_callback_descs_)
#define place_local_misc_table XOA (scheme_get_thread_local_variables()->place_local_misc_table_)
/* **************************************** */ /* **************************************** */

View File

@ -1128,4 +1128,5 @@ MZ_EXTERN int scheme_char_strlen(const mzchar *s);
MZ_EXTERN Scheme_Object *scheme_stx_extract_marks(Scheme_Object *stx); MZ_EXTERN Scheme_Object *scheme_stx_extract_marks(Scheme_Object *stx);
MZ_EXTERN Scheme_Object *scheme_get_place_table(void);
MZ_EXTERN void *scheme_register_process_global(const char *key, void *val); MZ_EXTERN void *scheme_register_process_global(const char *key, void *val);

View File

@ -929,6 +929,7 @@ void (*scheme_signal_received_at)(void *);
void *(*scheme_get_signal_handle)(); void *(*scheme_get_signal_handle)();
int (*scheme_char_strlen)(const mzchar *s); int (*scheme_char_strlen)(const mzchar *s);
Scheme_Object *(*scheme_stx_extract_marks)(Scheme_Object *stx); Scheme_Object *(*scheme_stx_extract_marks)(Scheme_Object *stx);
Scheme_Object *(*scheme_get_place_table)(void);
void *(*scheme_register_process_global)(const char *key, void *val); void *(*scheme_register_process_global)(const char *key, void *val);
#ifndef SCHEME_EX_INLINE #ifndef SCHEME_EX_INLINE
} Scheme_Extension_Table; } Scheme_Extension_Table;

View File

@ -655,4 +655,5 @@
scheme_extension_table->scheme_get_signal_handle = scheme_get_signal_handle; scheme_extension_table->scheme_get_signal_handle = scheme_get_signal_handle;
scheme_extension_table->scheme_char_strlen = scheme_char_strlen; scheme_extension_table->scheme_char_strlen = scheme_char_strlen;
scheme_extension_table->scheme_stx_extract_marks = scheme_stx_extract_marks; scheme_extension_table->scheme_stx_extract_marks = scheme_stx_extract_marks;
scheme_extension_table->scheme_get_place_table = scheme_get_place_table;
scheme_extension_table->scheme_register_process_global = scheme_register_process_global; scheme_extension_table->scheme_register_process_global = scheme_register_process_global;

View File

@ -655,6 +655,7 @@
#define scheme_get_signal_handle (scheme_extension_table->scheme_get_signal_handle) #define scheme_get_signal_handle (scheme_extension_table->scheme_get_signal_handle)
#define scheme_char_strlen (scheme_extension_table->scheme_char_strlen) #define scheme_char_strlen (scheme_extension_table->scheme_char_strlen)
#define scheme_stx_extract_marks (scheme_extension_table->scheme_stx_extract_marks) #define scheme_stx_extract_marks (scheme_extension_table->scheme_stx_extract_marks)
#define scheme_get_place_table (scheme_extension_table->scheme_get_place_table)
#define scheme_register_process_global (scheme_extension_table->scheme_register_process_global) #define scheme_register_process_global (scheme_extension_table->scheme_register_process_global)
#ifdef MZ_PRECISE_GC #ifdef MZ_PRECISE_GC
#pragma GC_VARIABLE_STACK_THOUGH_TABLE #pragma GC_VARIABLE_STACK_THOUGH_TABLE

View File

@ -239,6 +239,9 @@ THREAD_LOCAL_DECL(static Scheme_Object *recycle_cell);
THREAD_LOCAL_DECL(static Scheme_Object *maybe_recycle_cell); THREAD_LOCAL_DECL(static Scheme_Object *maybe_recycle_cell);
THREAD_LOCAL_DECL(static int recycle_cc_count); THREAD_LOCAL_DECL(static int recycle_cc_count);
THREAD_LOCAL_DECL(struct Scheme_Hash_Table *place_local_misc_table);
#ifdef MZ_PRECISE_GC #ifdef MZ_PRECISE_GC
extern long GC_get_memory_use(void *c); extern long GC_get_memory_use(void *c);
#else #else
@ -827,6 +830,7 @@ void scheme_init_thread_places(void) {
REGISTER_SO(recycle_cell); REGISTER_SO(recycle_cell);
REGISTER_SO(maybe_recycle_cell); REGISTER_SO(maybe_recycle_cell);
REGISTER_SO(gc_prepost_callback_descs); REGISTER_SO(gc_prepost_callback_descs);
REGISTER_SO(place_local_misc_table);
} }
void scheme_init_memtrace(Scheme_Env *env) void scheme_init_memtrace(Scheme_Env *env)
@ -2584,6 +2588,13 @@ void scheme_init_process_globals(void)
#endif #endif
} }
Scheme_Object *scheme_get_place_table(void)
{
if (!place_local_misc_table)
place_local_misc_table = scheme_make_hash_table(SCHEME_hash_ptr);
return (Scheme_Object *)place_local_misc_table;
}
/*========================================================================*/ /*========================================================================*/
/* thread creation and swapping */ /* thread creation and swapping */
/*========================================================================*/ /*========================================================================*/