diff --git a/pkgs/racket-test-core/tests/racket/module.rktl b/pkgs/racket-test-core/tests/racket/module.rktl index 33c6190185..7b13c4b7e7 100644 --- a/pkgs/racket-test-core/tests/racket/module.rktl +++ b/pkgs/racket-test-core/tests/racket/module.rktl @@ -1780,6 +1780,21 @@ case of module-leve bindings; it doesn't cover local bindings. (test 5 dynamic-require ''module-that-exports-phase-2-x-at-phase-0 'x) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Check that +;; `namespace-anchor->namespace` internally enables top-level mode for +;; binding handling: + +;; Example from Alex Knauth: +(module module-that-uses-eval-to-define-a-macro-in-its-own-namespace racket/base + (require (for-syntax racket/base)) + (define-namespace-anchor a) + (define ns (namespace-anchor->namespace a)) + (eval '(define-syntax x (λ (stx) #'333)) ns) + (define result (eval 'x ns)) + (provide result)) + +(test 333 dynamic-require ''module-that-uses-eval-to-define-a-macro-in-its-own-namespace 'result) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/racket/src/env.c b/racket/src/racket/src/env.c index 961ed4c1e5..7abb93b78c 100644 --- a/racket/src/racket/src/env.c +++ b/racket/src/racket/src/env.c @@ -2120,6 +2120,7 @@ static Scheme_Object *do_variable_namespace(const char *who, int tl, int argc, S /* return env directly; need to set up */ if (!env->phase && env->module) scheme_prep_namespace_rename(env); + env->interactive_bindings = 1; } else { /* new namespace: */ Scheme_Env *new_env;