summaryrefslogtreecommitdiff
path: root/src/elab_util.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-04-07 14:11:32 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-04-07 14:11:32 -0400
commitfd1a963a81327f7b6a20a0f2ac131d2525649400 (patch)
tree053aee5bbd985b79f0d1901bc4fb72a44d48c4aa /src/elab_util.sml
parente52d6c0bc6e2e911515d21c6acc1e311a8e30db9 (diff)
Track uniqueness sets in table types
Diffstat (limited to 'src/elab_util.sml')
-rw-r--r--src/elab_util.sml21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/elab_util.sml b/src/elab_util.sml
index 6700686d..32f399dc 100644
--- a/src/elab_util.sml
+++ b/src/elab_util.sml
@@ -766,9 +766,14 @@ fun mapfoldB {kind = fk, con = fc, exp = fe, sgn_item = fsgi, sgn = fsg, str = f
bind (ctx, Str (x, sgn))
| DConstraint _ => ctx
| DExport _ => ctx
- | DTable (tn, x, n, c, _) =>
- bind (ctx, NamedE (x, (CApp ((CModProj (n, [], "sql_table"), loc),
- c), loc)))
+ | DTable (tn, x, n, c, _, cc) =>
+ let
+ val ct = (CModProj (n, [], "sql_table"), loc)
+ val ct = (CApp (ct, c), loc)
+ val ct = (CApp (ct, cc), loc)
+ in
+ bind (ctx, NamedE (x, ct))
+ end
| DSequence (tn, x, n) =>
bind (ctx, NamedE (x, (CModProj (n, [], "sql_sequence"), loc)))
| DClass (x, n, k, _) =>
@@ -864,12 +869,14 @@ fun mapfoldB {kind = fk, con = fc, exp = fe, sgn_item = fsgi, sgn = fsg, str = f
fn str' =>
(DExport (en, sgn', str'), loc)))
- | DTable (tn, x, n, c, e) =>
+ | DTable (tn, x, n, c, e, cc) =>
S.bind2 (mfc ctx c,
fn c' =>
- S.map2 (mfe ctx e,
+ S.bind2 (mfe ctx e,
fn e' =>
- (DTable (tn, x, n, c', e'), loc)))
+ S.map2 (mfc ctx cc,
+ fn cc' =>
+ (DTable (tn, x, n, c', e', cc'), loc))))
| DSequence _ => S.return2 dAll
| DClass (x, n, k, c) =>
@@ -1020,7 +1027,7 @@ and maxNameDecl (d, _) =
| DConstraint _ => 0
| DClass (_, n, _, _) => n
| DExport _ => 0
- | DTable (n1, _, n2, _, _) => Int.max (n1, n2)
+ | DTable (n1, _, n2, _, _, _) => Int.max (n1, n2)
| DSequence (n1, _, n2) => Int.max (n1, n2)
| DDatabase _ => 0
| DCookie (n1, _, n2, _) => Int.max (n1, n2)