Files
hakorune/src/mir/builder/calls/resolver.rs

382 lines
14 KiB
Rust
Raw Normal View History

refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
/*!
* CalleeResolverBox - Callee解決専用箱
*
* :
* - : Callee解決ロジックを1箱に集約
* - :
* - :
*
* :
* - CallTarget Callee
* - Box種別分類StaticCompiler/RuntimeData/UserDefined
* - Call引数検証
*/
use super::method_resolution;
use crate::mir::builder::type_registry::TypeRegistry;
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
use crate::mir::builder::CallTarget;
use crate::mir::definitions::call_unified::{CalleeBoxKind, TypeCertainty};
use crate::mir::{Callee, MirType, ValueId};
use std::collections::BTreeMap;
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
/// Callee解決専用箱
///
/// 箱理論:
/// - 単一責務: CallTarget → Callee の型安全な解決のみ
/// - 状態保持: 型情報参照を保持して効率化
/// - ピュア解決器: 入力CallTarget → 解決・検証 → 出力Callee
pub struct CalleeResolverBox<'a> {
/// 変数のnewbox起源マップValueId → Box名
value_origin_newbox: &'a BTreeMap<ValueId, String>,
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
/// 型情報マップValueId → MirType
value_types: &'a BTreeMap<ValueId, MirType>,
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
/// 型レジストリ(オプショナル)
type_registry: Option<&'a TypeRegistry>,
}
impl<'a> CalleeResolverBox<'a> {
/// 新しいCalleeResolverBoxを作成
pub fn new(
value_origin_newbox: &'a BTreeMap<ValueId, String>,
value_types: &'a BTreeMap<ValueId, MirType>,
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
type_registry: Option<&'a TypeRegistry>,
) -> Self {
CalleeResolverBox {
value_origin_newbox,
value_types,
type_registry,
}
}
/// CallTarget → Callee への型安全な解決
///
/// 箱理論の「境界を作る」原則:
/// - Global/Method/Constructor/Extern/Value/Closureを明確に分類
/// - 型情報を活用してbox_nameとbox_kindを決定
///
/// 🎯 TypeRegistry対応: NYASH_USE_TYPE_REGISTRY=1 で registry 優先
pub fn resolve(&self, target: CallTarget) -> Result<Callee, String> {
let use_registry = std::env::var("NYASH_USE_TYPE_REGISTRY").ok().as_deref() == Some("1");
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
match target {
CallTarget::Global(name) => {
// Prefer explicit categories; otherwise treat as module-global function
if method_resolution::is_builtin_function(&name) {
Ok(Callee::Global(name))
} else if method_resolution::is_extern_function(&name) {
Ok(Callee::Extern(name))
} else {
// Module-local or static lowered function (e.g., "Box.method/N")
Ok(Callee::Global(name))
}
}
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
CallTarget::Method {
box_type,
method,
receiver,
} => {
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
// 🔍 Debug: trace box_name resolution
let trace_enabled =
std::env::var("NYASH_CALLEE_RESOLVE_TRACE").ok().as_deref() == Some("1");
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
if trace_enabled {
eprintln!(
"[callee-resolve] receiver=%{} method={}",
receiver.0, method
);
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
eprintln!("[callee-resolve] explicit box_type: {:?}", box_type);
eprintln!("[callee-resolve] use_registry: {}", use_registry);
}
let inferred_box_type =
self.infer_box_type(receiver, box_type, trace_enabled, use_registry);
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
// Certainty is Known when we have explicit origin or Box型の型情報を持つ場合
let has_box_type = self
.value_types
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
.get(&receiver)
.map(|t| matches!(t, MirType::Box(_)))
.unwrap_or(false);
let certainty = if self.value_origin_newbox.contains_key(&receiver) || has_box_type
{
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
TypeCertainty::Known
} else {
TypeCertainty::Union
};
// Classify box kind to prevent static/runtime mixing
let box_kind = self.classify_box_kind(&inferred_box_type);
if trace_enabled {
eprintln!(
"[callee-resolve] inferred_box_name: {}",
inferred_box_type
);
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
eprintln!("[callee-resolve] box_kind: {:?}", box_kind);
}
Ok(Callee::Method {
box_name: inferred_box_type,
method,
receiver: Some(receiver),
certainty,
box_kind,
})
}
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
CallTarget::Constructor(box_type) => Ok(Callee::Constructor { box_type }),
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
CallTarget::Extern(name) => Ok(Callee::Extern(name)),
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
CallTarget::Value(func_val) => Ok(Callee::Value(func_val)),
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
CallTarget::Closure {
params,
captures,
me_capture,
} => Ok(Callee::Closure {
params,
captures,
me_capture,
}),
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
}
}
/// Box種別の分類
///
/// 箱理論の「箱にする」原則:
/// - 静的コンパイラBox群を明示的に列挙1箇所に集約
/// - ランタイムDataBox群を明示的に列挙
/// - ユーザー定義Boxをデフォルト扱い
pub fn classify_box_kind(&self, box_name: &str) -> CalleeBoxKind {
// Static compiler boxes (Stage-B, Stage-1, parsers, resolvers)
// These should ONLY appear in static method lowering, never in runtime method dispatch
match box_name {
// Stage-B compiler boxes
"StageBArgsBox" | "StageBBodyExtractorBox" | "StageBDriverBox" |
// Stage-1 using/namespace resolver boxes
"Stage1UsingResolverBox" | "BundleResolver" |
// Parser boxes
"ParserBox" | "ParserStmtBox" | "ParserExprBox" | "ParserControlBox" |
"ParserLiteralBox" | "ParserTokenBox" |
// Scanner/builder boxes
"FuncScannerBox" | "MirBuilderBox" |
// LoopSSA / Exit PHI analyzers (Stage-1/Stage-B)
"BreakFinderBox" | "PhiInjectorBox" | "LoopSSA" |
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
// Other compiler-internal boxes
"JsonFragBox"
=> CalleeBoxKind::StaticCompiler,
// Runtime data boxes (built-in types that handle actual runtime values)
"MapBox" | "ArrayBox" | "StringBox" | "IntegerBox" | "BoolBox" |
"FloatBox" | "NullBox" | "VoidBox" | "UnknownBox" |
"FileBox" | "ConsoleBox" | "PathBox"
=> CalleeBoxKind::RuntimeData,
// Everything else is user-defined
_ => CalleeBoxKind::UserDefined,
}
}
/// Call引数の検証
///
/// 既知の関数/メソッドについてarity等を検証
pub fn validate_args(&self, callee: &Callee, args: &[ValueId]) -> Result<(), String> {
match callee {
Callee::Global(name) => {
// Check known global functions
match name.as_str() {
"print" | "error" | "panic" => {
if args.is_empty() {
return Err(format!("{} requires at least one argument", name));
}
}
"exit" => {
if args.len() != 1 {
return Err(
"exit requires exactly one argument (exit code)".to_string()
);
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
}
}
_ => {} // Unknown functions pass through
}
}
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
Callee::Method {
box_name, method, ..
} => {
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
// Validate known methods
match (box_name.as_str(), method.as_str()) {
("ArrayBox", "get") | ("ArrayBox", "set") => {
if args.is_empty() {
return Err(format!("ArrayBox.{} requires an index", method));
}
}
_ => {} // Unknown methods pass through
}
}
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
_ => {} // Other callee types don't have validation yet
}
Ok(())
}
/// Box型の推論内部ヘルパー
///
/// 優先順位:
/// 1. TypeRegistryNYASH_USE_TYPE_REGISTRY=1の場合
/// 2. value_typesMirType::Box
/// 3. value_origin_newbox起源情報
/// 4. "UnknownBox"(フォールバック)
fn infer_box_type(
&self,
receiver: ValueId,
explicit_box_type: Option<String>,
trace_enabled: bool,
use_registry: bool,
) -> String {
explicit_box_type.unwrap_or_else(|| {
// 🎯 TypeRegistry 対応: 優先して registry から推論
if use_registry {
if let Some(reg) = self.type_registry {
let inferred = reg.infer_class(receiver, None);
if trace_enabled {
eprintln!("[callee-resolve] from_registry: {}", inferred);
// トレースチェーン表示
let chain = reg.trace_origin(receiver);
if !chain.is_empty() {
eprintln!("[callee-resolve] trace_chain: {:?}", chain);
}
}
return inferred;
}
}
// 従来: BTreeMap から推論型情報を優先し、origin は補助とする)
let from_type = self.value_types.get(&receiver).and_then(|t| match t {
MirType::Box(box_name) => Some(box_name.clone()),
_ => None,
});
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
let from_origin = self.value_origin_newbox.get(&receiver).cloned();
if trace_enabled {
eprintln!("[callee-resolve] from_type: {:?}", from_type);
eprintln!("[callee-resolve] from_origin: {:?}", from_origin);
}
// 型情報MirTypeがある場合はそれを優先し、無い場合のみ origin にフォールバックする。
from_type.or(from_origin).unwrap_or_else(|| {
if trace_enabled {
eprintln!("[callee-resolve] FALLBACK: UnknownBox");
}
"UnknownBox".to_string()
})
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
})
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_classify_static_compiler_boxes() {
let value_origin = BTreeMap::new();
let value_types = BTreeMap::new();
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
let resolver = CalleeResolverBox::new(&value_origin, &value_types, None);
// Stage-B boxes
assert_eq!(
resolver.classify_box_kind("StageBArgsBox"),
CalleeBoxKind::StaticCompiler
);
assert_eq!(
resolver.classify_box_kind("StageBDriverBox"),
CalleeBoxKind::StaticCompiler
);
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
// Stage-1 boxes
assert_eq!(
resolver.classify_box_kind("Stage1UsingResolverBox"),
CalleeBoxKind::StaticCompiler
);
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
// Parser boxes
assert_eq!(
resolver.classify_box_kind("ParserBox"),
CalleeBoxKind::StaticCompiler
);
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
}
#[test]
fn test_classify_runtime_data_boxes() {
let value_origin = BTreeMap::new();
let value_types = BTreeMap::new();
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
let resolver = CalleeResolverBox::new(&value_origin, &value_types, None);
assert_eq!(
resolver.classify_box_kind("MapBox"),
CalleeBoxKind::RuntimeData
);
assert_eq!(
resolver.classify_box_kind("ArrayBox"),
CalleeBoxKind::RuntimeData
);
assert_eq!(
resolver.classify_box_kind("StringBox"),
CalleeBoxKind::RuntimeData
);
assert_eq!(
resolver.classify_box_kind("UnknownBox"),
CalleeBoxKind::RuntimeData
);
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
}
#[test]
fn test_classify_user_defined_boxes() {
let value_origin = BTreeMap::new();
let value_types = BTreeMap::new();
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
let resolver = CalleeResolverBox::new(&value_origin, &value_types, None);
assert_eq!(
resolver.classify_box_kind("MyCustomBox"),
CalleeBoxKind::UserDefined
);
assert_eq!(
resolver.classify_box_kind("PersonBox"),
CalleeBoxKind::UserDefined
);
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
}
#[test]
fn test_resolve_global() {
let value_origin = BTreeMap::new();
let value_types = BTreeMap::new();
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
let resolver = CalleeResolverBox::new(&value_origin, &value_types, None);
let target = CallTarget::Global("print".to_string());
let result = resolver.resolve(target).unwrap();
match result {
Callee::Global(name) => assert_eq!(name, "print"),
_ => panic!("Expected Global callee"),
}
}
#[test]
fn test_resolve_constructor() {
let value_origin = BTreeMap::new();
let value_types = BTreeMap::new();
refactor(builder): Boxification Phase 2 - CalleeResolverBox実装完了 箱理論の実践:Callee解決ロジックを独立した箱に集約 - 単一責務:CallTarget → Callee の型安全な解決のみ - 状態最小:型情報参照のみ保持(変更なし) - ピュア関数的:入力→解決・検証→出力 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/resolver.rs - CalleeResolverBox構造体(~300行、テスト含む) - 3つの主要メソッド:resolve/classify_box_kind/validate_args 2. 既存関数の移動・統合 - call_unified::convert_target_to_callee → CalleeResolverBox::resolve - call_unified::classify_box_kind → CalleeResolverBox::classify_box_kind - call_unified::validate_call_args → CalleeResolverBox::validate_args 3. emit.rs更新 - CalleeResolverBoxを使用するように変更 - 2箇所でインスタンス化(resolve用、validate用) 4. call_unified.rs整理 - 旧関数をDEPRECATEDコメントに置き換え(参照用に残す) - ~150行削減 5. テスト完備 - 5つのユニットテスト(all passed ✅) - 既存テスト互換性維持(guard tests, mir_stageb tests passed) 箱化効果: - 責務分離:Callee解決ロジックが独立したモジュールに - 再利用性:CalleeResolverBoxは他のコンテキストでも使用可能 - テスト容易性:モックや型情報を簡単に注入できる設計 - 保守性向上:変更箇所が明確(resolver.rs のみ) Phase 25.1d 進捗: - Phase 1: CalleeGuardBox ✅ 完了 - Phase 2: CalleeResolverBox ✅ 完了(本コミット) - 次候補: 統合的boxification(オプショナル) ビルド・テスト: - cargo build --release: ✅ 成功 - guard tests (3): ✅ all passed - resolver tests (5): ✅ all passed - mir_stageb tests (5/6): ✅ passed(1つは既存のusing問題)
2025-11-17 23:35:04 +09:00
let resolver = CalleeResolverBox::new(&value_origin, &value_types, None);
let target = CallTarget::Constructor("StringBox".to_string());
let result = resolver.resolve(target).unwrap();
match result {
Callee::Constructor { box_type } => assert_eq!(box_type, "StringBox"),
_ => panic!("Expected Constructor callee"),
}
}
}