From c13d181361dfb6522cafd7fe04f328505e04769f Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Mon, 11 Jul 2011 19:23:01 -0400 Subject: [PATCH] coersing example is working finally --- js-assembler/package.rkt | 4 ++-- js-assembler/runtime-src/baselib-functions.js | 20 ++++++++++++++----- js-assembler/runtime-src/runtime.js | 6 ++---- tests/coersing/fact.rkt | 2 +- tests/coersing/index.html | 17 +++++++++------- 5 files changed, 30 insertions(+), 19 deletions(-) diff --git a/js-assembler/package.rkt b/js-assembler/package.rkt index dd50850..7a0d233 100644 --- a/js-assembler/package.rkt +++ b/js-assembler/package.rkt @@ -225,7 +225,7 @@ MACHINE.modules[~s] = (define (on-last-src) - (fprintf op "console.log('module loaded'); plt.runtime.setReadyTrue();") + (fprintf op "plt.runtime.setReadyTrue();") (fprintf op "SUCCESS();")) @@ -247,7 +247,7 @@ MACHINE.modules[~s] = (fprintf op "var invoke = (function(MACHINE, SUCCESS, FAIL, PARAMS) {") (fprintf op " plt.runtime.ready(function() {") - (fprintf op "console.log('loading module'); plt.runtime.setReadyFalse();") + (fprintf op "plt.runtime.setReadyFalse();") (make (list (make-MainModuleSource source-code)) packaging-configuration) (fprintf op " });"); diff --git a/js-assembler/runtime-src/baselib-functions.js b/js-assembler/runtime-src/baselib-functions.js index 0607cd8..56d258b 100644 --- a/js-assembler/runtime-src/baselib-functions.js +++ b/js-assembler/runtime-src/baselib-functions.js @@ -20,7 +20,7 @@ // The function will run on the provided MACHINE. // // It assumes that it must begin its own trampoline. - var coerseToJavaScript = function(v, MACHINE) { + var asJavaScriptFunction = function(v, MACHINE) { MACHINE = MACHINE || plt.runtime.currentMachine; if (isPrimitiveProcedure(v)) { return coersePrimitiveToJavaScript(v, MACHINE); @@ -65,6 +65,7 @@ var oldVal = MACHINE.val; var oldArgcount = MACHINE.argcount; + var oldProc = MACHINE.proc; var oldErrorHandler = MACHINE.params['currentErrorHandler']; var afterGoodInvoke = function(MACHINE) { @@ -72,7 +73,8 @@ var returnValue = MACHINE.val; MACHINE.val = oldVal; MACHINE.argcount = oldArgcount; - succ(MACHINE.val); + MACHINE.proc = oldProc; + succ(returnValue); }; afterGoodInvoke.multipleValueReturn = function(MACHINE) { MACHINE.params['currentErrorHandler'] = oldErrorHandler; @@ -82,6 +84,7 @@ } MACHINE.val = oldVal; MACHINE.argcount = oldArgcount; + MACHINE.proc = oldProc; succ.apply(null, returnValues); }; @@ -93,8 +96,15 @@ for (var i = 0; i < args.length; i++) { MACHINE.env.push(args[i]); } - plt.runtime.trampoline(MACHINE, - entryPoint); + MACHINE.proc = v; + MACHINE.params['currentErrorHandler'] = function(MACHINE, e) { + MACHINE.params['currentErrorHandler'] = oldErrorHandler; + MACHINE.val = oldVal; + MACHINE.argcount = oldArgcount; + MACHINE.proc = oldProc; + fail(e); + }; + plt.runtime.trampoline(MACHINE, v.label); }, 0); }; @@ -199,6 +209,6 @@ exports.isFunction = isFunction; - exports.coerseToJavaScript = coerseToJavaScript; + exports.asJavaScriptFunction = asJavaScriptFunction; })(this['plt'].baselib); \ No newline at end of file diff --git a/js-assembler/runtime-src/runtime.js b/js-assembler/runtime-src/runtime.js index 3471c34..cafe9e5 100644 --- a/js-assembler/runtime-src/runtime.js +++ b/js-assembler/runtime-src/runtime.js @@ -1785,7 +1785,6 @@ if(this['plt'] === undefined) { this['plt'] = {}; } (function(scope) { scope.ready = function(f) { - console.log('request'); if (runtimeIsReady) { notifyWaiter(f); } else { @@ -1794,7 +1793,6 @@ if(this['plt'] === undefined) { this['plt'] = {}; } }; scope.setReadyTrue = function() { - console.log("runtime is ready"); runtimeIsReady = true; while(runtimeIsReady && readyWaiters.length > 0) { notifyWaiter(readyWaiters.shift()); @@ -1802,7 +1800,6 @@ if(this['plt'] === undefined) { this['plt'] = {}; } }; scope.setReadyFalse = function() { - console.log("disabled runtime"); runtimeIsReady = false; }; @@ -1810,7 +1807,6 @@ if(this['plt'] === undefined) { this['plt'] = {}; } var runtimeIsReady = false; var readyWaiters = []; var notifyWaiter = function(w) { - console.log('notifying waiter'); w(); }; })(this); @@ -1823,6 +1819,7 @@ if(this['plt'] === undefined) { this['plt'] = {}; } // Executes all programs that have been labeled as a main module var invokeMains = function(machine, succ, fail) { runtime.ready(function() { + setReadyFalse(); machine = machine || runtime.currentMachine; succ = succ || function() {}; fail = fail || function() {}; @@ -1832,6 +1829,7 @@ if(this['plt'] === undefined) { this['plt'] = {}; } var nextModule = mainModules.shift(); nextModule.invoke(machine, loop, fail); } else { + setReadyTrue(); succ(); } }; diff --git a/tests/coersing/fact.rkt b/tests/coersing/fact.rkt index 29be59c..3aa02db 100644 --- a/tests/coersing/fact.rkt +++ b/tests/coersing/fact.rkt @@ -8,4 +8,4 @@ (* x (fact (sub1 x)))])) -(printf "fact invoked\n") \ No newline at end of file +(printf "test: ~s\n" (fact 4)) \ No newline at end of file diff --git a/tests/coersing/index.html b/tests/coersing/index.html index 4a0f480..3a70530 100644 --- a/tests/coersing/index.html +++ b/tests/coersing/index.html @@ -3,20 +3,23 @@ - - +