diff --git a/pkgs/racket-test-core/tests/racket/module.rktl b/pkgs/racket-test-core/tests/racket/module.rktl index 30d5cd5a45..25d4b2f3f0 100644 --- a/pkgs/racket-test-core/tests/racket/module.rktl +++ b/pkgs/racket-test-core/tests/racket/module.rktl @@ -2017,6 +2017,37 @@ case of module-leve bindings; it doesn't cover local bindings. (parameterize ([read-accept-compiled #t]) (read (open-input-bytes (get-output-bytes o))))) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Make sure that when `variable-reference->namespace` +;; reconstitutes variable mappings, that it uses the +;; run-time module path index of the module instead +;; of it's compile-time module path index + +(parameterize ([current-module-declare-name + (make-resolved-module-path 'uses-own-namespace-for-eval-from-submodule)]) + (eval + '(module m racket/base + (require (for-syntax racket/base)) + + (define (x) 1) + + (define-syntax-rule (def) (define y 0)) + (def) + + (void + (variable-reference->namespace (#%variable-reference))) + + (define (get-x) + (eval '(x) (variable-reference->namespace (#%variable-reference)))) + + (module* main #f + (provide v) + (define v + (parameterize ([current-namespace (variable-reference->namespace (#%variable-reference))]) + (eval '(get-x)))))))) + +(test 1 dynamic-require '(submod 'uses-own-namespace-for-eval-from-submodule main) 'v) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/racket/src/env.c b/racket/src/racket/src/env.c index bc5241b0c5..9a83b64d61 100644 --- a/racket/src/racket/src/env.c +++ b/racket/src/racket/src/env.c @@ -1613,7 +1613,9 @@ void scheme_shadow(Scheme_Env *env, Scheme_Object *n, Scheme_Object *val, int as scheme_add_module_binding(id, scheme_env_phase(env), (env->module - ? env->module->self_modidx + ? (env->link_midx + ? env->link_midx + : env->module->self_modidx) : scheme_false), ((env->module && env->module->prefix) ? env->module->prefix->src_insp_desc