feat(naming): Phase 25.4-A - NamingBox SSOT化完了
🎯 目的: static/global 呼び出しの名前決定を src/mir/naming.rs に一本化 ✅ 実装完了: - NamingBox(src/mir/naming.rs)実装 - encode_static_method(box, method, arity) - normalize_static_global_name(func_name) - static/global 名前の正規化ロジック統一 - MIR Builder統合(SSOT使用) - src/mir/builder/decls.rs: build_static_main_box - src/mir/builder/exprs.rs: 静的メソッド呼び出し - src/mir/builder/metadata/propagate.rs: メタデータ伝播 - src/mir/builder/observe/mod.rs: Observe機能 - src/mir/builder/observe/types.rs: 型観測(新規) - VM実行器統合(SSOT使用) - src/backend/mir_interpreter/handlers/calls/global.rs - normalize_static_global_name使用 - レガシーフォールバック削除済み確認 - テスト追加 - src/tests/mir_static_box_naming.rs - encode/normalize の動作検証 📚 ドキュメント: - docs/development/architecture/mir-naming-box.md - NamingBoxの設計思想 - SSOT原則の説明 - 使用例 🎯 効果: - 名前決定ロジックが1箇所に集約 - Builder/VM で同じ正規化ルールを使用 - 将来の名前空間拡張が容易 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -6,11 +6,17 @@ impl MirInterpreter {
|
||||
func_name: &str,
|
||||
args: &[ValueId],
|
||||
) -> Result<VMValue, VMError> {
|
||||
// Normalize arity suffix for extern-like dispatch, but keep original name
|
||||
// NamingBox: static box 名の正規化(main._nop/0 → Main._nop/0 など)
|
||||
let canonical = crate::mir::naming::normalize_static_global_name(func_name);
|
||||
|
||||
// Normalize arity suffix for extern-like dispatch, but keep canonical/original name
|
||||
// for module-local function table lookup (functions may carry arity suffix).
|
||||
let base = super::super::utils::normalize_arity_suffix(func_name);
|
||||
// Module-local/global function: execute by function table if present (use original name)
|
||||
if let Some(func) = self.functions.get(func_name).cloned() {
|
||||
let base = super::super::utils::normalize_arity_suffix(&canonical);
|
||||
|
||||
// Module-local/global function: execute by function table if present.
|
||||
// まず canonical 名で探す(Main._nop/0 など)。Phase 25.x 時点では
|
||||
// レガシー名での再探索は廃止し、NamingBox 側の正規化に一本化する。
|
||||
if let Some(func) = self.functions.get(&canonical).cloned() {
|
||||
let mut argv: Vec<VMValue> = Vec::with_capacity(args.len());
|
||||
for a in args {
|
||||
argv.push(self.reg_load(*a)?);
|
||||
@ -136,7 +142,9 @@ impl MirInterpreter {
|
||||
}
|
||||
Ok(VMValue::Void)
|
||||
}
|
||||
_ => Err(self.err_with_context("global function", &format!("Unknown: {}", func_name))),
|
||||
_ => Err(
|
||||
self.err_with_context("global function", &format!("Unknown: {}", func_name)),
|
||||
),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user