fix (#%variable-reference) in let-syntax RHS (PR 10696)

svn: r17745
This commit is contained in:
Matthew Flatt 2010-01-19 08:00:50 +00:00
parent d8b7906fd5
commit a6231d88e9
4 changed files with 12 additions and 9 deletions

View File

@ -9723,7 +9723,7 @@ static void *eval_k(void)
v = scheme_eval_clone(v);
rp = scheme_prefix_eval_clone(top->prefix);
save_runstack = scheme_push_prefix(env, top->prefix, NULL, NULL, 0, env->phase);
save_runstack = scheme_push_prefix(env, top->prefix, NULL, NULL, 0, env->phase, NULL);
if (as_tail) {
/* Cons up a closure to capture the prefix */
@ -11031,7 +11031,8 @@ int scheme_prefix_depth(Resolve_Prefix *rp)
Scheme_Object **scheme_push_prefix(Scheme_Env *genv, Resolve_Prefix *rp,
Scheme_Object *src_modidx, Scheme_Object *now_modidx,
int src_phase, int now_phase)
int src_phase, int now_phase,
Scheme_Env *dummy_env)
{
Scheme_Object **rs_save, **rs, *v, **a;
int i, j;
@ -11056,8 +11057,8 @@ Scheme_Object **scheme_push_prefix(Scheme_Env *genv, Resolve_Prefix *rp,
for (i = 0; i < rp->num_toplevels; i++) {
v = rp->toplevels[i];
if (genv)
v = link_toplevel(rp->toplevels, i, genv, src_modidx, now_modidx);
if (genv || SCHEME_FALSEP(v))
v = link_toplevel(rp->toplevels, i, genv ? genv : dummy_env, src_modidx, now_modidx);
a[i] = v;
}

View File

@ -4399,7 +4399,7 @@ void *scheme_module_run_finish(Scheme_Env *menv, Scheme_Env *env)
save_runstack = scheme_push_prefix(menv, m->prefix,
m->me->src_modidx, menv->link_midx,
0, menv->phase);
0, menv->phase, NULL);
p = scheme_current_thread;
save_phase_shift = p->current_phase_shift;
@ -4782,7 +4782,8 @@ static void eval_exptime(Scheme_Object *names, int count,
save_runstack = scheme_push_prefix(genv, rp,
(shift ? genv->module->me->src_modidx : NULL),
(shift ? genv->link_midx : NULL),
1, genv->phase);
1, genv->phase,
NULL);
if (is_simple_expr(expr)) {
vals = _scheme_eval_linked_expr_multi_wp(expr, scheme_current_thread);

View File

@ -2584,7 +2584,8 @@ void scheme_shadow(Scheme_Env *env, Scheme_Object *n, int stxtoo);
int scheme_prefix_depth(Resolve_Prefix *rp);
Scheme_Object **scheme_push_prefix(Scheme_Env *genv, Resolve_Prefix *rp,
Scheme_Object *src_modix, Scheme_Object *now_modix,
int src_phase, int now_phase);
int src_phase, int now_phase,
Scheme_Env *dummy_env);
void scheme_pop_prefix(Scheme_Object **rs);
Scheme_Object *scheme_eval_clone(Scheme_Object *expr);

View File

@ -700,7 +700,7 @@ define_execute_with_dynamic_state(Scheme_Object *vec, int delta, int defmacro,
if (dm_env) {
scheme_prepare_exp_env(dm_env);
save_runstack = scheme_push_prefix(dm_env->exp_env, rp, NULL, NULL, 1, 1);
save_runstack = scheme_push_prefix(dm_env->exp_env, rp, NULL, NULL, 1, 1, NULL);
vals = scheme_eval_linked_expr_multi_with_dynamic_state(vals_expr, dyn_state);
if (defmacro == 2)
dm_env = NULL;
@ -5850,7 +5850,7 @@ static Scheme_Object *eval_letmacro_rhs(Scheme_Object *a, Scheme_Comp_Env *rhs_e
return (Scheme_Object *)scheme_enlarge_runstack(depth, eval_letmacro_rhs_k);
}
save_runstack = scheme_push_prefix(NULL, rp, NULL, NULL, phase, phase);
save_runstack = scheme_push_prefix(NULL, rp, NULL, NULL, phase, phase, rhs_env->genv);
if (scheme_omittable_expr(a, 1, -1, 0, NULL)) {
/* short cut */