simplifying trampoline parameters: it only takes the machine and the entry point.
This commit is contained in:
parent
97762a015f
commit
7c7491329c
|
@ -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)))))
|
||||
|
||||
|
||||
|
|
14
runtime.js
14
runtime.js
|
@ -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);
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue
Block a user