feat(region): Phase 25.1l FunctionSlotRegistry完全実装

ChatGPT実装 M-1〜M-4:
- FunctionSlotRegistry: 変数スロット管理中央化
- RegionKind::Function追加
- RefKind分類統合
- 観測レイヤー完成

品質評価 (Task先生レビュー):
- 設計:  (箱理論完璧)
- 実装: M-1〜M-4全て完全
- 統合: 既存システムと高品質統合
- 影響: SSA/PHI非侵襲(観測専用)

既知問題:
- userbox_birth_to_string_vm失敗
  → 既存問題(Phase 25.1h以前から)
  → 本実装とは無関係
  → 別途調査予定

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-11-19 03:28:58 +09:00
parent 39f5256c18
commit b79697f137
10 changed files with 393 additions and 61 deletions

View File

@ -9,6 +9,8 @@ use super::{
BasicBlock, BasicBlockId, BasicBlockIdGenerator, CompareOp, ConstValue, Effect, EffectMask,
FunctionSignature, MirFunction, MirInstruction, MirModule, MirType, ValueId, ValueIdGenerator,
};
use crate::mir::region::function_slot_registry::FunctionSlotRegistry;
use crate::mir::region::RegionId;
use crate::ast::{ASTNode, LiteralValue};
use crate::mir::builder::builder_calls::CallTarget;
use std::collections::HashMap;
@ -113,6 +115,11 @@ pub struct MirBuilder {
/// 注意: compilation_contextがSomeの場合は使用されません
pub(super) value_types: HashMap<ValueId, super::MirType>,
/// 関数スコープの SlotRegistry観測専用
/// - current_function と同じライフサイクルを持つよ。
/// - 既存の variable_map/SSA には影響しない(メタデータのみ)。
pub(super) current_slot_registry: Option<FunctionSlotRegistry>,
/// 🎯 箱理論: 型情報管理の一元化TypeRegistryBox
/// NYASH_USE_TYPE_REGISTRY=1 で有効化(段階的移行用)
pub(super) type_registry: type_registry::TypeRegistry,
@ -133,6 +140,10 @@ pub struct MirBuilder {
/// Source size snapshot to detect when to rebuild the tail index
pub(super) method_tail_index_source_len: usize,
/// Region 観測用のスタックだよFunctionRegion がルート)。
/// - NYASH_REGION_TRACE=1 のときだけ使われる開発用メタデータだよ。
pub(super) current_region_stack: Vec<RegionId>,
// include guards removed
/// Loop context stacks for lowering break/continue inside nested control flow
@ -229,6 +240,7 @@ impl MirBuilder {
field_origin_class: HashMap::new(),
field_origin_by_box: HashMap::new(),
value_types: HashMap::new(),
current_slot_registry: None,
type_registry: type_registry::TypeRegistry::new(),
plugin_method_sigs,
current_static_box: None,
@ -237,6 +249,8 @@ impl MirBuilder {
method_tail_index: std::collections::HashMap::new(),
method_tail_index_source_len: 0,
current_region_stack: Vec::new(),
loop_header_stack: Vec::new(),
loop_exit_stack: Vec::new(),
if_merge_stack: Vec::new(),