From 76a84dd3fb97b56605292c4f0eab2febe3c6a7ed Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Thu, 31 Dec 2009 18:07:53 -0500 Subject: Eta-expand bodies of transaction functions in Monoization, to enable later optimization --- src/mono_reduce.sml | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) (limited to 'src/mono_reduce.sml') diff --git a/src/mono_reduce.sml b/src/mono_reduce.sml index aa6b7051..16cfd9f9 100644 --- a/src/mono_reduce.sml +++ b/src/mono_reduce.sml @@ -582,23 +582,22 @@ fun reduce file = fun push () = case result of (TFun (dom, result), loc) => - if List.all (fn (_, (EAbs _, _)) => true | _ => false) pes then - let - val r = - EAbs ("y", dom, result, - (ECase (liftExpInExp 0 e', - map (fn (p, (EAbs (_, _, _, e), _)) => - (p, swapExpVarsPat (0, patBinds p) e) - | _ => raise Fail "MonoReduce ECase") pes, - {disc = disc, result = result}), loc)) - in - (*Print.prefaces "Swapped" - [("e", MonoPrint.p_exp env (e, ErrorMsg.dummySpan)), - ("r", MonoPrint.p_exp env (r, ErrorMsg.dummySpan))];*) - r - end - else - e + let + fun safe (e, _) = + case e of + EAbs _ => true + | _ => false + in + if List.all (safe o #2) pes then + EAbs ("y", dom, result, + (ECase (liftExpInExp 0 e', + map (fn (p, (EAbs (_, _, _, e), _)) => + (p, swapExpVarsPat (0, patBinds p) e) + | _ => raise Fail "MonoReduce ECase") pes, + {disc = disc, result = result}), loc)) + else + e + end | _ => e fun search pes = -- cgit v1.2.3