From a89f9edc1c5718c2f6c1fcce2c131e6b4c2cced7 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sat, 22 May 2010 16:29:54 -0400 Subject: Switch to strings and eval for thunkifying JavaScripted functions --- lib/js/urweb.js | 2 +- src/jscomp.sml | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/js/urweb.js b/lib/js/urweb.js index 4f477f2e..6215a54c 100644 --- a/lib/js/urweb.js +++ b/lib/js/urweb.js @@ -1078,7 +1078,7 @@ function exec1(env, stack, e) { var idx = e.n; e = urfuncs[idx]; if (e.c == "t") - e = urfuncs[idx] = e.f(); + e = urfuncs[idx] = eval("(" + e.f + ")"); break; case "s": stack = cons({c: "s"}, stack); diff --git a/src/jscomp.sml b/src/jscomp.sml index 7610b6d2..4b04194c 100644 --- a/src/jscomp.sml +++ b/src/jscomp.sml @@ -564,9 +564,12 @@ fun process file = val old = e val (e, st) = jsExp mode [] (e, st) val e = deStrcat 0 e + val e = String.translate (fn #"'" => "\\'" + | #"\\" => "\\\\" + | ch => String.str ch) e - val sc = "urfuncs[" ^ Int.toString n ^ "] = {c:\"t\",f:function(){return " - ^ e ^ "}};\n" + val sc = "urfuncs[" ^ Int.toString n ^ "] = {c:\"t\",f:'" + ^ e ^ "'};\n" in (*Print.prefaces "jsify'" [("old", MonoPrint.p_exp MonoEnv.empty old), ("new", MonoPrint.p_exp MonoEnv.empty new)];*) -- cgit v1.2.3