fix bug in procedure? test optimization
svn: r8225
This commit is contained in:
parent
7f3a5c13c2
commit
8f87430c49
|
@ -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)) {
|
if (SAME_TYPE(SCHEME_TYPE(app->rand), scheme_local_type)) {
|
||||||
int offset;
|
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->preserves_marks = 1;
|
||||||
info->single_result = 1;
|
info->single_result = 1;
|
||||||
return scheme_true;
|
return scheme_true;
|
||||||
|
|
|
@ -988,7 +988,7 @@ Scheme_Object *scheme_clone_closure_compilation(int dup_ok, Scheme_Object *_data
|
||||||
int *flags, sz;
|
int *flags, sz;
|
||||||
|
|
||||||
data = (Scheme_Closure_Data *)_data;
|
data = (Scheme_Closure_Data *)_data;
|
||||||
|
|
||||||
body = scheme_optimize_clone(dup_ok, data->code, info, delta, closure_depth + data->num_params);
|
body = scheme_optimize_clone(dup_ok, data->code, info, delta, closure_depth + data->num_params);
|
||||||
if (!body) return NULL;
|
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));
|
memcpy(cl, data->closure_map, sizeof(Closure_Info));
|
||||||
data2->closure_map = (mzshort *)cl;
|
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;
|
sz = sizeof(int) * data2->num_params;
|
||||||
flags = (int *)scheme_malloc_atomic(sz);
|
flags = (int *)scheme_malloc_atomic(sz);
|
||||||
memcpy(flags, cl->local_flags, sz);
|
memcpy(flags, cl->local_flags, sz);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user