diff --git a/src/racket/src/env.c b/src/racket/src/env.c index eab5df2f60..be7248c19f 100644 --- a/src/racket/src/env.c +++ b/src/racket/src/env.c @@ -2522,7 +2522,9 @@ static Scheme_Object *local_submodules(int argc, Scheme_Object *argv[]) not_currently_transforming("syntax-local-submodules"); if (env->genv->module) { - l = env->genv->module->pre_submodules; + l = env->genv->module->pre_submodule_names; + if (!l) + l = env->genv->module->pre_submodules; if (l) { while (!SCHEME_NULLP(l)) { n = SCHEME_CAR(l); diff --git a/src/racket/src/module.c b/src/racket/src/module.c index 9d276a38be..86296ee45a 100644 --- a/src/racket/src/module.c +++ b/src/racket/src/module.c @@ -6219,10 +6219,8 @@ static void execute_submodules(Scheme_Module *m, int pre, Scheme_Env *genv, } while (!SCHEME_NULLP(p)) { - if (!SCHEME_SYMBOLP(SCHEME_CAR(p))) { - do_module_execute_recur(SCHEME_CAR(p), genv, set_cache, set_in_pre, prefix, - (Scheme_Object *)m); - } + do_module_execute_recur(SCHEME_CAR(p), genv, set_cache, set_in_pre, prefix, + (Scheme_Object *)m); p = SCHEME_CDR(p); } } @@ -6510,12 +6508,10 @@ static Scheme_Object *do_module_clone(Scheme_Object *data, int jit) if (l1 && !SCHEME_NULLP(l1)) { l2 = scheme_null; while (!SCHEME_NULLP(l1)) { - if (!SCHEME_SYMBOLP(SCHEME_CAR(l1))) { - sm = do_module_clone(SCHEME_CAR(l1), jit); - if (!SAME_OBJ(sm, SCHEME_CAR(l1))) - submod_changed = 1; - l2 = scheme_make_pair(sm, l2); - } + sm = do_module_clone(SCHEME_CAR(l1), jit); + if (!SAME_OBJ(sm, SCHEME_CAR(l1))) + submod_changed = 1; + l2 = scheme_make_pair(sm, l2); l1 = SCHEME_CDR(l1); } if (submod_changed) { @@ -9260,11 +9256,10 @@ static Scheme_Object *expand_submodules(Scheme_Compile_Expand_Info *rec, int dre env->genv->module->pre_submodules = l; } } else if (!SCHEME_NULLP(mods)) { - if (post) { - /* setting pre_submodules to '() indicates that there were submodules during expansion */ - env->genv->module->pre_submodules = scheme_null; - } else { - l = env->genv->module->pre_submodules; + /* setting pre_submodules to '() indicates that there were submodules during expansion */ + env->genv->module->pre_submodules = scheme_null; + if (!post) { + l = env->genv->module->pre_submodule_names; if (!l) l = scheme_null; /* extract just the name: */ mod = SCHEME_CAR(mods); @@ -9272,7 +9267,7 @@ static Scheme_Object *expand_submodules(Scheme_Compile_Expand_Info *rec, int dre mod = SCHEME_STX_CAR(mod); mod = SCHEME_STX_VAL(mod); l = scheme_make_pair(mod, l); - env->genv->module->pre_submodules = l; + env->genv->module->pre_submodule_names = l; } } @@ -10963,7 +10958,9 @@ static int check_is_submodule(Scheme_Object *modname, Scheme_Object *_genv) Scheme_Object *l, *n; if (genv->module) { - l = genv->module->pre_submodules; + l = genv->module->pre_submodule_names; + if (!l) + l = genv->module->pre_submodules; if (l) { while (!SCHEME_NULLP(l)) { n = SCHEME_CAR(l); @@ -10983,7 +10980,7 @@ static int check_is_submodule(Scheme_Object *modname, Scheme_Object *_genv) } } } - + return 0; } diff --git a/src/racket/src/mzmark_type.inc b/src/racket/src/mzmark_type.inc index 1976aabe3d..60b1fa4f02 100644 --- a/src/racket/src/mzmark_type.inc +++ b/src/racket/src/mzmark_type.inc @@ -2654,6 +2654,7 @@ static int module_val_MARK(void *p, struct NewGC *gc) { gcMARK2(m->submodule_path, gc); gcMARK2(m->pre_submodules, gc); gcMARK2(m->post_submodules, gc); + gcMARK2(m->pre_submodule_names, gc); gcMARK2(m->supermodule, gc); gcMARK2(m->submodule_ancestry, gc); @@ -2701,6 +2702,7 @@ static int module_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(m->submodule_path, gc); gcFIXUP2(m->pre_submodules, gc); gcFIXUP2(m->post_submodules, gc); + gcFIXUP2(m->pre_submodule_names, gc); gcFIXUP2(m->supermodule, gc); gcFIXUP2(m->submodule_ancestry, gc); diff --git a/src/racket/src/mzmarksrc.c b/src/racket/src/mzmarksrc.c index 0283b4ccc9..a94ee2e256 100644 --- a/src/racket/src/mzmarksrc.c +++ b/src/racket/src/mzmarksrc.c @@ -1081,6 +1081,7 @@ module_val { gcMARK2(m->submodule_path, gc); gcMARK2(m->pre_submodules, gc); gcMARK2(m->post_submodules, gc); + gcMARK2(m->pre_submodule_names, gc); gcMARK2(m->supermodule, gc); gcMARK2(m->submodule_ancestry, gc); diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index 7cc59b024a..3b8cfa9ce7 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -3294,8 +3294,8 @@ typedef struct Scheme_Module Scheme_Object *rn_stx; /* NULL, #t, a stx for a rename, a vector of stxes, or a pair to delay shifts */ Scheme_Object *submodule_path; /* path to this module relative to enclosing top-level module */ - Scheme_Object *pre_submodules; /* list of modules (when compiled or loaded as a group) or symbols (during expand) */ - Scheme_Object *post_submodules; /* list of modules (when compiled or loaded as a group) */ + Scheme_Object *pre_submodules, *post_submodules; /* list of modules (when compiled or loaded as a group) */ + Scheme_Object *pre_submodule_names; /* list of symbols (in expand mode) */ Scheme_Object *supermodule; /* supermodule for which this is in {pre,post}_submodules */ Scheme_Object *submodule_ancestry; /* se by compile/expand, temporary */ } Scheme_Module;