diff --git a/src/mir/join_ir/lowering/funcscanner_trim.rs b/src/mir/join_ir/lowering/funcscanner_trim.rs index a8ce29e0..7b84e6e7 100644 --- a/src/mir/join_ir/lowering/funcscanner_trim.rs +++ b/src/mir/join_ir/lowering/funcscanner_trim.rs @@ -62,13 +62,17 @@ pub fn lower_funcscanner_trim_to_joinir(module: &crate::mir::MirModule) -> Optio ) } -/// Phase 27.1-27.7: Handwritten JoinIR lowering for FuncScannerBox.trim/1 -fn lower_trim_handwritten(module: &crate::mir::MirModule) -> Option { +/// Phase 27.11: Common JoinIR builder for FuncScannerBox.trim/1 +/// +/// This function generates the JoinIR for trim/1, shared by both: +/// - lower_trim_handwritten (always uses this) +/// - lower_trim_from_mir (uses this after CFG sanity checks pass) +fn build_trim_joinir(module: &crate::mir::MirModule) -> Option { // Step 1: "FuncScannerBox.trim/1" を探す let target_func = module.functions.get("FuncScannerBox.trim/1")?; - eprintln!("[joinir/trim] Found FuncScannerBox.trim/1"); - eprintln!("[joinir/trim] MIR blocks: {}", target_func.blocks.len()); + eprintln!("[joinir/trim/build] Found FuncScannerBox.trim/1"); + eprintln!("[joinir/trim/build] MIR blocks: {}", target_func.blocks.len()); let mut join_module = JoinModule::new(); @@ -509,6 +513,15 @@ fn lower_trim_handwritten(module: &crate::mir::MirModule) -> Option Some(join_module) } +/// Phase 27.11: Handwritten lowering wrapper for FuncScannerBox.trim/1 +/// +/// This is a thin wrapper that calls the shared build_trim_joinir() function. +/// Maintains the handwritten lowering path as the baseline reference. +fn lower_trim_handwritten(module: &crate::mir::MirModule) -> Option { + eprintln!("[joinir/trim/handwritten] Using handwritten lowering path"); + build_trim_joinir(module) +} + /// Phase 27.9: MIR-based lowering for FuncScannerBox.trim/1 /// - Lightweight CFG sanity checks /// - Fallback to handwritten if MIR structure is unexpected @@ -547,8 +560,8 @@ fn lower_trim_from_mir(module: &crate::mir::MirModule) -> Option { eprintln!("[joinir/trim/mir] CFG sanity checks passed ✅"); - // Phase 27.9: Generate JoinIR (equivalent to handwritten version) - // For now, use the same structure as handwritten version - // TODO: Full MIR-based construction in future phases - lower_trim_handwritten(module) + // Phase 27.11: Generate JoinIR using shared builder + // CFG checks passed, so we can use build_trim_joinir() directly + eprintln!("[joinir/trim/mir] Calling build_trim_joinir() after CFG validation"); + build_trim_joinir(module) }