diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index fb57d1fac1..dc1f01cf02 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -3950,10 +3950,9 @@ local_lift_expr(int argc, Scheme_Object *argv[]) expr = scheme_make_pair(expr, SCHEME_VEC_ELS(vec)[0]); SCHEME_VEC_ELS(vec)[0] = expr; - id = scheme_add_remove_mark(id, local_mark); - SCHEME_EXPAND_OBSERVE_LOCAL_LIFT(scheme_get_expand_observe(), id, orig_expr); + id = scheme_add_remove_mark(id, local_mark); return id; } diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index 79c3d29705..99a198b679 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -4826,6 +4826,7 @@ compile_expand_expr_lift_to_let(Scheme_Object *form, Scheme_Comp_Env *env, icons(o, scheme_null))); } form = scheme_datum_to_syntax(o, orig_form, scheme_false, 0, 0); + SCHEME_EXPAND_OBSERVE_LETLIFT_LOOP(rec[drec].observer, form); form = compile_expand_expr_lift_to_let(form, env, recs, 1); if (rec[drec].comp) scheme_merge_compile_recs(rec, drec, recs, 2); diff --git a/src/mzscheme/src/module.c b/src/mzscheme/src/module.c index 72fda4aae3..a7249fb159 100644 --- a/src/mzscheme/src/module.c +++ b/src/mzscheme/src/module.c @@ -4038,7 +4038,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, fm = scheme_named_map_1(NULL, add_a_rename, fm, post_ex_et_rn); fm = scheme_named_map_1(NULL, add_a_rename, fm, post_ex_tt_rn); fm = scheme_append(fst, scheme_make_pair(e, fm)); - SCHEME_EXPAND_OBSERVE_LIFT_LOOP(observer, fst); + SCHEME_EXPAND_OBSERVE_MODULE_LIFT_LOOP(observer, fst); } else { /* No lifts added... */ if (SCHEME_STX_PAIRP(e)) @@ -4056,7 +4056,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, if (SCHEME_STX_NULLP(fm)) { fm = scheme_frame_get_end_statement_lifts(xenv); fm = scheme_reverse(fm); - SCHEME_EXPAND_OBSERVE_LIFT_END_LOOP(observer, fm); + SCHEME_EXPAND_OBSERVE_MODULE_LIFT_END_LOOP(observer, fm); maybe_has_lifts = 0; if (SCHEME_NULLP(fm)) { e = NULL; @@ -4631,13 +4631,13 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, if (SCHEME_STX_NULLP(fm) && maybe_has_lifts) { fm = scheme_frame_get_end_statement_lifts(xenv); fm = scheme_reverse(fm); - SCHEME_EXPAND_OBSERVE_LIFT_END_LOOP(observer, fm); + SCHEME_EXPAND_OBSERVE_MODULE_LIFT_END_LOOP(observer, fm); maybe_has_lifts = 0; } } /* first = a list of (cons semi-expanded-expression normal?) */ - /* Phase 2 */ + /* Pass 2 */ SCHEME_EXPAND_OBSERVE_NEXT_GROUP(observer); if (rec[drec].comp) { @@ -4692,6 +4692,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, p = SCHEME_CDR(p); } else { /* Lifts - insert them and try again */ + SCHEME_EXPAND_OBSERVE_MODULE_LIFT_LOOP(observer, scheme_copy_list(l)); e = scheme_make_pair(e, scheme_false); /* don't re-compile/-expand */ SCHEME_CAR(p) = e; for (ll = l; SCHEME_PAIRP(ll); ll = SCHEME_CDR(ll)) { @@ -4704,7 +4705,6 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, } else { first = p; } - SCHEME_EXPAND_OBSERVE_LIFT_LOOP(observer, first); } } else { SCHEME_CAR(p) = e; @@ -4715,7 +4715,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, /* If we're out of declarations, check for lifted-to-end: */ if (SCHEME_NULLP(p) && maybe_has_lifts) { p = scheme_frame_get_end_statement_lifts(cenv); - SCHEME_EXPAND_OBSERVE_LIFT_END_LOOP(observer, scheme_reverse(p)); + SCHEME_EXPAND_OBSERVE_MODULE_LIFT_END_LOOP(observer, scheme_reverse(p)); p = scheme_reverse(p); for (ll = p; SCHEME_PAIRP(ll); ll = SCHEME_CDR(ll)) { e = scheme_make_pair(SCHEME_CAR(ll), scheme_true); diff --git a/src/mzscheme/src/schexpobs.h b/src/mzscheme/src/schexpobs.h index 53f78fff14..d6dc3b90f4 100644 --- a/src/mzscheme/src/schexpobs.h +++ b/src/mzscheme/src/schexpobs.h @@ -117,7 +117,11 @@ extern Scheme_Object *scheme_get_expand_observe(); #define SCHEME_EXPAND_OBSERVE_LIFT_LOOP(observer,stx) \ _SCHEME_EXPOBS(observer,128,stx) -#define SCHEME_EXPAND_OBSERVE_LIFT_END_LOOP(observer,stx) \ +#define SCHEME_EXPAND_OBSERVE_LETLIFT_LOOP(observer,stx) \ + _SCHEME_EXPOBS(observer,136,stx) +#define SCHEME_EXPAND_OBSERVE_MODULE_LIFT_LOOP(observe,stxs) \ + _SCHEME_EXPOBS(observer,137,stxs) +#define SCHEME_EXPAND_OBSERVE_MODULE_LIFT_END_LOOP(observer,stx) \ _SCHEME_EXPOBS(observer,135,stx) #define SCHEME_EXPAND_OBSERVE_LOCAL_LIFT(obs,id,stx) \