simplifying trampoline parameters: it only takes the machine and the entry point.

This commit is contained in:
Danny Yoo 2011-03-24 18:41:08 -04:00
parent 97762a015f
commit 7c7491329c
2 changed files with 12 additions and 5 deletions

View File

@ -27,6 +27,7 @@
(newline op))
basic-blocks)
(fprintf op "MACHINE.params.currentErrorHandler = function(e) { fail(e); };\n")
(fprintf op "MACHINE.params.currentSuccessHandler = function(MACHINE) { success(MACHINE.val); };\n")
(fprintf op #<<EOF
for (param in params) {
if (params.hasOwnProperty(param)) {
@ -35,7 +36,7 @@ for (param in params) {
}
EOF
)
(fprintf op "trampoline(MACHINE, ~a, function() {success(MACHINE.val)}, fail); })"
(fprintf op "trampoline(MACHINE, ~a); })"
(BasicBlock-name (first basic-blocks)))))

View File

@ -17,6 +17,7 @@ var Frame = function(label, proc) {
};
// A closure consists of its free variables as well as a label
// into its text segment.
var Closure = function(label, arity, closedVals, displayName) {
@ -26,6 +27,8 @@ var Closure = function(label, arity, closedVals, displayName) {
this.displayName = displayName;
};
// A primitive function is just a Javascript function.
var Primitives = (function() {
@ -305,7 +308,10 @@ var MACHINE = { callsBeforeTrampoline: 100,
control : [],
running : false,
params: { currentDisplayer: function(v) {},
currentSuccessHandler: function(v) {},
currentErrorHandler: function(e) {},
currentNamespace: {},
// These parameters control how often
@ -344,7 +350,7 @@ var recomputeMaxNumBouncesBeforeYield = function(observedDelay) {
};
var trampoline = function(MACHINE, initialJump, success, fail) {
var trampoline = function(MACHINE, initialJump) {
var thunk = initialJump;
var startTime = (new Date()).valueOf();
MACHINE.callsBeforeTrampoline = 100;
@ -366,17 +372,17 @@ var trampoline = function(MACHINE, initialJump, success, fail) {
(new Date()).valueOf() - startTime);
setTimeout(
function() {
trampoline(MACHINE, thunk, success, fail);
trampoline(MACHINE, thunk);
},
0);
return;
}
} else {
MACHINE.running = false;
return fail(e);
return MACHINE.params.currentErrorHandler(e);
}
}
}
MACHINE.running = false;
return success();
return MACHINE.params.currentSuccessHandler(MACHINE);
};