feat(joinir): L-2.2 Step-2 - Add Stage-B to VM bridge dispatch
Add Stage-B BodyExtractor and FuncScanner to JoinIR VM bridge dispatch: - Import stageb_body and stageb_funcscanner lowering functions - Add routing for StageBBodyExtractorBox.build_body_src/2 - Add routing for StageBFuncScannerBox.scan_all_boxes/1 - Add try_run_stageb_body() and try_run_stageb_funcscanner() (lowering verification only) Also cleanup unused imports in funcscanner_trim.rs and stage1_using_resolver.rs Note: Stage-B functions use lowering verification pattern (like Stage-1) because ArrayBox/MapBox args are not yet supported in JoinValue. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -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
|
||||
|
||||
@ -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)
|
||||
///
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user