implement program execution.

This commit is contained in:
trans_soup 2023-11-06 15:39:18 +01:00
parent abdea0828f
commit 0d99d58812
1 changed files with 24 additions and 0 deletions

24
src/execute.mjs Normal file
View File

@ -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));
}
}