feat(joinir): Phase 172-3 ExitMeta unified return from Pattern2 lowerer
Implement loop exit contract boxification for JoinIR Pattern2: - lower_loop_with_break_minimal now returns (JoinModule, ExitMeta) - ExitMeta contains k_exit parameter ValueId for carrier variables - Pattern2 caller builds exit_bindings from ExitMeta - merge/mod.rs adds exit_bindings join_exit_values to used_values for remap - reconnect_boundary uses remapped exit values for variable_map updates This completes Phases 172-3 through 172-5 of the Loop Exit Contract boxification plan, enabling proper loop variable propagation after exit. Test: joinir_min_loop.hako passes (RC: 0) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -88,6 +88,17 @@ pub(in crate::mir::builder) fn merge_joinir_mir_blocks(
|
||||
}
|
||||
used_values.insert(binding.join_value);
|
||||
}
|
||||
|
||||
// Phase 172-3: Add exit_bindings' join_exit_values to used_values for remapping
|
||||
for binding in &boundary.exit_bindings {
|
||||
if debug {
|
||||
eprintln!(
|
||||
"[cf_loop/joinir] Phase 172-3: Adding exit binding '{}' JoinIR {:?} to used_values",
|
||||
binding.carrier_name, binding.join_exit_value
|
||||
);
|
||||
}
|
||||
used_values.insert(binding.join_exit_value);
|
||||
}
|
||||
}
|
||||
|
||||
// Phase 3: Remap ValueIds
|
||||
|
||||
Reference in New Issue
Block a user