diff --git a/src/mir/builder/control_flow/joinir/patterns/pattern1_minimal.rs b/src/mir/builder/control_flow/joinir/patterns/pattern1_minimal.rs index 58344d47..0ec51b72 100644 --- a/src/mir/builder/control_flow/joinir/patterns/pattern1_minimal.rs +++ b/src/mir/builder/control_flow/joinir/patterns/pattern1_minimal.rs @@ -27,62 +27,41 @@ pub fn lower( } impl MirBuilder { - /// Phase 188-Impl-1-F: Pattern 1 (Simple While Loop) minimal lowerer + /// Phase 179-B: Pattern 1 (Simple While Loop) minimal lowerer /// - /// This bypasses the LoopFrontendBinding JSON path and directly calls - /// the Pattern 1 minimal lowerer for apps/tests/loop_min_while.hako + /// **Refactored**: Now uses PatternPipelineContext for unified preprocessing /// - /// # Phase 188-Impl-2: Host Variable Integration - /// - /// Extracts the loop variable from the host function (e.g., `i` from `i < 3`) - /// and creates a JoinInlineBoundary for mapping between host and JoinIR ValueIds. - /// - /// # Pipeline - /// 1. Extract loop variable name from condition - /// 2. Look up ValueId in host variable_map - /// 3. Call simple_while_minimal::lower_simple_while_minimal() → JoinModule - /// 4. convert_join_module_to_mir_with_meta() → MirModule - /// 5. Merge MIR blocks into current_function + /// # Pipeline (Phase 179-B) + /// 1. Build preprocessing context → PatternPipelineContext + /// 2. Call JoinIR lowerer → JoinModule + /// 3. Create boundary from context → JoinInlineBoundary + /// 4. Merge MIR blocks → JoinIRConversionPipeline pub(in crate::mir::builder) fn cf_loop_pattern1_minimal( &mut self, condition: &ASTNode, - _body: &[ASTNode], + body: &[ASTNode], _func_name: &str, debug: bool, ) -> Result, String> { use crate::mir::join_ir::lowering::simple_while_minimal::lower_simple_while_minimal; - use crate::mir::BasicBlockId; - use std::collections::BTreeSet; // Phase 195: Use unified trace trace::trace().debug("pattern1", "Calling Pattern 1 minimal lowerer"); - // Phase 33-22: Use CommonPatternInitializer for loop variable extraction - use super::common_init::CommonPatternInitializer; - let (loop_var_name, loop_var_id, _carrier_info) = - CommonPatternInitializer::initialize_pattern( - self, - condition, - &self.variable_map, - None, // No carrier exclusions for Pattern 1 - )?; + // Phase 179-B: Use PatternPipelineContext for unified preprocessing + use super::pattern_pipeline::{build_pattern_context, PatternVariant}; + let ctx = build_pattern_context( + self, + condition, + body, + PatternVariant::Pattern1, + )?; // Phase 195: Use unified trace trace::trace().varmap("pattern1_start", &self.variable_map); - // Phase 171-172: Use LoopScopeShapeBuilder for unified initialization (Issue 4) - // Pattern 1 lowerer ignores the scope anyway, so this is just a placeholder - use super::loop_scope_shape_builder::LoopScopeShapeBuilder; - let scope = LoopScopeShapeBuilder::empty_body_locals( - BasicBlockId(0), - BasicBlockId(0), - BasicBlockId(0), - BasicBlockId(0), - BTreeSet::new(), - ); - - // Call Pattern 1 lowerer - let join_module = match lower_simple_while_minimal(scope) { + // Call Pattern 1 lowerer with preprocessed scope + let join_module = match lower_simple_while_minimal(ctx.loop_scope) { Some(module) => module, None => { // Phase 195: Use unified trace @@ -91,16 +70,16 @@ impl MirBuilder { } }; - // Phase 33-22: Create boundary for JoinIR conversion + // Phase 179-B: Create boundary from context // Phase 201: Use JoinInlineBoundaryBuilder for clean construction // Canonical Builder pattern - see docs/development/current/main/joinir-boundary-builder-pattern.md use crate::mir::join_ir::lowering::JoinInlineBoundaryBuilder; let boundary = JoinInlineBoundaryBuilder::new() .with_inputs( vec![ValueId(0)], // JoinIR's main() parameter (loop variable) - vec![loop_var_id], // Host's loop variable + vec![ctx.loop_var_id], // Host's loop variable ) - .with_loop_var_name(Some(loop_var_name.clone())) // Phase 33-16: Enable header PHI generation for SSA correctness + .with_loop_var_name(Some(ctx.loop_var_name.clone())) // Phase 33-16: Enable header PHI generation for SSA correctness .build(); // Phase 33-22: Use JoinIRConversionPipeline for unified conversion flow