From 274fa978cf7f76dfb48f1243c30be8f7ae0e7de5 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 5 Jan 2006 17:37:17 +0000 Subject: [PATCH] (if (not (not X)) Y Z) compiles as (if X Y Z), etc. svn: r1770 --- src/mzscheme/src/eval.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index 9e4a8949da..7af739feca 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -1034,16 +1034,20 @@ static Scheme_Object *resolve_branch(Scheme_Object *o, Resolve_Info *info) /* Done here because `not' is easily recognized at this point, and we haven't yet resolved Scheme-stack locations so it's ok to remove an application. */ - if (SAME_TYPE(SCHEME_TYPE(t), scheme_application2_type)) { - Scheme_App2_Rec *app; - - app = (Scheme_App2_Rec *)t; - if (SAME_PTR(scheme_not_prim, app->rator)) { - t = tb; - tb = fb; - fb = t; - t = app->rand; - } + while (1) { + if (SAME_TYPE(SCHEME_TYPE(t), scheme_application2_type)) { + Scheme_App2_Rec *app; + + app = (Scheme_App2_Rec *)t; + if (SAME_PTR(scheme_not_prim, app->rator)) { + t = tb; + tb = fb; + fb = t; + t = app->rand; + } else + break; + } else + break; } t = scheme_resolve_expr(t, info);