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:
@ -3,6 +3,7 @@ use super::{MirInstruction, ValueId};
|
||||
use crate::ast::{
|
||||
ASTNode, AssignStmt, BinaryExpr, CallExpr, FieldAccessExpr, MethodCallExpr, ReturnStmt,
|
||||
};
|
||||
use crate::mir::builder::observe::types as type_trace;
|
||||
|
||||
impl super::MirBuilder {
|
||||
// Main expression dispatcher
|
||||
@ -295,10 +296,20 @@ impl super::MirBuilder {
|
||||
args: vec![],
|
||||
effects: super::EffectMask::MUT,
|
||||
})?;
|
||||
self.value_origin_newbox
|
||||
.insert(arr_id, "ArrayBox".to_string());
|
||||
self.value_origin_newbox.insert(arr_id, "ArrayBox".to_string());
|
||||
self.value_types
|
||||
.insert(arr_id, super::MirType::Box("ArrayBox".to_string()));
|
||||
// TypeRegistry + trace for deterministic debug
|
||||
self.type_registry
|
||||
.record_newbox(arr_id, "ArrayBox".to_string());
|
||||
self.type_registry
|
||||
.record_type(arr_id, super::MirType::Box("ArrayBox".to_string()));
|
||||
type_trace::origin("newbox:ArrayLiteral", arr_id, "ArrayBox");
|
||||
type_trace::ty(
|
||||
"newbox:ArrayLiteral",
|
||||
arr_id,
|
||||
&super::MirType::Box("ArrayBox".to_string()),
|
||||
);
|
||||
for e in elements {
|
||||
let v = self.build_expression_impl(e)?;
|
||||
self.emit_instruction(MirInstruction::BoxCall {
|
||||
@ -328,10 +339,19 @@ impl super::MirBuilder {
|
||||
args: vec![],
|
||||
effects: super::EffectMask::MUT,
|
||||
})?;
|
||||
self.value_origin_newbox
|
||||
.insert(map_id, "MapBox".to_string());
|
||||
self.value_origin_newbox.insert(map_id, "MapBox".to_string());
|
||||
self.value_types
|
||||
.insert(map_id, super::MirType::Box("MapBox".to_string()));
|
||||
self.type_registry
|
||||
.record_newbox(map_id, "MapBox".to_string());
|
||||
self.type_registry
|
||||
.record_type(map_id, super::MirType::Box("MapBox".to_string()));
|
||||
type_trace::origin("newbox:MapLiteral", map_id, "MapBox");
|
||||
type_trace::ty(
|
||||
"newbox:MapLiteral",
|
||||
map_id,
|
||||
&super::MirType::Box("MapBox".to_string()),
|
||||
);
|
||||
for (k, expr) in entries {
|
||||
// const string key
|
||||
let k_id = crate::mir::builder::emission::constant::emit_string(self, k);
|
||||
|
||||
Reference in New Issue
Block a user