63cb39e45b451c6d4f208f687a19bab72f93939d
The #13 .cap read-fix gated the wwstage CX→AX shuffle on the base's type being TY_SLICE/TY_STR, on the assumption that a bare string literal types as untyped_str and so misses the gate (matching cstage, whose cap-shuffle lives only in the typed pseudo-field branch). That assumption is false on wwstage: its checker stamps N_STRLIT as `str` (check.ww:2322), not untyped_str as cstage does (check.c:1079). So `"abc".cap` passed the TY_STR gate and emitted a stray `MOVQ CX, AX` on wwstage only — while cstage's untyped catch-all never shuffles it — a rule-10 byte-id break. A string literal's cgexpr loads only AX=ptr/BX=len (cgen.ww N_STRLIT), never a CX cap, so the shuffle was garbage on top of divergent. Exclude N_STRLIT from the gate: `"abc".cap` now returns AX unshuffled on both stages, byte-identical. The typed `t[i].cap` path (lhs N_INDEX) is unaffected. The underlying N_STRLIT type divergence (cstage untyped_str vs wwstage str) is a separate latent checker issue, filed for follow-up; this commit keeps the cgen byte-identical regardless. 683: new BYTEID_ONLY row str_lit_cap_symmetry pins the edge (asm-byte-id asserted; runtime value is a link-time address). 39/39 ok; test-unit 251/251; smoke cs==ww; sizelint clean. combined.ww (w6c + wwdump) regen'd.
Description
No description provided
Languages
C
89.4%
Python
7.2%
Makefile
2.3%
Shell
0.8%
Assembly
0.3%