Mercurial > urweb
diff src/cjrize.sml @ 188:8e9f97508f0d
Datatype representation optimization
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Sun, 03 Aug 2008 19:49:21 -0400 |
parents | 88d46972de53 |
children | 890a61991263 |
line wrap: on
line diff
--- a/src/cjrize.sml Sun Aug 03 19:01:16 2008 -0400 +++ b/src/cjrize.sml Sun Aug 03 19:49:21 2008 -0400 @@ -84,7 +84,7 @@ in ((L'.TRecord si, loc), sm) end - | L.TDatatype (n, xncs) => + | L.TDatatype (dk, n, xncs) => let val (xncs, sm) = ListUtil.foldlMap (fn ((x, n, to), sm) => case to of @@ -97,7 +97,7 @@ end) sm xncs in - ((L'.TDatatype (n, xncs), loc), sm) + ((L'.TDatatype (dk, n, xncs), loc), sm) end | L.TFfi mx => ((L'.TFfi mx, loc), sm) @@ -131,18 +131,18 @@ ((L'.PVar (x, t), loc), sm) end | L.PPrim p => ((L'.PPrim p, loc), sm) - | L.PCon (pc, NONE) => + | L.PCon (dk, pc, NONE) => let val (pc, sm) = cifyPatCon (pc, sm) in - ((L'.PCon (pc, NONE), loc), sm) + ((L'.PCon (dk, pc, NONE), loc), sm) end - | L.PCon (pc, SOME p) => + | L.PCon (dk, pc, SOME p) => let val (pc, sm) = cifyPatCon (pc, sm) val (p, sm) = cifyPat (p, sm) in - ((L'.PCon (pc, SOME p), loc), sm) + ((L'.PCon (dk, pc, SOME p), loc), sm) end | L.PRecord xps => let @@ -162,7 +162,7 @@ L.EPrim p => ((L'.EPrim p, loc), sm) | L.ERel n => ((L'.ERel n, loc), sm) | L.ENamed n => ((L'.ENamed n, loc), sm) - | L.ECon (pc, eo) => + | L.ECon (dk, pc, eo) => let val (eo, sm) = case eo of @@ -175,7 +175,7 @@ end val (pc, sm) = cifyPatCon (pc, sm) in - ((L'.ECon (pc, eo), loc), sm) + ((L'.ECon (dk, pc, eo), loc), sm) end | L.EFfi mx => ((L'.EFfi mx, loc), sm) | L.EFfiApp (m, x, es) => @@ -268,6 +268,7 @@ case d of L.DDatatype (x, n, xncs) => let + val dk = MonoUtil.classifyDatatype xncs val (xncs, sm) = ListUtil.foldlMap (fn ((x, n, to), sm) => case to of NONE => ((x, n, NONE), sm) @@ -278,7 +279,7 @@ ((x, n, SOME t), sm) end) sm xncs in - (SOME (L'.DDatatype (x, n, xncs), loc), NONE, sm) + (SOME (L'.DDatatype (dk, x, n, xncs), loc), NONE, sm) end | L.DVal (x, n, t, e, _) =>