aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/specialize.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-06-13 14:29:36 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-06-13 14:29:36 -0400
commitba3e01e524907d85f5cba6af62083fcdee606f33 (patch)
tree1f400f83f20ef1f54d68e1e7b674a08f29abb4d4 /src/specialize.sml
parentb7de8e9ac590f9d06df72d22489375b33a6efef9 (diff)
<dyn> inside <table>; fix Specialize bug with datatype decls generating other mutually-recursive datatype decls
Diffstat (limited to 'src/specialize.sml')
-rw-r--r--src/specialize.sml14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/specialize.sml b/src/specialize.sml
index b740ec8c..43c634c7 100644
--- a/src/specialize.sml
+++ b/src/specialize.sml
@@ -246,15 +246,12 @@ fun specialize file =
let
(*val () = Print.preface ("decl:", CorePrint.p_decl CoreEnv.empty all)*)
val (d, st) = specDecl st d
-
- val ds =
- case #decls st of
- [] => []
- | dts => [(DDatatype dts, #2 d)]
in
case #1 d of
DDatatype dts =>
- (rev (d :: ds),
+ ((case #decls st of
+ [] => [d]
+ | dts' => [(DDatatype (dts' @ dts), #2 d)]),
{count = #count st,
datatypes = foldl (fn ((x, n, xs, xnts), dts) =>
IM.insert (dts, n,
@@ -270,7 +267,9 @@ fun specialize file =
(#constructors st) dts,
decls = []})
| _ =>
- (rev (d :: ds),
+ (case #decls st of
+ [] => [d]
+ | dts => [(DDatatype dts, #2 d), d],
{count = #count st,
datatypes = #datatypes st,
constructors = #constructors st,
@@ -286,5 +285,4 @@ fun specialize file =
ds
end
-
end