# HG changeset patch # User Adam Chlipala # Date 1253640207 14400 # Node ID c22e524a6dd37da71ff240adea17c187badc5153 # Parent 8371d12ae63f967a640577a58570b4820e4babad Basic arithmetic working with interpretation diff -r 8371d12ae63f -r c22e524a6dd3 lib/js/urweb.js --- a/lib/js/urweb.js Tue Sep 22 12:23:21 2009 -0400 +++ b/lib/js/urweb.js Tue Sep 22 13:23:27 2009 -0400 @@ -834,15 +834,20 @@ } break; case "a1": - if (v == null || !v.body) - throw "Ur: applying non-function"; - stack = cons({c: "a2", env: v.env, body: v.body}, stack.next); e = fr.x; + stack = cons({c: "a2", f: v}, stack.next); break; case "a2": - stack = cons({c: "a3", env: env}, stack.next); - env = cons(v, fr.env); - e = fr.body; + if (fr.f == null) + throw "Ur: applying null function"; + else if (fr.f.body) { + stack = cons({c: "a3", env: env}, stack.next); + env = cons(v, fr.f.env); + e = fr.f.body; + } else { + e = {c: "c", v: fr.f(v)}; + stack = stack.next; + } break; case "a3": env = fr.env; @@ -886,7 +891,7 @@ e = {c: "c", v: lookup(env, e.n)}; break; case "n": - e = {c: "c", v: urfuncs[e.n]}; + e = urfuncs[e.n]; break; case "s": stack = cons({c: "s"}, stack); diff -r 8371d12ae63f -r c22e524a6dd3 tests/jscomp.ur --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/jscomp.ur Tue Sep 22 13:23:27 2009 -0400 @@ -0,0 +1,10 @@ +fun main () = + s <- source ""; + + return +
+ +