Files
hakorune/src/mir/builder/control_flow/edgecfg/api/verify.rs
2025-12-21 13:07:17 +09:00

61 lines
1.9 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
* Frag 検証関数Phase 264: Fail-Fast の置き場所)
*
* Phase 264 では空実装。
* 実装適用時Phase 265+)に検証項目を段階的に追加。
*/
use super::frag::Frag;
/// Frag の不変条件を検証Phase 265 P0: 最小チェック)
///
/// # 検証項目
/// - Phase 265 P0: exits が空でないか(最低限の健全性)
/// - Phase 265 P1+: EdgeStub.from の有効性、edge-args の整合性
///
/// # 戻り値
/// - Ok(()): 検証成功
/// - Err(String): 検証失敗(エラーメッセージ)
///
/// # Phase 265 P0
/// - デバッグガード付き最小実装(デフォルト出力は汚さない)
/// - 不変条件は edgecfg-fragments.md に文書化済み
pub fn verify_frag_invariants(frag: &Frag) -> Result<(), String> {
// Phase 265 P0: 最小チェック(デバッグビルドのみ出力)
// 1. exits が空でないか(最低限の健全性)
if frag.exits.is_empty() {
#[cfg(debug_assertions)]
eprintln!(
"[verify_frag] Warning: Frag entry={:?} has no exits (dead end?)",
frag.entry
);
}
// 2. entry の有効性(デバッグビルドのみ)
#[cfg(debug_assertions)]
{
if crate::config::env::is_joinir_debug() {
eprintln!(
"[verify_frag] Frag entry={:?}, exits={} kinds",
frag.entry,
frag.exits.len()
);
for (kind, stubs) in &frag.exits {
eprintln!(
"[verify_frag] {:?}: {} stubs",
kind,
stubs.len()
);
}
}
}
// P1+: より厳格な検証を追加
// - EdgeStub.from の有効性実際のブロックID範囲チェック
// - edge-args の長さ一致
// - terminator 語彙との整合性
Ok(())
}