6971f57356d1cf42188e05d4294f0e96985fa61d
Both chained-*struct-field sites (cgdot read, cgassign store) read the inner- struct layout off the stamped inner-dot tinfo (peel NAMED->under, TY_PTR->.sub ->NAMED->under->TY_STRUCT) and walk tinfo.fields for offset + per-field type, replacing dotinnerstructptr's structinfo re-walk + structlookup. Type dispatch (str/slice/float, load/store op) keys on tfield.type_ via the existing *tinfo predicates; ft.slotsize reproduces the old fieldsize exactly (== size for all kinds reached here except struct/array). cstage parity: cgen.c:1653-1655 (read fl->offset), 2514/2541 (store f->offset). Behavior-preserving: a strict per-level gate (every chain dot must peel through a *struct, root must be N_IDENT && localfindnode != nil) reproduces dotinnerstructptr's EXACT locals-only-with-all-*struct-intermediates firing set -- a by-value intermediate dot bails to the identical pre-existing generic path. asm is byte-identical (990-997 hold; both the strict gate and the looser superset tested 134/134, confirming the corpus has no by-value-intermediate chain). Deliberately NOT widened past the old set: global-root and by-value- intermediate chained dots stay on their old paths -- the global case is a pre-existing SHARED base-eval defect (cstage mis-evals the global base as (BP)->segfault; wwstage no-stores), filed #27 to fix in both stages together. dotinnerstructptr deleted (0 callers). Offset now sources from tinfo.fields (natural layout) vs old structinfo (slot-padded); they coincide for flat structs (all reached here), with nested-by-value-struct divergence pre-existing and left to #57/#6/#7 territory.
selfhost/cmd/wcc: collapse chained-dot offset-emit onto tinfo.fields + delete dotinnerstructptr (#70, #12)
Description
No description provided
Languages
C
89.4%
Python
7.2%
Makefile
2.3%
Shell
0.8%
Assembly
0.3%