From fdef2814d0d7e65573d1b666ae9bc561fa35a9f9 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sun, 26 Jul 2026 12:11:00 +0000 Subject: refactor: extract ParseBlock/ParseExprList, resync-based error recovery Seven copy-pasted statement-block loops collapse into ParseBlock(terminators); five comma-separated expression-list loops collapse into ParseExprList(close, allowEmpty), which also fixes "arr[1 2] <- x" being silently accepted as arr[1,2] on the statement path. Error recovery now lives in one place: syncToStatementStart skips to the next statement-start/block-end token, so a bad statement no longer swallows the first token of the following good one. Drop the dead -1000/-1001 token check in ParsePrototypeArgs. Co-Authored-By: Claude Fable 5 --- AGENTS/PITFALLS.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'AGENTS/PITFALLS.md') diff --git a/AGENTS/PITFALLS.md b/AGENTS/PITFALLS.md index 393f507..cd8cc92 100644 --- a/AGENTS/PITFALLS.md +++ b/AGENTS/PITFALLS.md @@ -7,10 +7,10 @@ test programs. - **STRING `=` / `<>` compares pointer identity, not contents.** No strcmp anywhere; two equal heap strings compare unequal. -- **OUTPUT takes exactly one expression.** `OUTPUT a, ", ", b` silently drops everything - after the comma — and if the dropped tail ends in an identifier, error recovery also - swallows the first token of the *next* statement. Concatenate with `&`. Similarly - INPUT only accepts a plain identifier — no `INPUT arr[i]`. +- **OUTPUT takes exactly one expression.** `OUTPUT a, ", ", b` prints `a`, then the + stray `, ", ", b` produces parse errors (recovery resyncs at the next statement + start, so following statements survive; the compile still fails). Concatenate with + `&`. Similarly INPUT only accepts a plain identifier — no `INPUT arr[i]`. - **Arrays cannot cross function boundaries.** `ArrayTable` is never scoped; metadata SSA values belong to the declaring function, so referencing another function's array produces invalid IR, and arrays can't be parameters. -- cgit v1.3.1-4-g156e