diff options
author | Adam Chlipala <adamc@hcoop.net> | 2009-05-12 18:02:25 -0400 |
---|---|---|
committer | Adam Chlipala <adamc@hcoop.net> | 2009-05-12 18:02:25 -0400 |
commit | b0eb28d7ea4eb75efce79ab7493b9e21842b80b4 (patch) | |
tree | 08ac30126986a5abd323a46c7eff436b1ac28c9f /src/specialize.sml | |
parent | dd6e7d3895ffed07869aa8ec6a51abaf9c602ca9 (diff) |
Improvements while working on Graftid
Diffstat (limited to 'src/specialize.sml')
-rw-r--r-- | src/specialize.sml | 40 |
1 files changed, 19 insertions, 21 deletions
diff --git a/src/specialize.sml b/src/specialize.sml index ddaff92e..03c9004a 100644 --- a/src/specialize.sml +++ b/src/specialize.sml @@ -242,32 +242,30 @@ val specDecl = U.Decl.foldMap {kind = kind, con = con, exp = exp, decl = decl} fun specialize file = let - fun doDecl (all as (d, _), st : state) = + fun doDecl (d, st) = let (*val () = Print.preface ("decl:", CorePrint.p_decl CoreEnv.empty all)*) + val (d, st) = specDecl st d in - case d of + case #1 d of DDatatype (x, n, xs, xnts) => - ([all], {count = #count st, - datatypes = IM.insert (#datatypes st, n, - {name = x, - params = length xs, - constructors = xnts, - specializations = CM.empty}), - constructors = foldl (fn ((_, n', _), constructors) => - IM.insert (constructors, n', n)) - (#constructors st) xnts, - decls = []}) + (rev (d :: #decls st), + {count = #count st, + datatypes = IM.insert (#datatypes st, n, + {name = x, + params = length xs, + constructors = xnts, + specializations = CM.empty}), + constructors = foldl (fn ((_, n', _), constructors) => + IM.insert (constructors, n', n)) + (#constructors st) xnts, + decls = []}) | _ => - let - val (d, st) = specDecl st all - in - (rev (d :: #decls st), - {count = #count st, - datatypes = #datatypes st, - constructors = #constructors st, - decls = []}) - end + (rev (d :: #decls st), + {count = #count st, + datatypes = #datatypes st, + constructors = #constructors st, + decls = []}) end val (ds, _) = ListUtil.foldlMapConcat doDecl |