diff --git a/collects/tests/racket/module.rktl b/collects/tests/racket/module.rktl index f5804a48e5..e4165a3178 100644 --- a/collects/tests/racket/module.rktl +++ b/collects/tests/racket/module.rktl @@ -965,6 +965,19 @@ (lambda (exn) (and (exn? exn) (regexp-match? #rx"module that is not available" (exn-message exn))))) + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check that a `syntax-local-ift-require' into a top-level context +;; appropriately forces a visit of compile-time code: + +(parameterize ([current-namespace (make-base-namespace)]) + (eval '(module m racket/base + (provide x) + (define-syntax-rule (x) 5))) + (eval '(require (for-syntax racket/base))) + (eval '(define-syntax (m stx) + (syntax-local-lift-require ''m (datum->syntax stx '(x))))) + (eval '(m))) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/src/racket/src/compenv.c b/src/racket/src/compenv.c index e3146a9349..7a4a76bb1b 100644 --- a/src/racket/src/compenv.c +++ b/src/racket/src/compenv.c @@ -2367,6 +2367,10 @@ Scheme_Object *scheme_local_lift_require(Scheme_Object *form, Scheme_Object *ori SCHEME_EXPAND_OBSERVE_LIFT_REQUIRE(scheme_get_expand_observe(), req_form, orig_form, form); + /* In a top-level context, may need to force compile-time evaluation: */ + if (!env->genv->module) + scheme_prepare_compile_env(env->genv); + return form; }