From 6d3481a9276dc795e9d8ccb450ab9bad57429316 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 3 Jul 2009 03:09:46 +0000 Subject: [PATCH] avoid some unneeded sfs-clears in bytecode svn: r15367 --- src/mzscheme/src/eval.c | 5 +++-- src/mzscheme/src/list.c | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index 3dfb6d0e97..ae28334044 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -4142,14 +4142,15 @@ static Scheme_Object *sfs_let_one(Scheme_Object *o, SFS_Info *info) info->max_nontail = save_mnt; if (info->max_used[pos] <= ip) { - /* No one is using it, so either don't push the real value, or clear it. + /* No one is using it, so either don't push the real value, or + clear it if there's a later non-tail call. The optimizer normally would have converted away the binding, but it might not because (1) it was introduced late by inlining, or (2) the rhs expression doesn't always produce a single value. */ if (scheme_omittable_expr(rhs, 1, -1, 1, NULL)) { rhs = scheme_false; - } else { + } else if (ip < info->max_calls[pos]) { Scheme_Object *clr; Scheme_Sequence *s; s = malloc_sequence(2); diff --git a/src/mzscheme/src/list.c b/src/mzscheme/src/list.c index 4a4678781c..634c1cf545 100644 --- a/src/mzscheme/src/list.c +++ b/src/mzscheme/src/list.c @@ -160,7 +160,7 @@ scheme_init_list (Scheme_Env *env) scheme_add_global_constant ("mpair?", p, env); REGISTER_SO(scheme_cons_proc); - p = scheme_make_noncm_prim(cons_prim, "cons", 2, 2); + p = scheme_make_immed_prim(cons_prim, "cons", 2, 2); scheme_cons_proc = p; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; scheme_add_global_constant ("cons", p, env); @@ -174,7 +174,7 @@ scheme_init_list (Scheme_Env *env) scheme_add_global_constant ("cdr", p, env); REGISTER_SO(scheme_mcons_proc); - p = scheme_make_noncm_prim(mcons_prim, "mcons", 2, 2); + p = scheme_make_immed_prim(mcons_prim, "mcons", 2, 2); scheme_mcons_proc = p; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; scheme_add_global_constant ("mcons", p, env);