extra '((lambda' check in bytecode optimizer
svn: r12724
This commit is contained in:
parent
d8c28545ea
commit
bd48d376aa
|
@ -2220,6 +2220,11 @@ Scheme_Object *optimize_for_inline(Optimize_Info *info, Scheme_Object *le, int a
|
|||
if (info->inline_fuel < 0)
|
||||
return NULL;
|
||||
|
||||
if (SAME_TYPE(SCHEME_TYPE(le), scheme_compiled_unclosed_procedure_type)) {
|
||||
/* Found a `((lambda' */
|
||||
single_use = 1;
|
||||
}
|
||||
|
||||
if (SAME_TYPE(SCHEME_TYPE(le), scheme_local_type)) {
|
||||
/* Check for inlining: */
|
||||
le = scheme_optimize_info_lookup(info, SCHEME_LOCAL_POS(le), &offset, &single_use);
|
||||
|
@ -2458,6 +2463,16 @@ static Scheme_Object *optimize_application(Scheme_Object *o, Optimize_Info *info
|
|||
le = scheme_optimize_expr(app->args[i], info);
|
||||
app->args[i] = le;
|
||||
|
||||
if (!i) {
|
||||
if (SAME_TYPE(SCHEME_TYPE(app->args[0]),scheme_compiled_unclosed_procedure_type)) {
|
||||
/* Found "((lambda" after optimizing; try again */
|
||||
le = optimize_for_inline(info, app->args[i], n - 1, app, NULL, NULL, &rator_flags);
|
||||
if (le)
|
||||
return le;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (i && (SCHEME_TYPE(le) < _scheme_compiled_values_types_))
|
||||
all_vals = 0;
|
||||
}
|
||||
|
@ -2501,6 +2516,13 @@ static Scheme_Object *optimize_application2(Scheme_Object *o, Optimize_Info *inf
|
|||
le = scheme_optimize_expr(app->rator, info);
|
||||
app->rator = le;
|
||||
|
||||
if (SAME_TYPE(SCHEME_TYPE(app->rator),scheme_compiled_unclosed_procedure_type)) {
|
||||
/* Found "((lambda" after optimizing; try again */
|
||||
le = optimize_for_inline(info, app->rator, 1, NULL, app, NULL, &rator_flags);
|
||||
if (le)
|
||||
return le;
|
||||
}
|
||||
|
||||
le = scheme_optimize_expr(app->rand, info);
|
||||
app->rand = le;
|
||||
if (SCHEME_TYPE(le) > _scheme_compiled_values_types_) {
|
||||
|
@ -2564,6 +2586,13 @@ static Scheme_Object *optimize_application3(Scheme_Object *o, Optimize_Info *inf
|
|||
le = scheme_optimize_expr(app->rator, info);
|
||||
app->rator = le;
|
||||
|
||||
if (SAME_TYPE(SCHEME_TYPE(app->rator),scheme_compiled_unclosed_procedure_type)) {
|
||||
/* Found "((lambda" after optimizing; try again */
|
||||
le = optimize_for_inline(info, app->rator, 2, NULL, NULL, app, &rator_flags);
|
||||
if (le)
|
||||
return le;
|
||||
}
|
||||
|
||||
/* 1st arg */
|
||||
|
||||
le = scheme_optimize_expr(app->rand1, info);
|
||||
|
|
Loading…
Reference in New Issue
Block a user