diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index ce4613ed0c..1dae3448c6 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -4515,6 +4515,8 @@ local_module_introduce(int argc, Scheme_Object *argv[]) if (SCHEME_FALSEP(v)) { if (env->genv->rename_set) s = scheme_add_rename(s, env->genv->rename_set); + if (env->genv->post_ex_rename_set) + s = scheme_add_rename(s, env->genv->post_ex_rename_set); } return s; diff --git a/src/mzscheme/src/module.c b/src/mzscheme/src/module.c index d91c263ca4..4cc990480e 100644 --- a/src/mzscheme/src/module.c +++ b/src/mzscheme/src/module.c @@ -5555,6 +5555,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, if (rec[drec].comp || (rec[drec].depth != -2)) { /* rename tables no longer needed; NULL them out */ menv->rename_set = NULL; + menv->post_ex_rename_set = NULL; } LOG_END_EXPAND(m); @@ -6020,6 +6021,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, post_ex_rn_set = scheme_make_module_rename_set(mzMOD_RENAME_MARKED, rn_set); post_ex_rn = scheme_get_module_rename_from_set(post_ex_rn_set, scheme_make_integer(0), 1); post_ex_et_rn = scheme_get_module_rename_from_set(post_ex_rn_set, scheme_make_integer(1), 1); + env->genv->post_ex_rename_set = post_ex_rn_set; /* For syntax-local-context, etc., in a d-s RHS: */ rhs_env = scheme_new_comp_env(env->genv, env->insp, SCHEME_TOPLEVEL_FRAME); @@ -9098,14 +9100,11 @@ static void check_dup_require(Scheme_Object *prnt_name, Scheme_Object *name, } static Scheme_Object * -top_level_require_execute(Scheme_Object *data) +do_require_execute(Scheme_Env *env, Scheme_Object *form) { Scheme_Hash_Table *ht; Scheme_Object *rn_set, *modidx; - Scheme_Object *form = SCHEME_CDR(data), *rest; - Scheme_Env *env; - - env = scheme_environment_from_dummy(SCHEME_CAR(data)); + Scheme_Object *rest; if (env->module) modidx = env->module->self_modidx; @@ -9147,6 +9146,13 @@ top_level_require_execute(Scheme_Object *data) return scheme_void; } +static Scheme_Object * +top_level_require_execute(Scheme_Object *data) +{ + do_require_execute(scheme_environment_from_dummy(SCHEME_CAR(data)), + SCHEME_CDR(data)); +} + static Scheme_Object * top_level_require_jit(Scheme_Object *data) { @@ -9252,7 +9258,7 @@ Scheme_Object *scheme_toplevel_require_for_expand(Scheme_Object *module_path, form = make_require_form(module_path, phase, mark); - do_require(form, cenv, NULL, 0); + do_require_execute(cenv->genv, form); return form; } diff --git a/src/mzscheme/src/mzmark.c b/src/mzscheme/src/mzmark.c index 80985c8c22..0b2cf62ae3 100644 --- a/src/mzscheme/src/mzmark.c +++ b/src/mzscheme/src/mzmark.c @@ -2090,6 +2090,7 @@ static int namespace_val_MARK(void *p) { gcMARK(e->rename_set); gcMARK(e->temp_marked_names); + gcMARK(e->post_ex_rename_set); gcMARK(e->syntax); gcMARK(e->exp_env); @@ -2128,6 +2129,7 @@ static int namespace_val_FIXUP(void *p) { gcFIXUP(e->rename_set); gcFIXUP(e->temp_marked_names); + gcFIXUP(e->post_ex_rename_set); gcFIXUP(e->syntax); gcFIXUP(e->exp_env); diff --git a/src/mzscheme/src/mzmarksrc.c b/src/mzscheme/src/mzmarksrc.c index a93a9e4384..d14952ecc8 100644 --- a/src/mzscheme/src/mzmarksrc.c +++ b/src/mzscheme/src/mzmarksrc.c @@ -833,6 +833,7 @@ namespace_val { gcMARK(e->rename_set); gcMARK(e->temp_marked_names); + gcMARK(e->post_ex_rename_set); gcMARK(e->syntax); gcMARK(e->exp_env); diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index d21b68f054..f45f9ade7a 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -2552,6 +2552,7 @@ struct Scheme_Env { Scheme_Object *rename_set; Scheme_Hash_Table *temp_marked_names; /* used to correlate imports with re-exports */ + Scheme_Object *post_ex_rename_set; /* during module expansion */ Scheme_Bucket_Table *syntax; struct Scheme_Env *exp_env;