implement program execution.
This commit is contained in:
parent
abdea0828f
commit
0d99d58812
|
@ -0,0 +1,24 @@
|
|||
const id = x => x;
|
||||
|
||||
export function execute (program, arg = id) {
|
||||
if (!program.env.has("main")) {
|
||||
return arg;
|
||||
}
|
||||
|
||||
const main = program.env.get("main");
|
||||
return call_fn(main, [arg])();
|
||||
}
|
||||
|
||||
function call_fn (fn, env = []) {
|
||||
if (typeof fn === "number") {
|
||||
while (fn > 0) {
|
||||
fn--;
|
||||
env = env[1];
|
||||
}
|
||||
return env[0];
|
||||
} else if (fn[0] === 0) {
|
||||
return arg => call_fn(fn[1], [arg, env]);
|
||||
} else {
|
||||
return call_fn(fn[0], env)(call_fn(fn[1], env));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue