diff options
author | Marvin Borner | 2024-12-22 19:31:47 +0100 |
---|---|---|
committer | Marvin Borner | 2024-12-22 19:31:47 +0100 |
commit | 76ee1aedf2a53c0a6dd2bd71c2309e84a9b66416 (patch) | |
tree | 9ed20cadea474f6f9925928b0b26ee4cde321782 | |
parent | 88d38e4c6b6e4d4753fc15a68cdec95df2b328d4 (diff) |
Improve definition resolver
-rw-r--r-- | main.js | 18 |
1 files changed, 7 insertions, 11 deletions
@@ -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; }; |