summaryrefslogtreecommitdiff
path: root/src/explify.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-05-28 12:07:05 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-05-28 12:07:05 -0400
commita735f6ea0ef8ec5895dfe7f895f89ee8c126de14 (patch)
tree702dbe43701e15a37f7811983aad78e069812704 /src/explify.sml
parent43cd4231dea11d2cbb0151f144e4a98c618df396 (diff)
Destructing local let, to the point where demo compiles
Diffstat (limited to 'src/explify.sml')
-rw-r--r--src/explify.sml7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/explify.sml b/src/explify.sml
index d8bd6bff..3ec588fa 100644
--- a/src/explify.sml
+++ b/src/explify.sml
@@ -123,11 +123,14 @@ fun explifyExp (e, loc) =
| L.EUnif (ref (SOME e)) => explifyExp e
| L.EUnif _ => raise Fail ("explifyExp: Undetermined EUnif at " ^ EM.spanToString loc)
- | L.ELet (des, e) =>
+ | L.ELet (des, e, t) =>
foldr (fn ((de, loc), e) =>
case de of
L.EDValRec _ => raise Fail "explifyExp: Local 'val rec' remains"
- | L.EDVal (x, t, e') => (L'.ELet (x, explifyCon t, explifyExp e', e), loc))
+ | L.EDVal ((L.PVar (x, _), _), t', e') => (L'.ELet (x, explifyCon t', explifyExp e', e), loc)
+ | L.EDVal (p, t', e') => (L'.ECase (explifyExp e',
+ [(explifyPat p, e)],
+ {disc = explifyCon t', result = explifyCon t}), loc))
(explifyExp e) des
| L.EKAbs (x, e) => (L'.EKAbs (x, explifyExp e), loc)