diff --git a/pkgs/racket-test-core/tests/racket/module.rktl b/pkgs/racket-test-core/tests/racket/module.rktl index 25d4b2f3f0..a84f8bba65 100644 --- a/pkgs/racket-test-core/tests/racket/module.rktl +++ b/pkgs/racket-test-core/tests/racket/module.rktl @@ -2048,6 +2048,25 @@ case of module-leve bindings; it doesn't cover local bindings. (test 1 dynamic-require '(submod 'uses-own-namespace-for-eval-from-submodule main) 'v) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Make sure a module that isn't in a file +;; correctly introduces and references compile-time +;; top-level definitions + +(parameterize ([current-namespace (make-base-namespace)]) + (eval '(module m racket + + (require syntax/parse/define) + + (define-simple-macro (f m:id) + (begin + (define-for-syntax x "prop value") + (define-syntax (m stx) x #'(void)))))) + (eval '(dynamic-require ''m #f)) + (let ([ns (module->namespace ''m)]) + (eval '(f m) ns) + (eval '(m) ns))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/racket/src/compenv.c b/racket/src/racket/src/compenv.c index e79cd67780..53c6dc3303 100644 --- a/racket/src/racket/src/compenv.c +++ b/racket/src/racket/src/compenv.c @@ -1869,10 +1869,12 @@ static Scheme_Object *select_binding_name(Scheme_Object *sym, Scheme_Env *env, static int binding_matches_env(Scheme_Object *binding, Scheme_Env *env, Scheme_Object *phase) { return (SCHEME_VECTORP(binding) - && SAME_OBJ(SCHEME_VEC_ELS(binding)[0], - (env->module - ? env->module->self_modidx - : scheme_false)) + && (SAME_OBJ(SCHEME_VEC_ELS(binding)[0], + (env->module + ? env->module->self_modidx + : scheme_false)) + || SAME_OBJ(SCHEME_VEC_ELS(binding)[0], + env->link_midx)) && SAME_OBJ(SCHEME_VEC_ELS(binding)[2], phase)); }