pub fn split_generations(vt: &mut VarTable, body: &mut Stmt, pool: &DexPool)Expand description
Generation splitting: when an assignment’s value type is
INCOMPATIBLE with the var’s declared type, mint a FRESH var for the
new generation instead of widening (widening was measured twice as
net-negative — every use-site cast gap re-triggers javac’s
error-type contagion). Reads after the split point follow the
active generation; control-flow joins intersect; loops run a
3-round fixpoint so the back-edge carries the tail generation to
the head reads (the loop-state-tuple shape, qf5/v0’s
u0 = (qf5.u0) get; … u0 = looper2;).
Split condition (reference incompatibility or a primitive/value mix — the instanceof-corruption shape): both specific references of different classes, or prim→ref. NOT numeric-vs-numeric (promotion handles those) and NOT Object targets (assignable — the narrowing cast pass covers the value side).