diff options
author | Adam Chlipala <adamc@hcoop.net> | 2009-09-22 13:41:23 -0400 |
---|---|---|
committer | Adam Chlipala <adamc@hcoop.net> | 2009-09-22 13:41:23 -0400 |
commit | c328bb9c8bf1c3ac70b9e7e14157ecd2b6ba0b1d (patch) | |
tree | 0a42ab31375f4c36279b7488d5fedfdf549e4980 | |
parent | 5ee51dcd83cba0c90328d80376bef612b94f1700 (diff) |
More interpreter debugging
-rw-r--r-- | lib/js/urweb.js | 6 | ||||
-rw-r--r-- | src/jscomp.sml | 4 | ||||
-rw-r--r-- | tests/jscomp.ur | 21 |
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> |