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))
|
(newline op))
|
||||||
basic-blocks)
|
basic-blocks)
|
||||||
(fprintf op "MACHINE.params.currentErrorHandler = function(e) { fail(e); };\n")
|
(fprintf op "MACHINE.params.currentErrorHandler = function(e) { fail(e); };\n")
|
||||||
|
(fprintf op "MACHINE.params.currentSuccessHandler = function(MACHINE) { success(MACHINE.val); };\n")
|
||||||
(fprintf op #<<EOF
|
(fprintf op #<<EOF
|
||||||
for (param in params) {
|
for (param in params) {
|
||||||
if (params.hasOwnProperty(param)) {
|
if (params.hasOwnProperty(param)) {
|
||||||
|
@ -35,7 +36,7 @@ for (param in params) {
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
(fprintf op "trampoline(MACHINE, ~a, function() {success(MACHINE.val)}, fail); })"
|
(fprintf op "trampoline(MACHINE, ~a); })"
|
||||||
(BasicBlock-name (first basic-blocks)))))
|
(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
|
// A closure consists of its free variables as well as a label
|
||||||
// into its text segment.
|
// into its text segment.
|
||||||
var Closure = function(label, arity, closedVals, displayName) {
|
var Closure = function(label, arity, closedVals, displayName) {
|
||||||
|
@ -26,6 +27,8 @@ var Closure = function(label, arity, closedVals, displayName) {
|
||||||
this.displayName = displayName;
|
this.displayName = displayName;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// A primitive function is just a Javascript function.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var Primitives = (function() {
|
var Primitives = (function() {
|
||||||
|
@ -305,7 +308,10 @@ var MACHINE = { callsBeforeTrampoline: 100,
|
||||||
control : [],
|
control : [],
|
||||||
running : false,
|
running : false,
|
||||||
params: { currentDisplayer: function(v) {},
|
params: { currentDisplayer: function(v) {},
|
||||||
|
|
||||||
|
currentSuccessHandler: function(v) {},
|
||||||
currentErrorHandler: function(e) {},
|
currentErrorHandler: function(e) {},
|
||||||
|
|
||||||
currentNamespace: {},
|
currentNamespace: {},
|
||||||
|
|
||||||
// These parameters control how often
|
// 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 thunk = initialJump;
|
||||||
var startTime = (new Date()).valueOf();
|
var startTime = (new Date()).valueOf();
|
||||||
MACHINE.callsBeforeTrampoline = 100;
|
MACHINE.callsBeforeTrampoline = 100;
|
||||||
|
@ -366,17 +372,17 @@ var trampoline = function(MACHINE, initialJump, success, fail) {
|
||||||
(new Date()).valueOf() - startTime);
|
(new Date()).valueOf() - startTime);
|
||||||
setTimeout(
|
setTimeout(
|
||||||
function() {
|
function() {
|
||||||
trampoline(MACHINE, thunk, success, fail);
|
trampoline(MACHINE, thunk);
|
||||||
},
|
},
|
||||||
0);
|
0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
MACHINE.running = false;
|
MACHINE.running = false;
|
||||||
return fail(e);
|
return MACHINE.params.currentErrorHandler(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MACHINE.running = false;
|
MACHINE.running = false;
|
||||||
return success();
|
return MACHINE.params.currentSuccessHandler(MACHINE);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user