summaryrefslogtreecommitdiff
path: root/src/jscomp.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-08-09 16:13:27 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-08-09 16:13:27 -0400
commit1f98468265e6f5d652ed107a0bd89a319eca0297 (patch)
tree007835aa119d7ec7cae1d7de078850147ab9ca13 /src/jscomp.sml
parentf223822addd309cd20b5b01e34548496e6d33251 (diff)
Library improvements; proper list [un]urlification; remove server-side ServerCalls; eta reduction in type inference
Diffstat (limited to 'src/jscomp.sml')
-rw-r--r--src/jscomp.sml18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/jscomp.sml b/src/jscomp.sml
index 63f3d883..d42c659e 100644
--- a/src/jscomp.sml
+++ b/src/jscomp.sml
@@ -86,7 +86,7 @@ fun varDepth (e, _) =
| ESignalReturn e => varDepth e
| ESignalBind (e1, e2) => Int.max (varDepth e1, varDepth e2)
| ESignalSource e => varDepth e
- | EServerCall (e, ek, _, _) => Int.max (varDepth e, varDepth ek)
+ | EServerCall (e, ek, _, _, _) => Int.max (varDepth e, varDepth ek)
| ERecv (e, ek, _) => Int.max (varDepth e, varDepth ek)
| ESleep (e, ek) => Int.max (varDepth e, varDepth ek)
@@ -130,7 +130,7 @@ fun closedUpto d =
| ESignalReturn e => cu inner e
| ESignalBind (e1, e2) => cu inner e1 andalso cu inner e2
| ESignalSource e => cu inner e
- | EServerCall (e, ek, _, _) => cu inner e andalso cu inner ek
+ | EServerCall (e, ek, _, _, _) => cu inner e andalso cu inner ek
| ERecv (e, ek, _) => cu inner e andalso cu inner ek
| ESleep (e, ek) => cu inner e andalso cu inner ek
in
@@ -434,6 +434,13 @@ fun process file =
("(t[i++]==\"Some\"?" ^ e ^ ":null)", st)
end
+ | TList t =>
+ let
+ val (e, st) = unurlifyExp loc (t, st)
+ in
+ ("uul(function(){return t[i++];},function(){return " ^ e ^ "})", st)
+ end
+
| TDatatype (n, ref (dk, cs)) =>
(case IM.find (#decoders st, n) of
SOME n' => ("(tmp=_n" ^ Int.toString n' ^ "(t,i),i=tmp._1,tmp._2)", st)
@@ -1034,7 +1041,7 @@ fun process file =
st)
end
- | EServerCall (e, ek, t, eff) =>
+ | EServerCall (e, ek, t, eff, _) =>
let
val (e, st) = jsE inner (e, st)
val (ek, st) = jsE inner (ek, st)
@@ -1313,12 +1320,13 @@ fun process file =
((ESignalSource e, loc), st)
end
- | EServerCall (e1, e2, t, ef) =>
+ | EServerCall (e1, e2, t, ef, ue) =>
let
val (e1, st) = exp outer (e1, st)
val (e2, st) = exp outer (e2, st)
+ val (ue, st) = exp outer (ue, st)
in
- ((EServerCall (e1, e2, t, ef), loc), st)
+ ((EServerCall (e1, e2, t, ef, ue), loc), st)
end
| ERecv (e1, e2, t) =>
let