diff --git a/src/mir/join_ir/lowering/funcscanner_trim.rs b/src/mir/join_ir/lowering/funcscanner_trim.rs index 8a1516bd..9c6cf40e 100644 --- a/src/mir/join_ir/lowering/funcscanner_trim.rs +++ b/src/mir/join_ir/lowering/funcscanner_trim.rs @@ -48,8 +48,6 @@ use crate::mir::join_ir::{ BinOpKind, CompareOp, ConstValue, JoinContId, JoinFuncId, JoinFunction, JoinInst, JoinModule, LoopExitShape, LoopHeaderShape, MirLikeInst, }; -use crate::mir::loop_form::LoopForm; -use crate::mir::query::MirQuery; use crate::mir::ValueId; /// Phase 27.9: Toggle dispatcher for trim lowering diff --git a/src/mir/join_ir/lowering/stage1_using_resolver.rs b/src/mir/join_ir/lowering/stage1_using_resolver.rs index 50bac86d..8de60f59 100644 --- a/src/mir/join_ir/lowering/stage1_using_resolver.rs +++ b/src/mir/join_ir/lowering/stage1_using_resolver.rs @@ -47,8 +47,7 @@ use crate::mir::join_ir::lowering::common::{ }; use crate::mir::join_ir::lowering::value_id_ranges::stage1_using_resolver as vid; use crate::mir::join_ir::JoinModule; -use crate::mir::loop_form::LoopForm; -use crate::mir::query::{MirQuery, MirQueryBox}; +use crate::mir::query::MirQueryBox; /// Phase 27.12: Stage1UsingResolverBox.resolve_for_source の JoinIR lowering(public dispatcher) /// diff --git a/src/mir/join_ir_vm_bridge_dispatch.rs b/src/mir/join_ir_vm_bridge_dispatch.rs index 61cfa4cb..feaa59ef 100644 --- a/src/mir/join_ir_vm_bridge_dispatch.rs +++ b/src/mir/join_ir_vm_bridge_dispatch.rs @@ -6,6 +6,8 @@ //! 判定に差し替え可能な設計になっている。 use crate::config::env::{joinir_experiment_enabled, joinir_vm_bridge_enabled}; +use crate::mir::join_ir::lowering::stageb_body::lower_stageb_body_to_joinir; +use crate::mir::join_ir::lowering::stageb_funcscanner::lower_stageb_funcscanner_to_joinir; use crate::mir::join_ir::lowering::stage1_using_resolver::lower_stage1_usingresolver_to_joinir; use crate::mir::join_ir::{lower_funcscanner_trim_to_joinir, lower_skip_ws_to_joinir, JoinFuncId}; use crate::mir::join_ir_ops::JoinValue; @@ -78,6 +80,16 @@ pub fn try_run_joinir_vm_bridge(module: &MirModule, quiet_pipe: bool) -> bool { return try_run_stage1_usingresolver(module); } + // Stage-B BodyExtractor(まだ実行には対応せず、lowering 検証のみ) + if module.functions.contains_key("StageBBodyExtractorBox.build_body_src/2") { + return try_run_stageb_body(module); + } + + // Stage-B FuncScanner(まだ実行には対応せず、lowering 検証のみ) + if module.functions.contains_key("StageBFuncScannerBox.scan_all_boxes/1") { + return try_run_stageb_funcscanner(module); + } + false } @@ -183,3 +195,61 @@ fn try_run_stage1_usingresolver(module: &MirModule) -> bool { } } } + +/// StageBBodyExtractorBox.build_body_src/2 用 JoinIR ブリッジ(検証のみ) +/// +/// Note: ArrayBox/MapBox 引数がまだ JoinValue でサポートされていないため、 +/// lowering の検証のみ行い、実際の実行は通常 VM にフォールバックする。 +fn try_run_stageb_body(module: &MirModule) -> bool { + eprintln!( + "[joinir/vm_bridge] Attempting JoinIR path for StageBBodyExtractorBox.build_body_src" + ); + + match lower_stageb_body_to_joinir(module) { + Some(join_module) => { + eprintln!( + "[joinir/vm_bridge] ✅ Stage-B Body JoinIR module generated ({} functions)", + join_module.functions.len() + ); + eprintln!( + "[joinir/vm_bridge] Note: ArrayBox/MapBox args not yet supported in JoinValue" + ); + eprintln!("[joinir/vm_bridge] Falling back to normal VM path for actual execution"); + false // 実行はまだサポートしていない + } + None => { + eprintln!("[joinir/vm_bridge] lower_stageb_body_to_joinir returned None"); + eprintln!("[joinir/vm_bridge] Falling back to normal VM path"); + false + } + } +} + +/// StageBFuncScannerBox.scan_all_boxes/1 用 JoinIR ブリッジ(検証のみ) +/// +/// Note: ArrayBox/MapBox 引数がまだ JoinValue でサポートされていないため、 +/// lowering の検証のみ行い、実際の実行は通常 VM にフォールバックする。 +fn try_run_stageb_funcscanner(module: &MirModule) -> bool { + eprintln!( + "[joinir/vm_bridge] Attempting JoinIR path for StageBFuncScannerBox.scan_all_boxes" + ); + + match lower_stageb_funcscanner_to_joinir(module) { + Some(join_module) => { + eprintln!( + "[joinir/vm_bridge] ✅ Stage-B FuncScanner JoinIR module generated ({} functions)", + join_module.functions.len() + ); + eprintln!( + "[joinir/vm_bridge] Note: ArrayBox/MapBox args not yet supported in JoinValue" + ); + eprintln!("[joinir/vm_bridge] Falling back to normal VM path for actual execution"); + false // 実行はまだサポートしていない + } + None => { + eprintln!("[joinir/vm_bridge] lower_stageb_funcscanner_to_joinir returned None"); + eprintln!("[joinir/vm_bridge] Falling back to normal VM path"); + false + } + } +}