diff src/core_util.sml @ 705:e6706a1df013

Track uniqueness sets in table types
author Adam Chlipala <adamc@hcoop.net>
date Tue, 07 Apr 2009 14:11:32 -0400
parents 70cbdcf5989b
children d8217b4cb617
line wrap: on
line diff
--- a/src/core_util.sml	Tue Apr 07 12:24:31 2009 -0400
+++ b/src/core_util.sml	Tue Apr 07 14:11:32 2009 -0400
@@ -933,12 +933,14 @@
                             (DValRec vis', loc))
                 end
               | DExport _ => S.return2 dAll
-              | DTable (x, n, c, s, e) =>
+              | DTable (x, n, c, s, e, cc) =>
                 S.bind2 (mfc ctx c,
                      fn c' =>
-                        S.map2 (mfe ctx e,
+                        S.bind2 (mfe ctx e,
                                 fn e' =>
-                                   (DTable (x, n, c', s, e'), loc)))
+                                   S.map2 (mfc ctx cc,
+                                           fn cc' =>
+                                              (DTable (x, n, c', s, e', cc'), loc))))
               | DSequence _ => S.return2 dAll
               | DDatabase _ => S.return2 dAll
               | DCookie (x, n, c, s) =>
@@ -1060,11 +1062,14 @@
                                         foldl (fn ((x, n, t, e, s), ctx) => bind (ctx, NamedE (x, n, t, NONE, s)))
                                         ctx vis
                                       | DExport _ => ctx
-                                      | DTable (x, n, c, s, _) =>
+                                      | DTable (x, n, c, s, _, cc) =>
                                         let
-                                            val t = (CApp ((CFfi ("Basis", "sql_table"), #2 d'), c), #2 d')
+                                            val loc = #2 d'
+                                            val ct = (CFfi ("Basis", "sql_table"), loc)
+                                            val ct = (CApp (ct, c), loc)
+                                            val ct = (CApp (ct, cc), loc)
                                         in
-                                            bind (ctx, NamedE (x, n, t, NONE, s))
+                                            bind (ctx, NamedE (x, n, ct, NONE, s))
                                         end
                                       | DSequence (x, n, s) =>
                                         let
@@ -1136,7 +1141,7 @@
                           | DVal (_, n, _, _, _) => Int.max (n, count)
                           | DValRec vis => foldl (fn ((_, n, _, _, _), count) => Int.max (n, count)) count vis
                           | DExport _ => count
-                          | DTable (_, n, _, _, _) => Int.max (n, count)
+                          | DTable (_, n, _, _, _, _) => Int.max (n, count)
                           | DSequence (_, n, _) => Int.max (n, count)
                           | DDatabase _ => count
                           | DCookie (_, n, _, _) => Int.max (n, count)) 0