diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index cb077b84f2..891e9f9f67 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -3928,7 +3928,9 @@ static Scheme_Object *do_variable_namespace(const char *who, int tl, int argc, S if (tl == 2) { return scheme_make_integer(ph); } else if (tl) { - /* return env directly */ + /* return env directly; need to set up */ + if (!env->phase) + scheme_prep_namespace_rename(env); } else { /* new namespace: */ Scheme_Env *new_env; diff --git a/src/mzscheme/src/module.c b/src/mzscheme/src/module.c index a0b4a60ab4..9bd89f4c3b 100644 --- a/src/mzscheme/src/module.c +++ b/src/mzscheme/src/module.c @@ -2366,38 +2366,10 @@ static int add_simple_require_renames(Scheme_Object *orig_src, return saw_mb; } -Scheme_Object *scheme_module_to_namespace(Scheme_Object *name, Scheme_Env *env) +void scheme_prep_namespace_rename(Scheme_Env *menv) { - Scheme_Env *menv; - Scheme_Object *modchain; - - name = scheme_module_resolve(scheme_make_modidx(name, scheme_false, scheme_false), 1); - - modchain = env->modchain; - menv = (Scheme_Env *)scheme_hash_get(MODCHAIN_TABLE(modchain), name); - if (!menv) { - if (scheme_hash_get(env->module_registry, name)) - scheme_arg_mismatch("module->namespace", - "module not instantiated in the current namespace: ", - name); - else - scheme_arg_mismatch("module->namespace", - "unknown module in the current namespace: ", - name); - } - - { - Scheme_Object *insp; - insp = scheme_get_param(scheme_current_config(), MZCONFIG_CODE_INSPECTOR); - if (scheme_module_protected_wrt(menv->insp, insp) || menv->attached) { - scheme_raise_exn(MZEXN_FAIL_CONTRACT, - "module->namespace: current code inspector cannot access namespace of module: %D", - name); - } - } - if (menv->lazy_syntax) - finish_expstart_module_in_namespace(menv, env); + finish_expstart_module_in_namespace(menv, menv /* was just env... */); if (!menv->et_ran) scheme_run_module_exptime(menv, 1); scheme_prepare_exp_env(menv); @@ -2415,7 +2387,7 @@ Scheme_Object *scheme_module_to_namespace(Scheme_Object *name, Scheme_Env *env) definitions, etc. */ int i; Scheme_Module *im; - Scheme_Object *l, *idx, *one_rn, *shift; + Scheme_Object *l, *idx, *one_rn, *shift, *name; rns = menv->rename_set; one_rn = scheme_get_module_rename_from_set(rns, scheme_make_integer(0), 1); @@ -2497,6 +2469,39 @@ Scheme_Object *scheme_module_to_namespace(Scheme_Object *name, Scheme_Env *env) menv->rename_set_ready = 1; } } +} + +Scheme_Object *scheme_module_to_namespace(Scheme_Object *name, Scheme_Env *env) +{ + Scheme_Env *menv; + Scheme_Object *modchain; + + name = scheme_module_resolve(scheme_make_modidx(name, scheme_false, scheme_false), 1); + + modchain = env->modchain; + menv = (Scheme_Env *)scheme_hash_get(MODCHAIN_TABLE(modchain), name); + if (!menv) { + if (scheme_hash_get(env->module_registry, name)) + scheme_arg_mismatch("module->namespace", + "module not instantiated in the current namespace: ", + name); + else + scheme_arg_mismatch("module->namespace", + "unknown module in the current namespace: ", + name); + } + + { + Scheme_Object *insp; + insp = scheme_get_param(scheme_current_config(), MZCONFIG_CODE_INSPECTOR); + if (scheme_module_protected_wrt(menv->insp, insp) || menv->attached) { + scheme_raise_exn(MZEXN_FAIL_CONTRACT, + "module->namespace: current code inspector cannot access namespace of module: %D", + name); + } + } + + scheme_prep_namespace_rename(menv); return (Scheme_Object *)menv; } diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index cebbe07cfd..5e4d2fc29d 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -2630,6 +2630,7 @@ void scheme_run_module(Scheme_Env *menv, int set_ns); void scheme_run_module_exptime(Scheme_Env *menv, int set_ns); Scheme_Object *scheme_module_to_namespace(Scheme_Object *name, Scheme_Env *env); +void scheme_prep_namespace_rename(Scheme_Env *menv); /*========================================================================*/ /* errors and exceptions */