summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/js/urweb.js6
-rw-r--r--src/jscomp.sml4
-rw-r--r--tests/jscomp.ur21
3 files changed, 23 insertions, 8 deletions
diff --git a/lib/js/urweb.js b/lib/js/urweb.js
index c11702a6..0cafd8f8 100644
--- a/lib/js/urweb.js
+++ b/lib/js/urweb.js
@@ -883,7 +883,7 @@ function exec0(env, e) {
stack = cons({c: "a3", env: env}, stack.next);
break;
default:
- throw "Unknown Ur continuation kind";
+ throw ("Unknown Ur continuation kind " + fr.c);
}
break;
@@ -922,7 +922,7 @@ function exec0(env, e) {
throw "Empty Ur record in interpretation";
var fs = {};
stack = cons({c: "r", n: e.l.data.n, fs: fs, l: e.l.next}, stack);
- e = e.l.data;
+ e = e.l.data.v;
break;
case ".":
stack = cons({c: ".", f: e.f}, stack);
@@ -942,7 +942,7 @@ function exec0(env, e) {
e = {c: "c", v: cs(function() { return exec0(env0, e0); })};
break;
default:
- throw "Unknown Ur expression kind";
+ throw ("Unknown Ur expression kind " + e.c);
}
}
}
diff --git a/src/jscomp.sml b/src/jscomp.sml
index 7d9ee955..1f5d669a 100644
--- a/src/jscomp.sml
+++ b/src/jscomp.sml
@@ -690,7 +690,7 @@ fun process file =
val (e, st) = jsE inner (e, st)
in
- (strcat [str ("{c:\"f\",f:" ^ name ^ ",:a:cons("),
+ (strcat [str ("{c:\"f\",f:" ^ name ^ ",a:cons("),
e,
str ",null)}"],
st)
@@ -728,7 +728,7 @@ fun process file =
let
val (e, st) = jsE inner (e, st)
in
- (strcat [str ("cons({n:\"" ^ x ^ ",v:"),
+ (strcat [str ("cons({n:\"" ^ x ^ "\",v:"),
e,
str "},",
es,
diff --git a/tests/jscomp.ur b/tests/jscomp.ur
index 7722166f..c283ae4d 100644
--- a/tests/jscomp.ur
+++ b/tests/jscomp.ur
@@ -1,15 +1,30 @@
+fun fst [a] [b] (x : a) (y : b) = x
+fun snd [a] [b] (x : a) (y : b) = y
+
fun main () =
s <- source "";
- f <- source (plus 1);
+ s' <- source "";
+ f <- source (plus 1);
+ f2 <- source fst;
+ r <- source {A = "x", B = "y"};
return <xml><body>
- <ctextbox source={s}/><br/><br/>
+ <ctextbox source={s}/> <ctextbox source={s'}/><br/><br/>
Function: <button value="+1" onclick={set f (plus 1)}/>
<button value="*3" onclick={set f (times 3)}/><br/><br/>
+ Function2: <button value="Fst" onclick={set f2 fst}/>
+ <button value="Snd" onclick={set f2 snd}/><br/><br/>
+
<button value="Echo" onclick={s <- get s; alert s}/>
+ <button value="-" onclick={s <- get s; alert (show (-(readError s : int)))}/>
<button value="+1" onclick={s <- get s; alert (show (readError s + 1))}/>
<button value="*3" onclick={s <- get s; alert (show ((readError s) * 3))}/>
- <button value="f" onclick={s <- get s; f <- get f; alert (show (f (readError s)))}/>
+ <button value="f" onclick={s <- get s; f <- get f; alert (show (f (readError s)))}/><br/><br/>
+
+ <button value="f2" onclick={s <- get s; s' <- get s'; f2 <- get f2; alert (f2 s s')}/><br/><br/>
+
+ <button value="A" onclick={r <- get r; alert r.A}/>
+ <button value="B" onclick={r <- get r; alert r.B}/>
</body></xml>