Skip to main content

split_generations

Function split_generations 

Source
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).