Files
hakorune/src/mir/join_ir_vm_bridge_dispatch/targets.rs

73 lines
2.8 KiB
Rust
Raw Normal View History

use crate::mir::MirModule;
/// JoinIR ブリッジの実行範囲を表す enum
///
/// - `Exec`: JoinIR→VM 実行まで対応。意味論を A/B 実証済みのものに限定。
/// - `LowerOnly`: JoinIR lowering / Bridge 構造検証専用。実行は VM Route A にフォールバック。
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum JoinIrBridgeKind {
/// JoinIR→VM 実行まで対応skip/trim など、意味論を A/B 実証済み)
Exec,
/// JoinIR lowering / Bridge 構造検証専用Stage-1/Stage-B など)
LowerOnly,
}
/// JoinIR ブリッジ対象の記述子
///
/// 関数名と実行範囲Exec/LowerOnlyをペアで管理する。
#[derive(Debug, Clone, Copy)]
pub struct JoinIrTargetDesc {
/// 対象関数名MirModule.functions のキー)
pub func_name: &'static str,
/// 実行範囲
pub kind: JoinIrBridgeKind,
/// デフォルト有効化env フラグなしでも JoinIR 経路に入る)
pub default_enabled: bool,
}
/// JoinIR ブリッジ対象テーブル
///
/// Phase 32 L-4: 全対象関数を一覧化し、Exec/LowerOnly の区分を明示する。
///
/// | 関数 | Kind | デフォルト有効 | 備考 |
/// |-----|------|---------------|------|
/// | Main.skip/1 | Exec | No | PHI canary のため env 必須 |
/// | FuncScannerBox.trim/1 | Exec | Yes | A/B 実証済み、事実上本線 |
/// | Stage1UsingResolverBox.resolve_for_source/5 | LowerOnly | No | 構造検証のみ |
/// | StageBBodyExtractorBox.build_body_src/2 | LowerOnly | No | 構造検証のみ |
/// | StageBFuncScannerBox.scan_all_boxes/1 | LowerOnly | No | 構造検証のみ |
pub const JOINIR_TARGETS: &[JoinIrTargetDesc] = &[
JoinIrTargetDesc {
func_name: "Main.skip/1",
kind: JoinIrBridgeKind::Exec,
default_enabled: false, // PHI canary のため env 必須
},
JoinIrTargetDesc {
func_name: "FuncScannerBox.trim/1",
kind: JoinIrBridgeKind::Exec,
default_enabled: true, // A/B 実証済み、事実上本線
},
JoinIrTargetDesc {
func_name: "Stage1UsingResolverBox.resolve_for_source/5",
kind: JoinIrBridgeKind::LowerOnly,
default_enabled: false,
},
JoinIrTargetDesc {
func_name: "StageBBodyExtractorBox.build_body_src/2",
kind: JoinIrBridgeKind::LowerOnly,
default_enabled: false,
},
JoinIrTargetDesc {
func_name: "StageBFuncScannerBox.scan_all_boxes/1",
kind: JoinIrBridgeKind::LowerOnly,
default_enabled: false,
},
];
/// Phase 32 L-4: テーブルから対象関数を探す
pub(crate) fn find_joinir_target(module: &MirModule) -> Option<&'static JoinIrTargetDesc> {
JOINIR_TARGETS
.iter()
.find(|target| module.functions.contains_key(target.func_name))
}