diff src/corify.sml @ 813:7b380e2b9e68

Corify FFI datatypes properly; eliminate nested JavaScript markers
author Adam Chlipala <adamc@hcoop.net>
date Sun, 17 May 2009 13:25:57 -0400
parents 61a1f5c5ae2c
children e46227efcbba
line wrap: on
line diff
--- a/src/corify.sml	Sat May 16 18:09:14 2009 -0400
+++ b/src/corify.sml	Sun May 17 13:25:57 2009 -0400
@@ -824,6 +824,9 @@
                                            ListUtil.foldlMap
                                                (fn ((x, n, xs, xnts), (ds', st, cmap, conmap)) =>
                                                    let
+                                                       val k' = foldl (fn (_, k') => (L'.KArrow (k, k'), loc))
+                                                                      k xs
+
                                                        val dk = ElabUtil.classifyDatatype xnts
                                                        val (st, n') = St.bindCon st x n
                                                        val (xnts, (ds', st, cmap, conmap)) =
@@ -885,12 +888,14 @@
                                                                        ((x', n, to),
                                                                         (d :: ds', st, cmap, conmap))
                                                                    end) (ds', st, cmap, conmap) xnts
+
+                                                       val d = (L'.DCon (x, n', k', (L'.CFfi (m, x), loc)), loc)
                                                    in
-                                                       ((x, n', xs, xnts), (ds', st, cmap, conmap))
+                                                       ((x, n', xs, xnts), (d :: ds', st, cmap, conmap))
                                                    end)
                                            ([], st, cmap, conmap) dts
                                    in
-                                       (ds' @ (L'.DDatatype dts, loc) :: ds,
+                                       (List.revAppend (ds', ds),
                                         cmap,
                                         conmap,
                                         st,