optimizer: remove argument of finish_optimize_application

The value of rator_flags was calculated in optimize_application and used in
finish_optimize_application, but it is possible to calculate it directly in
finish_optimize_application, and then remove some internal coupling.

This also simplifies other locations where the rator of an application was
changed and then it was necessary to recalculate the value of rator_flags
to complete the optimization steps.
This commit is contained in:
Gustavo Massaccesi 2016-11-14 20:45:03 -03:00
parent 9ebfdb54e7
commit 85eee2bbbc
3 changed files with 58 additions and 55 deletions

View File

@ -2025,9 +2025,9 @@ int scheme_ir_duplicate_ok(Scheme_Object *fb, int cross_module)
/* applications, branches, sequences */ /* applications, branches, sequences */
/*========================================================================*/ /*========================================================================*/
static Scheme_Object *finish_optimize_application(Scheme_App_Rec *app, Optimize_Info *info, int context, int rator_flags); static Scheme_Object *finish_optimize_application(Scheme_App_Rec *app, Optimize_Info *info, int context);
static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimize_Info *info, int context, int rator_flags); static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimize_Info *info, int context);
static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimize_Info *info, int context, int rator_flags); static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimize_Info *info, int context);
static Scheme_Object *try_optimize_fold(Scheme_Object *f, Scheme_Object *args, Scheme_Object *o, Optimize_Info *info) static Scheme_Object *try_optimize_fold(Scheme_Object *f, Scheme_Object *args, Scheme_Object *o, Optimize_Info *info)
/* If `args` is NULL, extract arguments from `o` */ /* If `args` is NULL, extract arguments from `o` */
@ -2308,20 +2308,29 @@ static Scheme_Object *apply_inlined(Scheme_Lambda *lam, Optimize_Info *info,
return replace_tail_inside(p, le_prev, orig); return replace_tail_inside(p, le_prev, orig);
} }
int scheme_check_leaf_rator(Scheme_Object *le, int *_flags) int scheme_check_leaf_rator(Scheme_Object *le)
{ {
if (le && SCHEME_PRIMP(le)) { if (le && SCHEME_PRIMP(le)) {
int opt; int opt;
opt = ((Scheme_Prim_Proc_Header *)le)->flags & SCHEME_PRIM_OPT_MASK; opt = ((Scheme_Prim_Proc_Header *)le)->flags & SCHEME_PRIM_OPT_MASK;
if (opt >= SCHEME_PRIM_OPT_NONCM) { if (opt >= SCHEME_PRIM_OPT_IMMEDIATE)
if (_flags) return 1;
*_flags = (LAMBDA_PRESERVES_MARKS | LAMBDA_SINGLE_RESULT);
if (opt >= SCHEME_PRIM_OPT_IMMEDIATE) {
return 1;
}
}
} }
return 0;
}
int scheme_get_rator_flags(Scheme_Object *le)
{
if (SCHEME_PRIMP(le)) {
int opt;
opt = ((Scheme_Prim_Proc_Header *)le)->flags & SCHEME_PRIM_OPT_MASK;
if (opt >= SCHEME_PRIM_OPT_NONCM) {
return (LAMBDA_PRESERVES_MARKS | LAMBDA_SINGLE_RESULT);
}
} else if (SAME_TYPE(SCHEME_TYPE(le), scheme_ir_lambda_type)) {
Scheme_Lambda *lam = (Scheme_Lambda *)le;
return SCHEME_LAMBDA_FLAGS(lam);
}
return 0; return 0;
} }
@ -2358,7 +2367,7 @@ int check_potential_size(Scheme_Object *var)
Scheme_Object *optimize_for_inline(Optimize_Info *info, Scheme_Object *le, int argc, Scheme_Object *optimize_for_inline(Optimize_Info *info, Scheme_Object *le, int argc,
Scheme_App_Rec *app, Scheme_App2_Rec *app2, Scheme_App3_Rec *app3, Scheme_App_Rec *app, Scheme_App2_Rec *app2, Scheme_App3_Rec *app3,
int *_flags, int context, int optimized_rator) int context, int optimized_rator)
/* Zero or one of app, app2 and app3 should be non-NULL. /* Zero or one of app, app2 and app3 should be non-NULL.
If app, we're inlining a general application. If app2, we're inlining an If app, we're inlining a general application. If app2, we're inlining an
application with a single argument and if app3, we're inlining an application with a single argument and if app3, we're inlining an
@ -2484,8 +2493,6 @@ Scheme_Object *optimize_for_inline(Optimize_Info *info, Scheme_Object *le, int a
if (noapp) if (noapp)
return le; return le;
*_flags = SCHEME_LAMBDA_FLAGS(lam);
if ((lam->num_params == argc) if ((lam->num_params == argc)
|| ((SCHEME_LAMBDA_FLAGS(lam) & LAMBDA_HAS_REST) || ((SCHEME_LAMBDA_FLAGS(lam) & LAMBDA_HAS_REST)
&& (argc + 1 >= lam->num_params))) { && (argc + 1 >= lam->num_params))) {
@ -2557,7 +2564,7 @@ Scheme_Object *optimize_for_inline(Optimize_Info *info, Scheme_Object *le, int a
} }
} }
if (scheme_check_leaf_rator(le, _flags)) if (scheme_check_leaf_rator(le))
nonleaf = 0; nonleaf = 0;
if (le && SCHEME_PROCP(le)) { if (le && SCHEME_PROCP(le)) {
@ -3309,12 +3316,12 @@ static Scheme_Object *do_expr_implies_predicate(Scheme_Object *expr, Optimize_In
{ {
/* These tests are slower, so put them at the end */ /* These tests are slower, so put them at the end */
int flags, sub_context = 0; int sub_context = 0;
if (!info) if (!info)
return NULL; return NULL;
if (lookup_constant_proc(info, expr) if (lookup_constant_proc(info, expr)
|| optimize_for_inline(info, expr, 1, NULL, NULL, NULL, &flags, sub_context, 1)){ || optimize_for_inline(info, expr, 1, NULL, NULL, NULL, sub_context, 1)){
return scheme_procedure_p_proc; return scheme_procedure_p_proc;
} }
} }
@ -3327,15 +3334,15 @@ static Scheme_Object *expr_implies_predicate(Scheme_Object *expr, Optimize_Info
return do_expr_implies_predicate(expr, info, NULL, 5, empty_eq_hash_tree); return do_expr_implies_predicate(expr, info, NULL, 5, empty_eq_hash_tree);
} }
static Scheme_Object *finish_optimize_app(Scheme_Object *o, Optimize_Info *info, int context, int rator_flags) static Scheme_Object *finish_optimize_app(Scheme_Object *o, Optimize_Info *info, int context)
{ {
switch(SCHEME_TYPE(o)) { switch(SCHEME_TYPE(o)) {
case scheme_application_type: case scheme_application_type:
return finish_optimize_application((Scheme_App_Rec *)o, info, context, rator_flags); return finish_optimize_application((Scheme_App_Rec *)o, info, context);
case scheme_application2_type: case scheme_application2_type:
return finish_optimize_application2((Scheme_App2_Rec *)o, info, context, rator_flags); return finish_optimize_application2((Scheme_App2_Rec *)o, info, context);
case scheme_application3_type: case scheme_application3_type:
return finish_optimize_application3((Scheme_App3_Rec *)o, info, context, rator_flags); return finish_optimize_application3((Scheme_App3_Rec *)o, info, context);
default: default:
return o; /* may be a constant due to constant-folding */ return o; /* may be a constant due to constant-folding */
} }
@ -3450,7 +3457,7 @@ static Scheme_Object *optimize_application(Scheme_Object *o, Optimize_Info *info
{ {
Scheme_Object *le; Scheme_Object *le;
Scheme_App_Rec *app; Scheme_App_Rec *app;
int i, n, rator_apply_escapes = 0, rator_flags = 0, sub_context = 0; int i, n, rator_apply_escapes = 0, sub_context = 0;
Optimize_Info_Sequence info_seq; Optimize_Info_Sequence info_seq;
app = (Scheme_App_Rec *)o; app = (Scheme_App_Rec *)o;
@ -3476,7 +3483,7 @@ static Scheme_Object *optimize_application(Scheme_Object *o, Optimize_Info *info
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
if (!i) { if (!i) {
le = optimize_for_inline(info, app->args[i], n - 1, app, NULL, NULL, &rator_flags, context, 0); le = optimize_for_inline(info, app->args[i], n - 1, app, NULL, NULL, context, 0);
if (le) if (le)
return le; return le;
} }
@ -3512,7 +3519,7 @@ static Scheme_Object *optimize_application(Scheme_Object *o, Optimize_Info *info
if (!i) { if (!i) {
/* Maybe found "((lambda" after optimizing; try again */ /* Maybe found "((lambda" after optimizing; try again */
le = optimize_for_inline(info, app->args[i], n - 1, app, NULL, NULL, &rator_flags, context, 1); le = optimize_for_inline(info, app->args[i], n - 1, app, NULL, NULL, context, 1);
if (le) if (le)
return le; return le;
if (SAME_OBJ(app->args[0], scheme_values_proc) if (SAME_OBJ(app->args[0], scheme_values_proc)
@ -3526,7 +3533,7 @@ static Scheme_Object *optimize_application(Scheme_Object *o, Optimize_Info *info
/* Check for (apply ... (list ...)) after some optimizations: */ /* Check for (apply ... (list ...)) after some optimizations: */
le = direct_apply((Scheme_Object *)app, app->args[0], app->args[app->num_args], info); le = direct_apply((Scheme_Object *)app, app->args[0], app->args[app->num_args], info);
if (le) return finish_optimize_app(le, info, context, rator_flags); if (le) return finish_optimize_app(le, info, context);
/* Convert (hash-ref '#hash... key (lambda () literal)) /* Convert (hash-ref '#hash... key (lambda () literal))
to (hash-ref '#hash... key literal) */ to (hash-ref '#hash... key literal) */
@ -3544,7 +3551,7 @@ static Scheme_Object *optimize_application(Scheme_Object *o, Optimize_Info *info
SCHEME_APPN_FLAGS(app) |= (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL); SCHEME_APPN_FLAGS(app) |= (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL);
} }
return finish_optimize_application(app, info, context, rator_flags); return finish_optimize_application(app, info, context);
} }
static int appn_flags(Scheme_Object *rator, Optimize_Info *info) static int appn_flags(Scheme_Object *rator, Optimize_Info *info)
@ -3769,11 +3776,11 @@ static void increment_clocks_for_application(Optimize_Info *info,
info->sclock = s; info->sclock = s;
} }
static Scheme_Object *finish_optimize_application(Scheme_App_Rec *app, Optimize_Info *info, int context, int rator_flags) static Scheme_Object *finish_optimize_application(Scheme_App_Rec *app, Optimize_Info *info, int context)
{ {
Scheme_Object *le; Scheme_Object *le;
Scheme_Object *rator = app->args[0]; Scheme_Object *rator = app->args[0];
int all_vals = 1, i, flags; int all_vals = 1, i, flags, rator_flags;
for (i = app->num_args; i--; ) { for (i = app->num_args; i--; ) {
if (SCHEME_TYPE(app->args[i+1]) < _scheme_ir_values_types_) if (SCHEME_TYPE(app->args[i+1]) < _scheme_ir_values_types_)
@ -3797,6 +3804,7 @@ static Scheme_Object *finish_optimize_application(Scheme_App_Rec *app, Optimize_
return scheme_null; return scheme_null;
} }
rator_flags = scheme_get_rator_flags(rator);
info->preserves_marks = !!(rator_flags & LAMBDA_PRESERVES_MARKS); info->preserves_marks = !!(rator_flags & LAMBDA_PRESERVES_MARKS);
info->single_result = !!(rator_flags & LAMBDA_SINGLE_RESULT); info->single_result = !!(rator_flags & LAMBDA_SINGLE_RESULT);
if (rator_flags & LAMBDA_RESULT_TENTATIVE) { if (rator_flags & LAMBDA_RESULT_TENTATIVE) {
@ -3927,11 +3935,10 @@ static Scheme_Object *check_ignored_call_cc(Scheme_Object *rator, Scheme_Object
&& (IS_NAMED_PRIM(rator, "call-with-current-continuation") && (IS_NAMED_PRIM(rator, "call-with-current-continuation")
|| IS_NAMED_PRIM(rator, "call-with-composable-continuation") || IS_NAMED_PRIM(rator, "call-with-composable-continuation")
|| IS_NAMED_PRIM(rator, "call-with-escape-continuation"))) { || IS_NAMED_PRIM(rator, "call-with-escape-continuation"))) {
int rand_flags;
Scheme_Object *proc; Scheme_Object *proc;
proc = lookup_constant_proc(info, rand); proc = lookup_constant_proc(info, rand);
if (!proc) if (!proc)
proc = optimize_for_inline(info, rand, 1, NULL, NULL, NULL, &rand_flags, context, 0); proc = optimize_for_inline(info, rand, 1, NULL, NULL, NULL, context, 0);
if (proc && SAME_TYPE(SCHEME_TYPE(proc), scheme_ir_lambda_type)) { if (proc && SAME_TYPE(SCHEME_TYPE(proc), scheme_ir_lambda_type)) {
Scheme_Lambda *lam = (Scheme_Lambda *)proc; Scheme_Lambda *lam = (Scheme_Lambda *)proc;
@ -3967,9 +3974,7 @@ static Scheme_Object *make_optimize_prim_application2(Scheme_Object *prim, Schem
alt = make_application_2(prim, rand, info); alt = make_application_2(prim, rand, info);
/* scheme_make_application may use constant folding, check that alt is not a constant */ /* scheme_make_application may use constant folding, check that alt is not a constant */
if (SAME_TYPE(SCHEME_TYPE(alt), scheme_application2_type)) { if (SAME_TYPE(SCHEME_TYPE(alt), scheme_application2_type)) {
int rator_flags = 0; return finish_optimize_application2((Scheme_App2_Rec *)alt, info, context);
scheme_check_leaf_rator(prim, &rator_flags);
return finish_optimize_application2((Scheme_App2_Rec *)alt, info, context, rator_flags);
} else } else
return alt; return alt;
} }
@ -3979,7 +3984,7 @@ static Scheme_Object *optimize_application2(Scheme_Object *o, Optimize_Info *inf
{ {
Scheme_App2_Rec *app; Scheme_App2_Rec *app;
Scheme_Object *le; Scheme_Object *le;
int rator_flags = 0, rator_apply_escapes, sub_context, ty; int rator_apply_escapes, sub_context, ty;
Optimize_Info_Sequence info_seq; Optimize_Info_Sequence info_seq;
app = (Scheme_App2_Rec *)o; app = (Scheme_App2_Rec *)o;
@ -3992,7 +3997,7 @@ static Scheme_Object *optimize_application2(Scheme_Object *o, Optimize_Info *inf
if (le) if (le)
return le; return le;
le = optimize_for_inline(info, app->rator, 1, NULL, app, NULL, &rator_flags, context, 0); le = optimize_for_inline(info, app->rator, 1, NULL, app, NULL, context, 0);
if (le) if (le)
return le; return le;
@ -4009,7 +4014,7 @@ static Scheme_Object *optimize_application2(Scheme_Object *o, Optimize_Info *inf
{ {
/* Maybe found "((lambda" after optimizing; try again */ /* Maybe found "((lambda" after optimizing; try again */
le = optimize_for_inline(info, app->rator, 1, NULL, app, NULL, &rator_flags, context, 1); le = optimize_for_inline(info, app->rator, 1, NULL, app, NULL, context, 1);
if (le) if (le)
return le; return le;
rator_apply_escapes = info->escapes; rator_apply_escapes = info->escapes;
@ -4038,12 +4043,12 @@ static Scheme_Object *optimize_application2(Scheme_Object *o, Optimize_Info *inf
SCHEME_APPN_FLAGS(app) |= (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL); SCHEME_APPN_FLAGS(app) |= (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL);
} }
return finish_optimize_application2(app, info, context, rator_flags); return finish_optimize_application2(app, info, context);
} }
static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimize_Info *info, int context, int rator_flags) static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimize_Info *info, int context)
{ {
int flags; int flags, rator_flags;
Scheme_Object *rator = app->rator; Scheme_Object *rator = app->rator;
Scheme_Object *rand, *inside = NULL, *alt; Scheme_Object *rand, *inside = NULL, *alt;
@ -4072,6 +4077,7 @@ static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimiz
increment_clocks_for_application(info, rator, 1); increment_clocks_for_application(info, rator, 1);
rator_flags = scheme_get_rator_flags(rator);
info->preserves_marks = !!(rator_flags & LAMBDA_PRESERVES_MARKS); info->preserves_marks = !!(rator_flags & LAMBDA_PRESERVES_MARKS);
info->single_result = !!(rator_flags & LAMBDA_SINGLE_RESULT); info->single_result = !!(rator_flags & LAMBDA_SINGLE_RESULT);
if (rator_flags & LAMBDA_RESULT_TENTATIVE) { if (rator_flags & LAMBDA_RESULT_TENTATIVE) {
@ -4242,8 +4248,7 @@ static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimiz
if (pred && SAME_OBJ(pred, scheme_fixnum_p_proc)) { if (pred && SAME_OBJ(pred, scheme_fixnum_p_proc)) {
new = (Scheme_App3_Rec *)make_application_3(scheme_unsafe_fx_eq_proc, app->rand, scheme_make_integer(0), info); new = (Scheme_App3_Rec *)make_application_3(scheme_unsafe_fx_eq_proc, app->rand, scheme_make_integer(0), info);
SCHEME_APPN_FLAGS(new) |= (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL); SCHEME_APPN_FLAGS(new) |= (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL);
scheme_check_leaf_rator(scheme_unsafe_fx_eq_proc, &rator_flags); return finish_optimize_application3(new, info, context);
return finish_optimize_application3(new, info, context, rator_flags);
} }
} }
@ -4338,8 +4343,7 @@ static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimiz
scheme_make_integer(SCHEME_PROC_SHAPE_MODE(alt) >> STRUCT_PROC_SHAPE_SHIFT), scheme_make_integer(SCHEME_PROC_SHAPE_MODE(alt) >> STRUCT_PROC_SHAPE_SHIFT),
info); info);
SCHEME_APPN_FLAGS(new) |= (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL); SCHEME_APPN_FLAGS(new) |= (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL);
scheme_check_leaf_rator(scheme_unsafe_struct_ref_proc, &rator_flags); return finish_optimize_application3(new, info, context);
return finish_optimize_application3(new, info, context, rator_flags);
} }
} }
@ -4364,7 +4368,7 @@ static Scheme_Object *optimize_application3(Scheme_Object *o, Optimize_Info *inf
{ {
Scheme_App3_Rec *app; Scheme_App3_Rec *app;
Scheme_Object *le; Scheme_Object *le;
int rator_flags = 0, rator_apply_escapes, sub_context, ty, flags; int rator_apply_escapes, sub_context, ty, flags;
Optimize_Info_Sequence info_seq; Optimize_Info_Sequence info_seq;
app = (Scheme_App3_Rec *)o; app = (Scheme_App3_Rec *)o;
@ -4392,7 +4396,7 @@ static Scheme_Object *optimize_application3(Scheme_Object *o, Optimize_Info *inf
if (le) if (le)
return le; return le;
le = optimize_for_inline(info, app->rator, 2, NULL, NULL, app, &rator_flags, context, 0); le = optimize_for_inline(info, app->rator, 2, NULL, NULL, app, context, 0);
if (le) if (le)
return le; return le;
@ -4409,7 +4413,7 @@ static Scheme_Object *optimize_application3(Scheme_Object *o, Optimize_Info *inf
{ {
/* Maybe found "((lambda" after optimizing; try again */ /* Maybe found "((lambda" after optimizing; try again */
le = optimize_for_inline(info, app->rator, 2, NULL, NULL, app, &rator_flags, context, 1); le = optimize_for_inline(info, app->rator, 2, NULL, NULL, app, context, 1);
if (le) if (le)
return le; return le;
rator_apply_escapes = info->escapes; rator_apply_escapes = info->escapes;
@ -4457,7 +4461,7 @@ static Scheme_Object *optimize_application3(Scheme_Object *o, Optimize_Info *inf
/* Check for (apply ... (list ...)) after some optimizations: */ /* Check for (apply ... (list ...)) after some optimizations: */
le = direct_apply((Scheme_Object *)app, app->rator, app->rand2, info); le = direct_apply((Scheme_Object *)app, app->rator, app->rand2, info);
if (le) return finish_optimize_app(le, info, context, rator_flags); if (le) return finish_optimize_app(le, info, context);
flags = appn_flags(app->rator, info); flags = appn_flags(app->rator, info);
SCHEME_APPN_FLAGS(app) |= flags; SCHEME_APPN_FLAGS(app) |= flags;
@ -4467,12 +4471,12 @@ static Scheme_Object *optimize_application3(Scheme_Object *o, Optimize_Info *inf
SCHEME_APPN_FLAGS(app) |= (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL); SCHEME_APPN_FLAGS(app) |= (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL);
} }
return finish_optimize_application3(app, info, context, rator_flags); return finish_optimize_application3(app, info, context);
} }
static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimize_Info *info, int context, int rator_flags) static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimize_Info *info, int context)
{ {
int flags; int flags, rator_flags;
Scheme_Object *le; Scheme_Object *le;
int all_vals = 1; int all_vals = 1;
@ -4608,7 +4612,6 @@ static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimiz
if (pred_new) { if (pred_new) {
app->rator = pred_new; app->rator = pred_new;
SCHEME_APPN_FLAGS(app) |= (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL); SCHEME_APPN_FLAGS(app) |= (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL);
scheme_check_leaf_rator(pred_new, &rator_flags);
/* eq? and eqv? are foldable */ /* eq? and eqv? are foldable */
if (all_vals) { if (all_vals) {
@ -4620,6 +4623,7 @@ static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimiz
} }
} }
rator_flags = scheme_get_rator_flags(app->rator);
info->preserves_marks = !!(rator_flags & LAMBDA_PRESERVES_MARKS); info->preserves_marks = !!(rator_flags & LAMBDA_PRESERVES_MARKS);
info->single_result = !!(rator_flags & LAMBDA_SINGLE_RESULT); info->single_result = !!(rator_flags & LAMBDA_SINGLE_RESULT);
if (rator_flags & LAMBDA_RESULT_TENTATIVE) { if (rator_flags & LAMBDA_RESULT_TENTATIVE) {
@ -4838,11 +4842,10 @@ Scheme_Object *scheme_optimize_apply_values(Scheme_Object *f, Scheme_Object *e,
Scheme_Object *rev = f; Scheme_Object *rev = f;
if (rev) { if (rev) {
int rator2_flags;
Scheme_Object *o_f; Scheme_Object *o_f;
o_f = lookup_constant_proc(info, rev); o_f = lookup_constant_proc(info, rev);
if (!o_f) if (!o_f)
o_f = optimize_for_inline(info, rev, 1, NULL, NULL, NULL, &rator2_flags, context, 0); o_f = optimize_for_inline(info, rev, 1, NULL, NULL, NULL, context, 0);
if (o_f) { if (o_f) {
f_is_proc = rev; f_is_proc = rev;

View File

@ -3117,7 +3117,7 @@ static Scheme_Object *unresolve_lambda(Scheme_Lambda *rlam, Unresolve_Info *ui)
static void check_nonleaf_rator(Scheme_Object *rator, Unresolve_Info *ui) static void check_nonleaf_rator(Scheme_Object *rator, Unresolve_Info *ui)
{ {
if (!scheme_check_leaf_rator(rator, NULL)) if (!scheme_check_leaf_rator(rator))
ui->has_non_leaf = 1; ui->has_non_leaf = 1;
} }

View File

@ -3310,7 +3310,7 @@ Scheme_Object *scheme_unresolve(Scheme_Object *, int argv, int *_has_cases,
Scheme_Object *from_modidx, Scheme_Object *to_modidx); Scheme_Object *from_modidx, Scheme_Object *to_modidx);
Scheme_Object *scheme_unresolve_top(Scheme_Object *, Comp_Prefix **, int comp_flags); Scheme_Object *scheme_unresolve_top(Scheme_Object *, Comp_Prefix **, int comp_flags);
int scheme_check_leaf_rator(Scheme_Object *le, int *_flags); int scheme_check_leaf_rator(Scheme_Object *le);
int scheme_is_ir_lambda(Scheme_Object *o, int can_be_closed, int can_be_liftable); int scheme_is_ir_lambda(Scheme_Object *o, int can_be_closed, int can_be_liftable);