From 3b8d00029ee1fdf6e94c1ab8a30038579fc796c7 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 2 Aug 2011 17:04:22 -0600 Subject: [PATCH] fix `namespace-attach-module{-declaration}' problem Closes PR 12048 --- collects/tests/racket/namespac.rktl | 11 +++++++++++ src/racket/src/module.c | 13 +++++++++++++ 2 files changed, 24 insertions(+) diff --git a/collects/tests/racket/namespac.rktl b/collects/tests/racket/namespac.rktl index 96e3a57cb3..e104d50672 100644 --- a/collects/tests/racket/namespac.rktl +++ b/collects/tests/racket/namespac.rktl @@ -174,6 +174,17 @@ (test 'va->ms dynamic-require ''va->ms 'modsrc) +;; ---------------------------------------- +;; Check that `namespace-attach-module-declaration' doesn't +;; trigger the module-name resolver in the wrong namespace: + +(let () + (define ns0 (make-base-namespace)) + (eval '(module sample racket (#%module-begin)) ns0) + (define ns1 (make-empty-namespace)) + (parameterize ([current-namespace ns1]) + (namespace-attach-module-declaration ns0 ''sample ns1))) + ;; ---------------------------------------- (report-errs) diff --git a/src/racket/src/module.c b/src/racket/src/module.c index a057847880..a1c0261684 100644 --- a/src/racket/src/module.c +++ b/src/racket/src/module.c @@ -1677,11 +1677,24 @@ static Scheme_Object *do_namespace_attach_module(const char *who, int argc, Sche name); else { /* instantiate for-label: */ + Scheme_Cont_Frame_Data cframe; + Scheme_Config *config; + + /* make sure `from_env' is the current namespace, because + start_module() may need to resolve module paths: */ + config = scheme_extend_config(scheme_current_config(), + MZCONFIG_ENV, + (Scheme_Object *)from_env); + scheme_push_continuation_frame(&cframe); + scheme_set_cont_mark(scheme_parameterization_key, (Scheme_Object *)config); + start_module(m2, from_env->label_env, 0, main_modidx, 0, 0, from_env->phase, scheme_null); + + scheme_pop_continuation_frame(&cframe); /* try again: */ menv = (Scheme_Env *)scheme_hash_get(MODCHAIN_TABLE(from_env->label_env->modchain), name);