diff --git a/src/mir/builder/control_flow/joinir/patterns/common_init.rs b/src/mir/builder/control_flow/joinir/patterns/common_init.rs index 1cebb338..3c685023 100644 --- a/src/mir/builder/control_flow/joinir/patterns/common_init.rs +++ b/src/mir/builder/control_flow/joinir/patterns/common_init.rs @@ -5,7 +5,7 @@ //! ## Responsibility //! //! - Extract loop variable from condition AST -//! - Build CarrierInfo from variable_map +//! - Build CarrierInfo from variable_map (delegates to `CarrierInfo::from_variable_map`) //! - Support pattern-specific carrier exclusions (e.g., Pattern 2 excludes break-triggered vars) //! //! ## Usage @@ -26,11 +26,16 @@ //! - **Testability**: Can be tested independently //! - **Maintainability**: Changes to initialization only need to happen once //! - **Reduces duplication**: Eliminates 80 lines across Pattern 1-4 +//! +//! # Phase 183-2: Delegation to CarrierInfo +//! +//! This module is now a thin wrapper around `CarrierInfo::from_variable_map()`. +//! The primary logic lives in `carrier_info.rs` for consistency across MIR and JoinIR contexts. use crate::mir::builder::MirBuilder; use crate::mir::ValueId; use crate::ast::ASTNode; -use crate::mir::join_ir::lowering::carrier_info::{CarrierInfo, CarrierVar}; +use crate::mir::join_ir::lowering::carrier_info::CarrierInfo; use std::collections::BTreeMap; pub struct CommonPatternInitializer; @@ -89,30 +94,23 @@ impl CommonPatternInitializer { ) })?; - // Step 2: Collect carriers from variable_map - let mut carriers = Vec::new(); - for (var_name, &var_id) in variable_map { - if var_name != &loop_var_name { - // Check exclusions (Pattern 2 specific, or other pattern-specific needs) - if let Some(excluded) = exclude_carriers { - if excluded.contains(&var_name.as_str()) { - continue; - } - } - carriers.push(CarrierVar { - name: var_name.clone(), - host_id: var_id, - join_id: None, // Phase 177-STRUCT-1 - }); - } + // Phase 183-2: Delegate to CarrierInfo::from_variable_map for consistency + // Convert BTreeMap to HashMap for compatibility + let mut variable_map_hashmap = std::collections::HashMap::new(); + for (k, v) in variable_map { + variable_map_hashmap.insert(k.clone(), *v); } - let carrier_info = CarrierInfo { - loop_var_name: loop_var_name.clone(), - loop_var_id, - carriers, - trim_helper: None, // Phase 171-C-5: No Trim pattern by default - }; + // Step 2: Use CarrierInfo::from_variable_map as primary initialization method + let mut carrier_info = CarrierInfo::from_variable_map( + loop_var_name.clone(), + &variable_map_hashmap, + )?; + + // Step 3: Apply exclusions if provided (Pattern 2 specific) + if let Some(excluded) = exclude_carriers { + carrier_info.carriers.retain(|c| !excluded.contains(&c.name.as_str())); + } Ok((loop_var_name, loop_var_id, carrier_info)) } diff --git a/src/mir/join_ir/lowering/carrier_info.rs b/src/mir/join_ir/lowering/carrier_info.rs index 4afcfd58..4e503224 100644 --- a/src/mir/join_ir/lowering/carrier_info.rs +++ b/src/mir/join_ir/lowering/carrier_info.rs @@ -5,6 +5,15 @@ //! without hardcoded variable names or ValueIds. //! //! Phase 193-2: Enhanced builder methods for flexible construction +//! +//! # Phase 183-2: Primary CarrierInfo Construction +//! +//! This module is the single source of truth for CarrierInfo initialization. +//! Both MIR and JoinIR contexts use `CarrierInfo::from_variable_map()` as the +//! primary construction method. +//! +//! - MIR context: `common_init.rs` delegates to this module +//! - JoinIR context: Uses `from_variable_map()` directly use crate::mir::ValueId; use std::collections::HashMap;