summaryrefslogtreecommitdiff
path: root/src/mono_reduce.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-11-06 11:29:16 -0500
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-11-06 11:29:16 -0500
commitbfad3d26b4471c93b92d41c894e25919fd7bf953 (patch)
tree05a8c82978b8d58211cd4b05357cccecd0dd9fb7 /src/mono_reduce.sml
parent59e90f80efd94c738df349da7d473da9a8a7e81a (diff)
Setting a cookie
Diffstat (limited to 'src/mono_reduce.sml')
-rw-r--r--src/mono_reduce.sml12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/mono_reduce.sml b/src/mono_reduce.sml
index 57a9cc6d..7420f14f 100644
--- a/src/mono_reduce.sml
+++ b/src/mono_reduce.sml
@@ -50,6 +50,7 @@ fun impure (e, _) =
| ENone _ => false
| ESome (_, e) => impure e
| EFfi _ => false
+ | EFfiApp ("Basis", "set_cookie", _) => true
| EFfiApp _ => false
| EApp ((EFfi _, _), _) => false
| EApp _ => true
@@ -231,6 +232,7 @@ fun summarize d (e, _) =
| ENone _ => []
| ESome (_, e) => summarize d e
| EFfi _ => []
+ | EFfiApp ("Basis", "set_cookie", _) => [Unsure]
| EFfiApp (_, _, es) => List.concat (map (summarize d) es)
| EApp ((EFfi _, _), e) => summarize d e
| EApp _ => [Unsure]
@@ -347,12 +349,16 @@ fun exp env e =
#1 (reduceExp env (ELet (x, t, e,
(EApp (b, liftExpInExp 0 e'), loc)), loc))
- | ELet (x, t, e, (EAbs (x', t' as (TRecord [], _), ran, e'), loc)) =>
- EAbs (x', t', ran, (ELet (x, t, liftExpInExp 0 e, swapExpVars 0 e'), loc))
+ | ELet (x, t, e', (EAbs (x', t' as (TRecord [], _), ran, e''), loc)) =>
+ if impure e' then
+ e
+ else
+ EAbs (x', t', ran, (ELet (x, t, liftExpInExp 0 e', swapExpVars 0 e''), loc))
| ELet (x, t, e', b) =>
let
- fun doSub () = #1 (reduceExp env (subExpInExp (0, e') b))
+ fun doSub () =
+ #1 (reduceExp env (subExpInExp (0, e') b))
fun trySub () =
case t of