883665e96210db8b2abe6698d7c10b034aa25339
fieldsize selected the slot-padded byte width of a struct field's type-AST via the same TBANG/TNAME/TPTR/TSLICE/TARRAY/TTAGGED walker shape slotsize used pre-#48 — with TNAME branching into structlookup, enumlookup, and aliaslookup to follow the AST chain back to a primitive size or struct totsize. After A.6.2 stamping + #48's slotsize collapse, the same data is reachable through the populated tinfo: TY_STRUCT / TY_ARRAY → ti.slotsize TY_TAGGED / TY_SLICE / TY_STR → ti.size TY_PTR / TY_FN / TY_CHAN → 8 primitives + TY_ENUM + TY_TUPLE → ti.size (catch-all > 0) fallback → 8 cstage SSoT is `f->type->size` at cmd/w6c/cgen.c:1386, :1656, :2515, :2535 — wwstage routes through ti.slotsize for composites (the #48 verdict centralizes the slot-pad rule on tinfo) and through ti.size where natural width and in-struct width coincide. Two latent behavior fixes ride alongside the collapse, both cstage-parity and dead-in-bootstrap (995 byte-id is the regression gate, currently green at 133/133): - TY_TUPLE-typed struct field: old walker had no TTUPLE arm and fell through to 8; cstage `f->type->size` reads the natural sum (e.g., 24 for `(i64, str)`). New code reads ti.size, matching cstage. - !T-typed struct field: old walker had no TBANG arm and fell through to 8; cstage iserror-passthrough returns the inner type's size. tinfofornode strips N_TBANG (check.ww:1154-1161) so the new dispatch sees the inner ti directly. No fixtures in selfhost exercise either case today; both fixes are pre-correct for future code that does. Body went from ~47 LOC to ~16 LOC. `c: *cgen` retained unused for callsite stability (slotsize / localloadop precedent,a828c03/68219a1). Two callsites in cgenutil.ww:1870 + cgenexpr.ww:3594 untouched. Dot-chain helpers (dotinnerstructptr, dotfieldtnode, dotchainresolve) are split off as #49b — they walk a cgen-side `structinfo` table keyed by field name + offset, and tinfo.fields is not yet populated by check.ww's TSTRUCT/TTUPLE arms. Parallel structure to #50's TY_TAGGED.params gap; treat as a separate populate-then-port pair. Net -48 LOC across cgenutil.ww + two .combined.ww bundler regens. Full make test green at 133/133.
Description
No description provided
Languages
C
89.4%
Python
7.2%
Makefile
2.3%
Shell
0.8%
Assembly
0.3%