feat(joinir): Task 200-2 - JoinInlineBoundaryBuilder implementation for Pattern2
Builder pattern for JoinInlineBoundary construction, reduces field manipulation scattering. # Changes - NEW: src/mir/join_ir/lowering/inline_boundary_builder.rs (165 lines) - JoinInlineBoundaryBuilder with 7 fluent methods - Complete unit test coverage (4 tests) - MODIFIED: src/mir/join_ir/lowering/mod.rs (+2 lines) - Export inline_boundary_builder module - Public re-export of JoinInlineBoundaryBuilder - MODIFIED: src/mir/builder/control_flow/joinir/patterns/pattern2_with_break.rs - Replace direct boundary field manipulation with builder pattern - 9 lines of field assignments → fluent builder chain # Benefits - **Centralized**: All boundary construction logic in builder - **Readable**: Fluent API shows construction intent clearly - **Maintainable**: Changes to boundary structure isolated to builder - **Type Safe**: Builder validates field consistency # Tests ✅ All builder unit tests pass (4/4) ✅ All pattern module tests pass (30+) ✅ Library build succeeds with no errors 🤖 Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -328,15 +328,18 @@ impl MirBuilder {
|
||||
use crate::mir::builder::control_flow::joinir::merge::exit_line::ExitMetaCollector;
|
||||
let exit_bindings = ExitMetaCollector::collect(self, &exit_meta, debug);
|
||||
|
||||
// Phase 33-22: Create boundary with Pattern 2 specific settings
|
||||
let mut boundary = crate::mir::join_ir::lowering::inline_boundary::JoinInlineBoundary::new_inputs_only(
|
||||
vec![ValueId(0)], // JoinIR's main() parameter (loop variable init)
|
||||
vec![loop_var_id], // Host's loop variable
|
||||
);
|
||||
boundary.condition_bindings = condition_bindings;
|
||||
boundary.exit_bindings = exit_bindings.clone();
|
||||
boundary.expr_result = fragment_meta.expr_result; // Phase 33-14: Pass expr_result to merger
|
||||
boundary.loop_var_name = Some(loop_var_name.clone()); // Phase 33-16: For LoopHeaderPhiBuilder
|
||||
// Phase 200-2: Use JoinInlineBoundaryBuilder for clean construction
|
||||
use crate::mir::join_ir::lowering::JoinInlineBoundaryBuilder;
|
||||
let boundary = JoinInlineBoundaryBuilder::new()
|
||||
.with_inputs(
|
||||
vec![ValueId(0)], // JoinIR's main() parameter (loop variable init)
|
||||
vec![loop_var_id], // Host's loop variable
|
||||
)
|
||||
.with_condition_bindings(condition_bindings)
|
||||
.with_exit_bindings(exit_bindings.clone())
|
||||
.with_expr_result(fragment_meta.expr_result) // Phase 33-14: Pass expr_result to merger
|
||||
.with_loop_var_name(Some(loop_var_name.clone())) // Phase 33-16: For LoopHeaderPhiBuilder
|
||||
.build();
|
||||
|
||||
// Phase 33-22: Use JoinIRConversionPipeline for unified conversion flow
|
||||
use super::conversion_pipeline::JoinIRConversionPipeline;
|
||||
|
||||
Reference in New Issue
Block a user