aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/specialize.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-05-12 18:02:25 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-05-12 18:02:25 -0400
commitb0eb28d7ea4eb75efce79ab7493b9e21842b80b4 (patch)
tree08ac30126986a5abd323a46c7eff436b1ac28c9f /src/specialize.sml
parentdd6e7d3895ffed07869aa8ec6a51abaf9c602ca9 (diff)
Improvements while working on Graftid
Diffstat (limited to 'src/specialize.sml')
-rw-r--r--src/specialize.sml40
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