aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarvin Borner2024-12-22 19:31:47 +0100
committerMarvin Borner2024-12-22 19:31:47 +0100
commit76ee1aedf2a53c0a6dd2bd71c2309e84a9b66416 (patch)
tree9ed20cadea474f6f9925928b0b26ee4cde321782
parent88d38e4c6b6e4d4753fc15a68cdec95df2b328d4 (diff)
Improve definition resolver
-rw-r--r--main.js18
1 files changed, 7 insertions, 11 deletions
diff --git a/main.js b/main.js
index cb2a159..8d957e9 100644
--- a/main.js
+++ b/main.js
@@ -238,20 +238,15 @@ const substDef = (i, t, n) => {
const resolveTerm = (_t, defs) => {
if (_t === null) return null;
+
let final = _t;
- let len = Object.keys(defs).length;
- for (let i = len; i > 0; i--) {
- final = abs(final);
- }
- let d = len;
- Object.entries(defs).forEach(([n, t]) => {
- final = app(substDef(--d - len, final, n))(t);
- });
+ for (let def of defs.reverse())
+ final = app(abs(substDef(0, final, def[0])))(def[1]);
return final;
};
const parse = (str) => {
- const defs = {};
+ const defs = [];
let t;
str
.trim()
@@ -259,13 +254,14 @@ const parse = (str) => {
.every((line) => {
if (line.startsWith("--") || line.length === 0) return true;
if (!line.includes("=")) {
- t = resolveTerm(parseTerm(line), defs);
+ t = parseTerm(line);
return false;
}
[n, _t] = line.split("=");
- defs[n.trim()] = resolveTerm(parseTerm(_t.trim()), defs);
+ defs.push([n.trim(), parseTerm(_t.trim())]);
return true;
});
+ t = resolveTerm(t, defs);
return t;
};