diff options
| author | _ov4 <ov4@ov4.org> | 2026-07-26 12:11:00 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-07-26 12:11:00 +0000 |
| commit | fdef2814d0d7e65573d1b666ae9bc561fa35a9f9 (patch) | |
| tree | 043b9dbe477f85c82bb334d68363bc70196a9d47 /AGENTS/PITFALLS.md | |
| parent | 4a25b279d8f6c662fa8152cfe42e038d1ea06901 (diff) | |
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 <noreply@anthropic.com>
Diffstat (limited to 'AGENTS/PITFALLS.md')
| -rw-r--r-- | AGENTS/PITFALLS.md | 8 |
1 files changed, 4 insertions, 4 deletions
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. |
