fix problems with syntax-local-get-shadower and syntax-local-lift-require

svn: r14744
This commit is contained in:
Matthew Flatt 2009-05-07 22:45:15 +00:00
parent 5232691355
commit c9b76801ed
5 changed files with 18 additions and 6 deletions

View File

@ -4515,6 +4515,8 @@ local_module_introduce(int argc, Scheme_Object *argv[])
if (SCHEME_FALSEP(v)) { if (SCHEME_FALSEP(v)) {
if (env->genv->rename_set) if (env->genv->rename_set)
s = scheme_add_rename(s, 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; return s;

View File

@ -5555,6 +5555,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env,
if (rec[drec].comp || (rec[drec].depth != -2)) { if (rec[drec].comp || (rec[drec].depth != -2)) {
/* rename tables no longer needed; NULL them out */ /* rename tables no longer needed; NULL them out */
menv->rename_set = NULL; menv->rename_set = NULL;
menv->post_ex_rename_set = NULL;
} }
LOG_END_EXPAND(m); 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_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_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); 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: */ /* For syntax-local-context, etc., in a d-s RHS: */
rhs_env = scheme_new_comp_env(env->genv, env->insp, SCHEME_TOPLEVEL_FRAME); 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 * static Scheme_Object *
top_level_require_execute(Scheme_Object *data) do_require_execute(Scheme_Env *env, Scheme_Object *form)
{ {
Scheme_Hash_Table *ht; Scheme_Hash_Table *ht;
Scheme_Object *rn_set, *modidx; Scheme_Object *rn_set, *modidx;
Scheme_Object *form = SCHEME_CDR(data), *rest; Scheme_Object *rest;
Scheme_Env *env;
env = scheme_environment_from_dummy(SCHEME_CAR(data));
if (env->module) if (env->module)
modidx = env->module->self_modidx; modidx = env->module->self_modidx;
@ -9147,6 +9146,13 @@ top_level_require_execute(Scheme_Object *data)
return scheme_void; 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 * static Scheme_Object *
top_level_require_jit(Scheme_Object *data) 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); form = make_require_form(module_path, phase, mark);
do_require(form, cenv, NULL, 0); do_require_execute(cenv->genv, form);
return form; return form;
} }

View File

@ -2090,6 +2090,7 @@ static int namespace_val_MARK(void *p) {
gcMARK(e->rename_set); gcMARK(e->rename_set);
gcMARK(e->temp_marked_names); gcMARK(e->temp_marked_names);
gcMARK(e->post_ex_rename_set);
gcMARK(e->syntax); gcMARK(e->syntax);
gcMARK(e->exp_env); gcMARK(e->exp_env);
@ -2128,6 +2129,7 @@ static int namespace_val_FIXUP(void *p) {
gcFIXUP(e->rename_set); gcFIXUP(e->rename_set);
gcFIXUP(e->temp_marked_names); gcFIXUP(e->temp_marked_names);
gcFIXUP(e->post_ex_rename_set);
gcFIXUP(e->syntax); gcFIXUP(e->syntax);
gcFIXUP(e->exp_env); gcFIXUP(e->exp_env);

View File

@ -833,6 +833,7 @@ namespace_val {
gcMARK(e->rename_set); gcMARK(e->rename_set);
gcMARK(e->temp_marked_names); gcMARK(e->temp_marked_names);
gcMARK(e->post_ex_rename_set);
gcMARK(e->syntax); gcMARK(e->syntax);
gcMARK(e->exp_env); gcMARK(e->exp_env);

View File

@ -2552,6 +2552,7 @@ struct Scheme_Env {
Scheme_Object *rename_set; Scheme_Object *rename_set;
Scheme_Hash_Table *temp_marked_names; /* used to correlate imports with re-exports */ 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; Scheme_Bucket_Table *syntax;
struct Scheme_Env *exp_env; struct Scheme_Env *exp_env;