diff src/specialize.sml @ 792:d20d6afc1206

Improvements while working on Graftid
author Adam Chlipala <adamc@hcoop.net>
date Tue, 12 May 2009 18:02:25 -0400
parents e21d0dddda09
children 61a1f5c5ae2c
line wrap: on
line diff
--- a/src/specialize.sml	Sun May 10 10:13:41 2009 -0400
+++ b/src/specialize.sml	Tue May 12 18:02:25 2009 -0400
@@ -242,32 +242,30 @@
 
 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