Mercurial > urweb
changeset 1854:bddd0ec5d3da
Tweak to 'let' inlining behavior
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Sun, 02 Jun 2013 10:17:52 -0400 (2013-06-02) |
parents | f405dfe1f1e1 |
children | 0480b8f29a47 |
files | src/mono_reduce.sml |
diffstat | 1 files changed, 9 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/mono_reduce.sml Sun Apr 21 13:32:10 2013 -0400 +++ b/src/mono_reduce.sml Sun Jun 02 10:17:52 2013 -0400 @@ -564,16 +564,19 @@ #1 (reduceExp env r) end - fun trySub () = + fun trySub pure = ((*Print.prefaces "trySub" [("e", MonoPrint.p_exp env (e, ErrorMsg.dummySpan))];*) case t of (TFfi ("Basis", "string"), _) => doSub () | (TSignal _, _) => e | _ => - case e' of - (ECase _, _) => e - | _ => doSub ()) + if pure then + doSub () + else + case e' of + (ECase _, _) => e + | _ => doSub ()) in if impure env e' then let @@ -628,14 +631,14 @@ | _ => false)) andalso countFree 0 0 b = 1 andalso not (freeInAbs b) then - trySub () + trySub (List.null effs_e') else e end else if countFree 0 0 b > 1 andalso not (!fullMode) andalso not (passive e') then e else - trySub () + trySub true end val r =