diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index cee23766b3..6d9942bffc 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -2385,7 +2385,9 @@ static Scheme_Object *optimize_application2(Scheme_Object *o, Optimize_Info *inf } if (SAME_TYPE(SCHEME_TYPE(app->rand), scheme_local_type)) { int offset; - if (scheme_optimize_info_lookup(info, SCHEME_LOCAL_POS(app->rand), &offset)) { + Scheme_Object *expr; + expr = scheme_optimize_reverse(info, SCHEME_LOCAL_POS(app->rand), 0); + if (scheme_optimize_info_lookup(info, SCHEME_LOCAL_POS(expr), &offset)) { info->preserves_marks = 1; info->single_result = 1; return scheme_true; diff --git a/src/mzscheme/src/fun.c b/src/mzscheme/src/fun.c index 67659f7efd..4a906d1290 100644 --- a/src/mzscheme/src/fun.c +++ b/src/mzscheme/src/fun.c @@ -988,7 +988,7 @@ Scheme_Object *scheme_clone_closure_compilation(int dup_ok, Scheme_Object *_data int *flags, sz; data = (Scheme_Closure_Data *)_data; - + body = scheme_optimize_clone(dup_ok, data->code, info, delta, closure_depth + data->num_params); if (!body) return NULL; @@ -1001,6 +1001,9 @@ Scheme_Object *scheme_clone_closure_compilation(int dup_ok, Scheme_Object *_data memcpy(cl, data->closure_map, sizeof(Closure_Info)); data2->closure_map = (mzshort *)cl; + /* We don't have to update base_closure_map, because + it will get re-computed as the closure is re-optimized. */ + sz = sizeof(int) * data2->num_params; flags = (int *)scheme_malloc_atomic(sz); memcpy(flags, cl->local_flags, sz);