emit_lets / emitletdataw's scalar-8B and array arms only matched bare N_INTLIT / N_RUNELIT / N_TRUE / N_FALSE / N_NIL on the let rhs. `let x: i8 = -1i8;` arrives as N_UN(TK_MINUS, N_INTLIT(1)) — none of those — so cstage's scalar arm hit `else continue;` and dropped the DATAW row entirely; the array arm bailed at the first non-foldable element and the skip-array-with-non-NIL-rhs fall-through dropped the whole row. Wwstage's mirror arms silently emitted zero bytes for negative literals in both shapes. Severity split — cstage symptom is no DATA emit, the linker fails loudly at build time. Wwstage symptom is silent-zero element substitution for negative array values: compiles, runs, returns wrong answers. Corpus-coverage-blind on the wwstage side, only surfaces when a consumer reads the wrong value. Single N_UN-fold helper application retires both symptoms across both stages. Fourth corpus-coverage-blind unmask this session (catalog: i64 div/mod CQO #16, IDENT-local /= no-op, #21 call-arg DX drop, now #19 wwstage silent-zero). Route all four sites through fold_int_literal / foldintliteral, the same helper #24 used on the def-emit side (which already covered N_UN over the leaf set). The wwstage array arm also picks up an N_CAST peel and drops a dead non-`...` N_FIELD branch (the parser never emits non-`...` N_FIELD inside an N_ARRLIT — only as the `...` repeat marker). Same-path sibling cleanup; rule-11 justified. Tests: - 719_signed_data_emit asserts DATAW <sym>(SB),"<bytes>" lines are present in both stages' .s for the {i8, i16, i32, i64} × {scalar, 1D array} matrix, plus cmp -s byte-id between stages per row. Corpus-coverage-blind sentinel per rob's STATUS-3 note. - 923_signed_data_emit_run runtime-pins the same matrix plus a TK_TILDE row through cstage and wwstage drivers. 995_self_rebuild stays green (ww2==ww3==ww4 byte-id).
7.1 KiB
7.1 KiB