diff options
author | 2009-04-28 15:04:37 -0400 | |
---|---|---|
committer | 2009-04-28 15:04:37 -0400 | |
commit | 51f2a80dac5c3cd25a27fb5abfdfa50d813ab0b2 (patch) | |
tree | e4e2246dc15a7cbbf067401a21197b6fd17ea95b /src/monoize.sml | |
parent | caf010bca085bea65037d194c3eb21ca8b83c23b (diff) |
A view query works
Diffstat (limited to 'src/monoize.sml')
-rw-r--r-- | src/monoize.sml | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/monoize.sml b/src/monoize.sml index ccc5a851..a2048a7d 100644 --- a/src/monoize.sml +++ b/src/monoize.sml @@ -2938,6 +2938,24 @@ fun monoDecl (env, fm) (all as (d, loc)) = (L'.DVal (x, n, t', e_name, s), loc)]) end | L.DTable _ => poly () + | L.DView (x, n, s, e, (L.CRecord (_, xts), _)) => + let + val t = (L.CFfi ("Basis", "string"), loc) + val t' = (L'.TFfi ("Basis", "string"), loc) + val s = "uw_" ^ s + val e_name = (L'.EPrim (Prim.String s), loc) + + val xts = map (fn (x, t) => (monoName env x, monoType env t)) xts + + val (e, fm) = monoExp (env, St.empty, fm) e + val e = (L'.EFfiApp ("Basis", "viewify", [e]), loc) + in + SOME (Env.pushENamed env x n t NONE s, + fm, + [(L'.DView (s, xts, e), loc), + (L'.DVal (x, n, t', e_name, s), loc)]) + end + | L.DView _ => poly () | L.DSequence (x, n, s) => let val t = (L.CFfi ("Basis", "string"), loc) |