Skip to content

fix(parser): silent statement drop is dead -- malformed input hard-errors - #1941

Merged
gHashTag merged 1 commit into
masterfrom
fix/parser-hardening
Aug 8, 2026
Merged

fix(parser): silent statement drop is dead -- malformed input hard-errors#1941
gHashTag merged 1 commit into
masterfrom
fix/parser-hardening

Conversation

@gHashTag

@gHashTag gHashTag commented Aug 8, 2026

Copy link
Copy Markdown
Owner

Closes #1940

The statement-level and module-level error "recovery" silently DROPPED malformed statements and whole declarations — generated code shipped wrong with no diagnostic. Found via tri-net wave 25/26: three specs' fn bodies were unimplemented stubs, and t27's own bridge.t27 packet dispatch (a match statement the parser never supported) was entirely missing from the generated Verilog.

  • Every drop site now returns a hard parse error with fn name + line
  • Array-literal element capture depth-counts nested brackets ([value, array[1], ...] no longer truncates)
  • Negative-test contract flipped (tests_compiler_rejects + parity test): malformed input must FAIL to compile
  • bridge.t27 dispatch rewritten as an if-chain; bridge.v regenerated — the dispatch now exists
  • SVA fixture spec rewritten in legal t27

Unit suite: only red is pre-existing bitnet_layer (iverilog). FROZEN_HASH resealed; NOW.md entries added.

🤖 Generated with Claude Code

…rors

Closes #1940

Statement-level and module-level error "recovery" silently DROPPED
malformed statements and whole declarations: fn bodies became
unimplemented stubs and generated code shipped WRONG with no diagnostic
(three tri-net specs + t27's own bridge.t27, whose packet dispatch --
a match STATEMENT the parser never supported -- was entirely missing
from the generated Verilog).

- every drop site now returns a hard parse error with fn name + line
- array-literal element capture depth-counts nested brackets
- negative-test contract flipped: malformed input must FAIL to compile
- bridge.t27 dispatch rewritten as an if-chain; bridge.v regenerated
  (the dispatch now EXISTS in the Verilog)
- SVA fixture spec rewritten in legal t27

Unit suite: only red is the pre-existing bitnet_layer iverilog test.
FROZEN_HASH resealed; NOW.md entries added.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@gHashTag
gHashTag enabled auto-merge (squash) August 8, 2026 13:56
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-08 13:56:19 UTC

Summary

Status Count
Total Open PRs 14
PRs with Failing Checks 1
PRs with All Checks Green 13
READY 5
FAILING 1
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=4d10feb12727 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@gHashTag
gHashTag merged commit fa093b4 into master Aug 8, 2026
21 of 22 checks passed
gHashTag added a commit that referenced this pull request Aug 8, 2026
…t types; fpga specs repaired (#1964)

Refs #1960

The #1941 hardening surfaced a layer of constructs the parser never
supported but silently swallowed. This lands the top classes:

- if-EXPRESSIONS accept braced arms: `if (c) { 2 } else { 0 }`
- if/while STATEMENTS accept paren-less Rust-style conditions, with the
  struct-literal-in-condition rule (a `{` after the condition opens the
  body, never a struct literal)
- reference types are transparent at the spec level (&str/&T parse as
  the referent)
- spec repairs: mac.t27 pack_trit; spi.t27 (THREE match constructs --
  the FSM tick, prescaler and SCK dispatch had been silently dropped
  forever); fifo.t27 (four literal missing-paren typos)

fpga-build --smoke: 2 -> 21 of 35 modules generate. Remaining tails
begin at the given/then BDD fn form (linker). tri-net's 77-spec icarus
gate is green; unit suite at the single pre-existing red (bitnet_layer).
FROZEN_HASH resealed.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
gHashTag added a commit that referenced this pull request Aug 8, 2026
Closes #1960

The #1941 hardening surfaced constructs the parser silently dropped;
this closes the fpga-smoke tail:

- `fn name() given ... then ...` (a keyword-style test spelled as a fn,
  linker.t27) is recognized right after the parameter list, BEFORE
  return-type parsing -- otherwise `given` was consumed as an
  identifier return type and the body-brace check failed
- partition.t27: a parameter named `module` (a keyword) renamed to
  mod_name

fpga-build --smoke now generates all 31 modules + the wrapper and is
GREEN again (it had been red since #1941 exposed the silently-dropped
match statements, paren-less conditions and BDD forms). tri-net's
77-spec icarus gate is green; unit suite at the single pre-existing red.
FROZEN_HASH resealed.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

parser: unbalanced parens silently drop statements; array-literal element capture cuts at first ']'

1 participant