From c5efff9a0f5b5acb879197a28a25af17131c6f59 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Thu, 14 Jan 2021 13:15:23 +0100 Subject: [PATCH] Limit pass count --- packages/core/src/compiler/main.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/core/src/compiler/main.ts b/packages/core/src/compiler/main.ts index 3bd97b9..ce229d4 100644 --- a/packages/core/src/compiler/main.ts +++ b/packages/core/src/compiler/main.ts @@ -12,6 +12,7 @@ export function main(argv: string[]) { let tree = reader.readToEnd(); let macro = new S.Templates(); + let passNumber = 1; let expansionNeeded = true; function expand(p: S.Pattern, f: (t: T) => S.Items) { tree = S.replace(tree, p, t => { @@ -20,6 +21,9 @@ export function main(argv: string[]) { }); } while (expansionNeeded) { + if (passNumber >= 128) { + throw new Error(`Too many compiler passes (${passNumber})!`); + } expansionNeeded = false; expand(G.spawn, s => macro.template()`SPAWN[${s.name ?? []}][${S.joinItems(s.initialAssertions, ', ')}][[${s.bootProcBody}]]`);