diff --git a/src/racket/include/scheme.h b/src/racket/include/scheme.h index 4b1d58dde5..3eb8d9aeb2 100644 --- a/src/racket/include/scheme.h +++ b/src/racket/include/scheme.h @@ -180,6 +180,9 @@ extern "C" { #endif +/* Allowed by all configurations, currently: */ +#define MZ_CAN_ACCESS_THREAD_LOCAL_DIRECTLY + /*========================================================================*/ /* basic Scheme values */ /*========================================================================*/ @@ -1434,20 +1437,24 @@ typedef void (*Scheme_Invoke_Proc)(Scheme_Env *env, long phase_shift, #define SCHEME_ASSERT(expr,msg) ((expr) ? 1 : (scheme_signal_error(msg), 0)) -#ifndef MZ_USE_PLACES -#define scheme_eval_wait_expr (scheme_current_thread->ku.eval.wait_expr) -#define scheme_tail_rator (scheme_current_thread->ku.apply.tail_rator) -#define scheme_tail_num_rands (scheme_current_thread->ku.apply.tail_num_rands) -#define scheme_tail_rands (scheme_current_thread->ku.apply.tail_rands) -#define scheme_overflow_reply (scheme_current_thread->overflow_reply) - -#define scheme_error_buf *(scheme_current_thread->error_buf) -#define scheme_jumping_to_continuation (scheme_current_thread->cjs.jumping_to_continuation) - -#define scheme_multiple_count (scheme_current_thread->ku.multiple.count) -#define scheme_multiple_array (scheme_current_thread->ku.multiple.array) +#ifdef MZ_CAN_ACCESS_THREAD_LOCAL_DIRECTLY +# define mzSCHEME_CURRENT_THREAD scheme_current_thread +#else +# define mzSCHEME_CURRENT_THREAD scheme_get_current_thread() #endif +#define scheme_eval_wait_expr (mzSCHEME_CURRENT_THREAD->ku.eval.wait_expr) +#define scheme_tail_rator (mzSCHEME_CURRENT_THREAD->ku.apply.tail_rator) +#define scheme_tail_num_rands (mzSCHEME_CURRENT_THREAD->ku.apply.tail_num_rands) +#define scheme_tail_rands (mzSCHEME_CURRENT_THREAD->ku.apply.tail_rands) +#define scheme_overflow_reply (mzSCHEME_CURRENT_THREAD->overflow_reply) + +#define scheme_error_buf *(mzSCHEME_CURRENT_THREAD->error_buf) +#define scheme_jumping_to_continuation (mzSCHEME_CURRENT_THREAD->cjs.jumping_to_continuation) + +#define scheme_multiple_count (mzSCHEME_CURRENT_THREAD->ku.multiple.count) +#define scheme_multiple_array (mzSCHEME_CURRENT_THREAD->ku.multiple.array) + #define scheme_setjmpup(b, base, s) scheme_setjmpup_relative(b, base, s, NULL) #define scheme_do_eval_w_thread(r,n,e,f,p) scheme_do_eval(r,n,e,f) @@ -1716,14 +1723,14 @@ MZ_EXTERN void scheme_set_logging(int syslog_level, int stderr_level); MZ_EXTERN int scheme_get_allow_set_undefined(); -#ifndef MZ_USE_PLACES +#ifdef MZ_CAN_ACCESS_THREAD_LOCAL_DIRECTLY THREAD_LOCAL_DECL(MZ_EXTERN Scheme_Thread *scheme_current_thread); THREAD_LOCAL_DECL(MZ_EXTERN Scheme_Thread *scheme_first_thread); #endif -MZ_EXTERN Scheme_Thread *scheme_get_current_thread(); -MZ_EXTERN long scheme_get_multiple_count(); -MZ_EXTERN Scheme_Object **scheme_get_multiple_array(); -MZ_EXTERN void scheme_set_current_thread_ran_some(); +XFORM_NONGCING MZ_EXTERN Scheme_Thread *scheme_get_current_thread(); +XFORM_NONGCING MZ_EXTERN long scheme_get_multiple_count(); +XFORM_NONGCING MZ_EXTERN Scheme_Object **scheme_get_multiple_array(); +XFORM_NONGCING MZ_EXTERN void scheme_set_current_thread_ran_some(); /* Set these global hooks (optionally): */ diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index c8f7e5d7e1..dc90e5338c 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -421,17 +421,6 @@ THREAD_LOCAL_DECL(extern Scheme_Thread *scheme_main_thread); #endif #ifdef MZ_USE_PLACES -THREAD_LOCAL_DECL(extern Scheme_Thread *scheme_current_thread); -THREAD_LOCAL_DECL(extern Scheme_Thread *scheme_first_thread); -#define scheme_eval_wait_expr (scheme_current_thread->ku.eval.wait_expr) -#define scheme_tail_rator (scheme_current_thread->ku.apply.tail_rator) -#define scheme_tail_num_rands (scheme_current_thread->ku.apply.tail_num_rands) -#define scheme_tail_rands (scheme_current_thread->ku.apply.tail_rands) -#define scheme_overflow_reply (scheme_current_thread->overflow_reply) -#define scheme_error_buf *(scheme_current_thread->error_buf) -#define scheme_jumping_to_continuation (scheme_current_thread->cjs.jumping_to_continuation) -#define scheme_multiple_count (scheme_current_thread->ku.multiple.count) -#define scheme_multiple_array (scheme_current_thread->ku.multiple.array) extern mz_proc_thread *scheme_master_proc_thread; THREAD_LOCAL_DECL(extern mz_proc_thread *proc_thread_self); #endif diff --git a/src/racket/src/thread.c b/src/racket/src/thread.c index 771589fe5c..478bc43531 100644 --- a/src/racket/src/thread.c +++ b/src/racket/src/thread.c @@ -144,10 +144,10 @@ THREAD_LOCAL_DECL(Scheme_Thread *scheme_current_thread = NULL); THREAD_LOCAL_DECL(Scheme_Thread *scheme_main_thread = NULL); THREAD_LOCAL_DECL(Scheme_Thread *scheme_first_thread = NULL); -Scheme_Thread *scheme_get_current_thread() { return scheme_current_thread; } -long scheme_get_multiple_count() { return scheme_current_thread->ku.multiple.count; } -Scheme_Object **scheme_get_multiple_array() { return scheme_current_thread->ku.multiple.array; } -void scheme_set_current_thread_ran_some() { scheme_current_thread->ran_some = 1; } +XFORM_NONGCING Scheme_Thread *scheme_get_current_thread() { return scheme_current_thread; } +XFORM_NONGCING long scheme_get_multiple_count() { return scheme_current_thread->ku.multiple.count; } +XFORM_NONGCING Scheme_Object **scheme_get_multiple_array() { return scheme_current_thread->ku.multiple.array; } +XFORM_NONGCING void scheme_set_current_thread_ran_some() { scheme_current_thread->ran_some = 1; } THREAD_LOCAL_DECL(Scheme_Thread_Set *scheme_thread_set_top);