From 6314b4c27a14576b356258dad74607168135cb51 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sun, 3 Aug 2008 12:43:20 -0400 Subject: Compiled pattern matching to C --- src/explify.sml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/explify.sml') diff --git a/src/explify.sml b/src/explify.sml index 7c23c2f5..90737f07 100644 --- a/src/explify.sml +++ b/src/explify.sml @@ -79,10 +79,10 @@ fun explifyPatCon pc = fun explifyPat (p, loc) = case p of L.PWild => (L'.PWild, loc) - | L.PVar x => (L'.PVar x, loc) + | L.PVar (x, t) => (L'.PVar (x, explifyCon t), 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) + | L.PRecord xps => (L'.PRecord (map (fn (x, p, t) => (x, explifyPat p, explifyCon t)) xps), loc) fun explifyExp (e, loc) = case e of @@ -102,9 +102,10 @@ fun explifyExp (e, loc) = {field = explifyCon field, rest = explifyCon rest}), loc) | L.EFold k => (L'.EFold (explifyKind k), loc) - | L.ECase (e, pes, t) => (L'.ECase (explifyExp e, - map (fn (p, e) => (explifyPat p, explifyExp e)) pes, - explifyCon t), loc) + | L.ECase (e, pes, {disc, result}) => + (L'.ECase (explifyExp e, + map (fn (p, e) => (explifyPat p, explifyExp e)) pes, + {disc = explifyCon disc, result = explifyCon result}), loc) | L.EError => raise Fail ("explifyExp: EError at " ^ EM.spanToString loc) -- cgit v1.2.3