s.f *= v silently became s.f = v (and the other non-+=/-= ops dropped likewise) in BOTH stages across five lvalue sub-arms: via-ptr field, direct local field, str/slice pseudo-field, and the two global-field forms. Funnel all five through a shared combine dispatch (cgdotfieldcombine / cg_dotfield_combine) emitting the load-OP-store sequence at field width, hard-erroring the unhandled kinds — close-by- construction so no arm stays on the old PLUSEQ-only path (the #133 BUS-routing lesson; #227 sites A/B are the closed siblings). The refactor routes the corpus's existing +=/-= sites through the same helper output-identically (byte-id held). Review item #34. Both stages move in one commit: one emission contract; splitting the halves would leave the byte-id gates red in between.
118 KiB
118 KiB