From 7e6dc9b40e96929689daaeb0c8ac54da9985afe4 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 23 Mar 2009 13:17:46 +0000 Subject: [PATCH] optimize (if (if #t #f) ) to (if #t #f); this pattern happens with 'and' and constant folding svn: r14230 --- src/mzscheme/src/eval.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index 0e379b0ddd..cc22486294 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -2902,6 +2902,16 @@ static Scheme_Object *optimize_branch(Scheme_Object *o, Optimize_Info *info) } else t = scheme_optimize_expr(t, info); + /* For test position, convert (if #t #f) to */ + while (1) { + if (SAME_TYPE(SCHEME_TYPE(t), scheme_branch_type) + && SAME_OBJ(((Scheme_Branch_Rec *)t)->tbranch, scheme_true) + && SAME_OBJ(((Scheme_Branch_Rec *)t)->fbranch, scheme_false)) + t = ((Scheme_Branch_Rec *)t)->test; + else + break; + } + if (SCHEME_TYPE(t) > _scheme_compiled_values_types_) { if (SCHEME_FALSEP(t)) return scheme_optimize_expr(fb, info);