diff --git a/collects/compiler/private/xform.rkt b/collects/compiler/private/xform.rkt index b7ed627bb0..51e0649afe 100644 --- a/collects/compiler/private/xform.rkt +++ b/collects/compiler/private/xform.rkt @@ -609,6 +609,9 @@ [(and (tok? e) (eq? (tok-n e) 'XFORM_GC_VARIABLE_STACK_THROUGH_FUNCTION)) 'function] + [(and (tok? e) + (eq? (tok-n e) 'XFORM_GC_VARIABLE_STACK_THROUGH_DIRECT_FUNCTION)) + 'direct-function] [(braces? e) (loop (seq->list (seq-in e)))] [else #f])) e-raw))) @@ -631,7 +634,8 @@ "#define GC_VARIABLE_STACK ((&scheme_thread_locals)->GC_variable_stack_)\n"] [else "#define GC_VARIABLE_STACK GC_variable_stack\n"])) - (if gc-variable-stack-through-funcs? + (if (or gc-variable-stack-through-funcs? + (eq? gc-var-stack-mode 'direct-function)) (begin (printf "#define GET_GC_VARIABLE_STACK() GC_get_variable_stack()\n") (printf "#define SET_GC_VARIABLE_STACK(v) GC_set_variable_stack(v)\n")) @@ -1643,6 +1647,7 @@ (and (pair? e) (or (eq? 'XFORM_GC_VARIABLE_STACK_THROUGH_GETSPECIFIC (tok-n (car e))) (eq? 'XFORM_GC_VARIABLE_STACK_THROUGH_FUNCTION (tok-n (car e))) + (eq? 'XFORM_GC_VARIABLE_STACK_THROUGH_DIRECT_FUNCTION (tok-n (car e))) (eq? 'XFORM_GC_VARIABLE_STACK_THROUGH_THREAD_LOCAL (tok-n (car e)))))) (define (access-modifier? e) diff --git a/src/racket/main.c b/src/racket/main.c index 1bb7dacb8a..498866115b 100644 --- a/src/racket/main.c +++ b/src/racket/main.c @@ -51,6 +51,10 @@ # define DONT_LOAD_INIT_FILE #endif +#if defined(MZ_XFORM) && defined(__MINGW32__) && !defined(USE_THREAD_LOCAL) +XFORM_GC_VARIABLE_STACK_THROUGH_DIRECT_FUNCTION; +#endif + #ifdef MZ_XFORM START_XFORM_SUSPEND; #endif diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index 42e3a0763d..e961cc47d0 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -540,7 +540,7 @@ THREAD_LOCAL_DECL(extern volatile int scheme_fuel_counter); THREAD_LOCAL_DECL(extern Scheme_Thread *scheme_main_thread); -#if defined(MZ_USE_PLACES) || defined(MZ_USE_FUTURES) || defined(USE_PTHREAD_THREAD_TIMER) +#if defined(MZ_USE_PLACES) || defined(MZ_USE_FUTURES) || defined(USE_PTHREAD_THREAD_TIMER) || defined(WINDOWS_FILE_HANDLES) # define MZ_USE_MZRT #endif