From 16d3d1c3a6d1e78faab91076c20b76fdcb90edb9 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Thu, 31 Jul 2008 16:28:55 -0400 Subject: Case through explify --- src/explify.sml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src/explify.sml') diff --git a/src/explify.sml b/src/explify.sml index da94ba94..7c23c2f5 100644 --- a/src/explify.sml +++ b/src/explify.sml @@ -71,6 +71,19 @@ fun explifyCon (c, loc) = | L.CUnif (_, _, _, ref (SOME c)) => explifyCon c | L.CUnif _ => raise Fail ("explifyCon: CUnif at " ^ EM.spanToString loc) +fun explifyPatCon pc = + case pc of + L.PConVar n => L'.PConVar n + | L.PConProj x => L'.PConProj x + +fun explifyPat (p, loc) = + case p of + L.PWild => (L'.PWild, loc) + | L.PVar x => (L'.PVar x, loc) + | L.PPrim p => (L'.PPrim p, loc) + | L.PCon (pc, po) => (L'.PCon (explifyPatCon pc, Option.map explifyPat po), loc) + | L.PRecord xps => (L'.PRecord (map (fn (x, p) => (x, explifyPat p)) xps), loc) + fun explifyExp (e, loc) = case e of L.EPrim p => (L'.EPrim p, loc) @@ -89,7 +102,9 @@ fun explifyExp (e, loc) = {field = explifyCon field, rest = explifyCon rest}), loc) | L.EFold k => (L'.EFold (explifyKind k), loc) - | L.ECase _ => raise Fail "Explify ECase" + | L.ECase (e, pes, t) => (L'.ECase (explifyExp e, + map (fn (p, e) => (explifyPat p, explifyExp e)) pes, + explifyCon t), loc) | L.EError => raise Fail ("explifyExp: EError at " ^ EM.spanToString loc) -- cgit v1.2.3