3.5 KiB
Independent mechanical parser stack repair review
2026-09-25. No source blocker found. Reviewed the frozen working change against 19a4082117b88caf332198e4c685bde91005cb52, then confirmed the same bytes at committed 8d52dab97c92cc31baae9f20d8c324b55818aa5d with a clean worktree. This is source review; compiler, native-frame measurements and runtime acceptance belong to the parent.
Reviewed file in .local/as3batch |
SHA256 |
|---|---|
crates/oa-core/src/language/analysis_source/syntax.rs |
2763738ab9ada418ca8d05b424035bba552606338234308288d5a373bcbad439 |
harness/analysis-mixed-parser-stack-repair-20260925.md |
e2156601e6747ff18e92034827acf4a72035a1fa77f3ff7618c04f1ce64a0f12 |
The driver at syntax.rs:31 retains its initial active check, unbound fast path, original task/value Vecs, pop followed by the per-task active check, and final value extraction. Only dispatch changes: expression tasks call prefix (:53); other tasks call continue_task (:154). Neither helper calls the driver or the other helper. Both borrow the existing Cursor and Vecs; the continuation takes ownership of the same popped task. No new collection, clone, policy field, allocation, budget check, forwarding wrapper or recursive parser operation is introduced.
Independent source comparison, preserving quoted strings and removing formatting whitespace, established that the prefix body is unchanged except two optional trailing argument commas removed by formatting. Every continuation arm is token-identical (2,622 comparison tokens). Code before binding and after the extracted continuation is unchanged. Manual control-flow review covers Continue, Binary, Unary, Group, Next, Collected, Power and AsKind: cursor mutations, task/value push and pop order, precedence, sequence limits, duplicate keys, reference charges, numeric validation, spans, open/close depth, node construction and error order are retained. The added Expression unreachable arm is excluded by the driver's preceding exhaustive Expression dispatch; there is no other caller.
Moved return Err paths now return from a helper and immediately propagate through the driver's ?. The driver still owns and drops its two stacks on failure; helper-owned popped payloads retain their original move/drop roles. This changes native frame layout and cleanup call paths, so source equivalence does not establish a stack bound. Parent measurements must compare the active driver-plus-prefix and driver-plus-continuation combinations, and unchanged stack controls must exercise actual behavior. No test, fixture or allowance was changed by this repair.
The preserved 19a4082 full run aborted with 0xc00000fd; the exact artifact was 42,402,816 bytes, SHA256 777457cfefb8a3046e3f0809cabd936cfb742abe792befad2c50e05dfac1bf6b. The inspected debugger record shows Exact decimal formatting beneath binding/declarations/typed parsing; no emitter call is active. Earlier outer-frame reservations matching fa7 and unchanged existing owner fields do not support calling this a duplicate-policy regression. The repair note accurately distinguishes partial measured prologues from total stack use and a killed debugger process from a test pass. The original source/test reviews and failed attempt remain preserved.
Review tools were Git diff/show/status, file hashing and a source-text comparison script only. No Cargo, executable tests, source edits or network operations were performed by this reviewer. Runtime results, even if available separately, are not claimed by this report.