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

177 lines
6.3 KiB
Rust
Raw Normal View History

refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
//! 🎯 箱理論: Call命令発行専用モジュール
//!
//! 責務: MIR Call命令の発行のみ
//! - emit_unified_call: 統一Call発行Phase 3対応
//! - emit_legacy_call: レガシーCall発行既存互換
//! - emit_global_call/emit_method_call/emit_constructor_call: 便利ラッパー
use super::super::{EffectMask, MirBuilder, MirInstruction, ValueId};
use super::CallTarget;
use crate::mir::definitions::call_unified::Callee;
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
impl MirBuilder {
refactor(builder): Phase 3-A - UnifiedCallEmitterBox実装完了 箱理論の実践:統一Call発行ロジックを独立した箱に集約 - 単一責務:統一Call発行のみ(Legacy Callは別モジュール) - 状態レス:MirBuilderを引数で受け取る設計 - ピュア関数的:入力CallTarget → 解決・発行 → MirCall命令 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/unified_emitter.rs (~250行) - UnifiedCallEmitterBox構造体 - 4つの主要メソッド: * emit_unified_call (公開API) * emit_unified_call_impl (コア実装) * emit_global_unified (Global関数呼び出し) * emit_value_unified (第一級関数呼び出し) 2. emit.rs からロジック移動 - emit_unified_call → 委譲に変更(1行) - emit_unified_call_impl → 削除(~150行削減) - emit_global_unified → 削除(委譲に変更) - emit_value_unified → 削除(委譲に変更) - try_global_fallback_handlers → pub(super)に変更 - materialize_receiver_in_callee → pub(super)に変更 3. mod.rs更新 - unified_emitter モジュール追加 箱化効果(Phase 3-A単独): - emit.rs: 467行 → 261行(-206行、44%削減!) - unified_emitter.rs: 250行(新規、Unified専用箱) - 読みやすさ大幅向上:統一Call発行ロジックが独立 - 責務分離明確化:Legacy/Unifiedの完全分離 Phase 3 進捗: - Phase 3-A: UnifiedCallEmitterBox ✅ 完了(本コミット) - Phase 3-B: EffectsAnalyzerBox ⏳ 次の目標 - Phase 3-C: CallMaterializerBox ⏳ 最終目標 ビルド・テスト: - cargo build --release: ✅ 成功 - 既存機能互換性: ✅ 完全保持
2025-11-17 23:49:18 +09:00
/// Unified call emission - delegates to UnifiedCallEmitterBox
/// 箱理論: 統一Call発行ロジックを unified_emitter.rs に集約
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
pub fn emit_unified_call(
&mut self,
dst: Option<ValueId>,
target: CallTarget,
args: Vec<ValueId>,
) -> Result<(), String> {
refactor(builder): Phase 3-A - UnifiedCallEmitterBox実装完了 箱理論の実践:統一Call発行ロジックを独立した箱に集約 - 単一責務:統一Call発行のみ(Legacy Callは別モジュール) - 状態レス:MirBuilderを引数で受け取る設計 - ピュア関数的:入力CallTarget → 解決・発行 → MirCall命令 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/unified_emitter.rs (~250行) - UnifiedCallEmitterBox構造体 - 4つの主要メソッド: * emit_unified_call (公開API) * emit_unified_call_impl (コア実装) * emit_global_unified (Global関数呼び出し) * emit_value_unified (第一級関数呼び出し) 2. emit.rs からロジック移動 - emit_unified_call → 委譲に変更(1行) - emit_unified_call_impl → 削除(~150行削減) - emit_global_unified → 削除(委譲に変更) - emit_value_unified → 削除(委譲に変更) - try_global_fallback_handlers → pub(super)に変更 - materialize_receiver_in_callee → pub(super)に変更 3. mod.rs更新 - unified_emitter モジュール追加 箱化効果(Phase 3-A単独): - emit.rs: 467行 → 261行(-206行、44%削減!) - unified_emitter.rs: 250行(新規、Unified専用箱) - 読みやすさ大幅向上:統一Call発行ロジックが独立 - 責務分離明確化:Legacy/Unifiedの完全分離 Phase 3 進捗: - Phase 3-A: UnifiedCallEmitterBox ✅ 完了(本コミット) - Phase 3-B: EffectsAnalyzerBox ⏳ 次の目標 - Phase 3-C: CallMaterializerBox ⏳ 最終目標 ビルド・テスト: - cargo build --release: ✅ 成功 - 既存機能互換性: ✅ 完全保持
2025-11-17 23:49:18 +09:00
super::unified_emitter::UnifiedCallEmitterBox::emit_unified_call(self, dst, target, args)
}
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
/// Legacy call fallback - preserves existing behavior
pub fn emit_legacy_call(
&mut self,
dst: Option<ValueId>,
target: CallTarget,
args: Vec<ValueId>,
) -> Result<(), String> {
match target {
CallTarget::Method {
receiver,
method,
box_type: _,
} => {
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
// LEGACY PATH (after unified migration):
// Instance→Function rewrite is centralized in unified call path.
// Legacy path no longer functionizes; always use Box/Plugin call here.
// CRITICAL FIX: Prevent bouncing back to emit_unified_call
// Set flag to prevent emit_box_or_plugin_call from calling emit_unified_call
let prev_flag = self.in_unified_boxcall_fallback;
self.in_unified_boxcall_fallback = true;
let result =
self.emit_box_or_plugin_call(dst, receiver, method, None, args, EffectMask::IO);
self.in_unified_boxcall_fallback = prev_flag;
result
}
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
CallTarget::Constructor(box_type) => {
// Use existing NewBox
let dst = dst.ok_or("Constructor must have destination")?;
self.emit_instruction(MirInstruction::NewBox {
dst,
box_type,
args,
})
}
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
CallTarget::Extern(name) => {
// Use existing ExternCall
let mut args = args;
crate::mir::builder::ssa::local::finalize_args(self, &mut args);
let parts: Vec<&str> = name.splitn(2, '.').collect();
let (iface, method) = if parts.len() == 2 {
(parts[0].to_string(), parts[1].to_string())
} else {
("nyash".to_string(), name)
};
self.emit_instruction(MirInstruction::ExternCall {
dst,
iface_name: iface,
method_name: method,
args,
effects: EffectMask::IO,
})
}
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
CallTarget::Global(name) => {
super::unified_emitter::UnifiedCallEmitterBox::emit_global_unified(
self, dst, name, args,
)
}
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
CallTarget::Value(func_val) => {
super::unified_emitter::UnifiedCallEmitterBox::emit_value_unified(
self, dst, func_val, args,
)
}
CallTarget::Closure {
params,
captures,
me_capture,
} => {
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
let dst = dst.ok_or("Closure creation must have destination")?;
self.emit_instruction(MirInstruction::NewClosure {
dst,
params,
body: vec![], // Empty body for now
captures,
me: me_capture,
})
}
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
}
}
// Phase 2 Migration: Convenience methods that use emit_unified_call
/// Emit a global function call (print, panic, etc.)
pub fn emit_global_call(
&mut self,
dst: Option<ValueId>,
name: String,
args: Vec<ValueId>,
) -> Result<(), String> {
self.emit_unified_call(dst, CallTarget::Global(name), args)
}
/// Emit a method call (box.method)
pub fn emit_method_call(
&mut self,
dst: Option<ValueId>,
receiver: ValueId,
method: String,
args: Vec<ValueId>,
) -> Result<(), String> {
self.emit_unified_call(
dst,
CallTarget::Method {
box_type: None, // Auto-infer
method,
receiver,
},
args,
)
}
/// Emit a constructor call (new BoxType)
pub fn emit_constructor_call(
&mut self,
dst: ValueId,
box_type: String,
args: Vec<ValueId>,
) -> Result<(), String> {
self.emit_unified_call(Some(dst), CallTarget::Constructor(box_type), args)
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
}
// ========================================
// Private helper methods (small functions)
// ========================================
refactor(builder): Phase 3-B,C完了 - 読みやすさ革命達成! 箱理論の完全実践:Call系処理を9個の専用箱で完全分離 - Phase 3-B: EffectsAnalyzerBox(エフェクト解析専用) - Phase 3-C: CallMaterializerBox(Call前処理専用) 実装内容: 【Phase 3-B: EffectsAnalyzerBox】 1. 新規ファイル作成 - src/mir/builder/calls/effects_analyzer.rs (~155行) - compute_call_effects: Calleeから副作用マスクを計算 - is_pure_method: Pureメソッド判定 - 5つのユニットテスト ✅ 2. call_unified.rs整理 - compute_call_effects → 委譲に変更 - is_pure_method → 削除 - ~50行削減 【Phase 3-C: CallMaterializerBox】 1. 新規ファイル作成 - src/mir/builder/calls/materializer.rs (~151行) - try_global_fallback_handlers: Global関数フォールバック - materialize_receiver_in_callee: Receiver実体化 - Call前処理全般を集約 2. emit.rs整理 - 2つの大きな関数を委譲に変更 - ~115行削減 3. unified_emitter.rs更新 - CallMaterializerBox経由に変更 箱化効果(Phase 3全体): 【劇的な削減】 - emit.rs: 467行 → 164行(-303行、65%削減!) - call_unified.rs: 144行 → 98行(-46行、32%削減!) 【新規箱(責務明確・読みやすい)】 - unified_emitter.rs: 250行(統一Call発行専用) - effects_analyzer.rs: 155行(エフェクト解析専用) - materializer.rs: 151行(Call前処理専用) 【読みやすさ革命】 - ✅ 500行超えファイル根絶(最大489行まで) - ✅ 責務分離完璧(各ファイルが単一責務) - ✅ 9個の専用箱で管理(guard/resolver/emitter/effects/materializer) - ✅ テスト容易性劇的向上(独立した箱で簡単テスト) Phase 3 最終状態: - Phase 3-A: UnifiedCallEmitterBox ✅ - Phase 3-B: EffectsAnalyzerBox ✅ - Phase 3-C: CallMaterializerBox ✅ - 読みやすさ革命 ✅ 完全達成! ビルド・テスト: - cargo build --release: ✅ 成功 - effects_analyzer tests (5): ✅ all passed - 既存機能互換性: ✅ 完全保持
2025-11-17 23:57:04 +09:00
/// Try fallback handlers for global functions (delegates to CallMaterializerBox)
#[allow(dead_code)]
refactor(builder): Phase 3-A - UnifiedCallEmitterBox実装完了 箱理論の実践:統一Call発行ロジックを独立した箱に集約 - 単一責務:統一Call発行のみ(Legacy Callは別モジュール) - 状態レス:MirBuilderを引数で受け取る設計 - ピュア関数的:入力CallTarget → 解決・発行 → MirCall命令 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/unified_emitter.rs (~250行) - UnifiedCallEmitterBox構造体 - 4つの主要メソッド: * emit_unified_call (公開API) * emit_unified_call_impl (コア実装) * emit_global_unified (Global関数呼び出し) * emit_value_unified (第一級関数呼び出し) 2. emit.rs からロジック移動 - emit_unified_call → 委譲に変更(1行) - emit_unified_call_impl → 削除(~150行削減) - emit_global_unified → 削除(委譲に変更) - emit_value_unified → 削除(委譲に変更) - try_global_fallback_handlers → pub(super)に変更 - materialize_receiver_in_callee → pub(super)に変更 3. mod.rs更新 - unified_emitter モジュール追加 箱化効果(Phase 3-A単独): - emit.rs: 467行 → 261行(-206行、44%削減!) - unified_emitter.rs: 250行(新規、Unified専用箱) - 読みやすさ大幅向上:統一Call発行ロジックが独立 - 責務分離明確化:Legacy/Unifiedの完全分離 Phase 3 進捗: - Phase 3-A: UnifiedCallEmitterBox ✅ 完了(本コミット) - Phase 3-B: EffectsAnalyzerBox ⏳ 次の目標 - Phase 3-C: CallMaterializerBox ⏳ 最終目標 ビルド・テスト: - cargo build --release: ✅ 成功 - 既存機能互換性: ✅ 完全保持
2025-11-17 23:49:18 +09:00
pub(super) fn try_global_fallback_handlers(
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
&mut self,
dst: Option<ValueId>,
name: &str,
args: &[ValueId],
) -> Result<Option<()>, String> {
super::materializer::CallMaterializerBox::try_global_fallback_handlers(
self, dst, name, args,
)
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
}
refactor(builder): Phase 3-B,C完了 - 読みやすさ革命達成! 箱理論の完全実践:Call系処理を9個の専用箱で完全分離 - Phase 3-B: EffectsAnalyzerBox(エフェクト解析専用) - Phase 3-C: CallMaterializerBox(Call前処理専用) 実装内容: 【Phase 3-B: EffectsAnalyzerBox】 1. 新規ファイル作成 - src/mir/builder/calls/effects_analyzer.rs (~155行) - compute_call_effects: Calleeから副作用マスクを計算 - is_pure_method: Pureメソッド判定 - 5つのユニットテスト ✅ 2. call_unified.rs整理 - compute_call_effects → 委譲に変更 - is_pure_method → 削除 - ~50行削減 【Phase 3-C: CallMaterializerBox】 1. 新規ファイル作成 - src/mir/builder/calls/materializer.rs (~151行) - try_global_fallback_handlers: Global関数フォールバック - materialize_receiver_in_callee: Receiver実体化 - Call前処理全般を集約 2. emit.rs整理 - 2つの大きな関数を委譲に変更 - ~115行削減 3. unified_emitter.rs更新 - CallMaterializerBox経由に変更 箱化効果(Phase 3全体): 【劇的な削減】 - emit.rs: 467行 → 164行(-303行、65%削減!) - call_unified.rs: 144行 → 98行(-46行、32%削減!) 【新規箱(責務明確・読みやすい)】 - unified_emitter.rs: 250行(統一Call発行専用) - effects_analyzer.rs: 155行(エフェクト解析専用) - materializer.rs: 151行(Call前処理専用) 【読みやすさ革命】 - ✅ 500行超えファイル根絶(最大489行まで) - ✅ 責務分離完璧(各ファイルが単一責務) - ✅ 9個の専用箱で管理(guard/resolver/emitter/effects/materializer) - ✅ テスト容易性劇的向上(独立した箱で簡単テスト) Phase 3 最終状態: - Phase 3-A: UnifiedCallEmitterBox ✅ - Phase 3-B: EffectsAnalyzerBox ✅ - Phase 3-C: CallMaterializerBox ✅ - 読みやすさ革命 ✅ 完全達成! ビルド・テスト: - cargo build --release: ✅ 成功 - effects_analyzer tests (5): ✅ all passed - 既存機能互換性: ✅ 完全保持
2025-11-17 23:57:04 +09:00
/// Ensure receiver is materialized in Callee::Method (delegates to CallMaterializerBox)
#[allow(dead_code)]
refactor(builder): Phase 3-A - UnifiedCallEmitterBox実装完了 箱理論の実践:統一Call発行ロジックを独立した箱に集約 - 単一責務:統一Call発行のみ(Legacy Callは別モジュール) - 状態レス:MirBuilderを引数で受け取る設計 - ピュア関数的:入力CallTarget → 解決・発行 → MirCall命令 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/unified_emitter.rs (~250行) - UnifiedCallEmitterBox構造体 - 4つの主要メソッド: * emit_unified_call (公開API) * emit_unified_call_impl (コア実装) * emit_global_unified (Global関数呼び出し) * emit_value_unified (第一級関数呼び出し) 2. emit.rs からロジック移動 - emit_unified_call → 委譲に変更(1行) - emit_unified_call_impl → 削除(~150行削減) - emit_global_unified → 削除(委譲に変更) - emit_value_unified → 削除(委譲に変更) - try_global_fallback_handlers → pub(super)に変更 - materialize_receiver_in_callee → pub(super)に変更 3. mod.rs更新 - unified_emitter モジュール追加 箱化効果(Phase 3-A単独): - emit.rs: 467行 → 261行(-206行、44%削減!) - unified_emitter.rs: 250行(新規、Unified専用箱) - 読みやすさ大幅向上:統一Call発行ロジックが独立 - 責務分離明確化:Legacy/Unifiedの完全分離 Phase 3 進捗: - Phase 3-A: UnifiedCallEmitterBox ✅ 完了(本コミット) - Phase 3-B: EffectsAnalyzerBox ⏳ 次の目標 - Phase 3-C: CallMaterializerBox ⏳ 最終目標 ビルド・テスト: - cargo build --release: ✅ 成功 - 既存機能互換性: ✅ 完全保持
2025-11-17 23:49:18 +09:00
pub(super) fn materialize_receiver_in_callee(
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
&mut self,
callee: Callee,
) -> Result<Callee, String> {
refactor(builder): Phase 3-B,C完了 - 読みやすさ革命達成! 箱理論の完全実践:Call系処理を9個の専用箱で完全分離 - Phase 3-B: EffectsAnalyzerBox(エフェクト解析専用) - Phase 3-C: CallMaterializerBox(Call前処理専用) 実装内容: 【Phase 3-B: EffectsAnalyzerBox】 1. 新規ファイル作成 - src/mir/builder/calls/effects_analyzer.rs (~155行) - compute_call_effects: Calleeから副作用マスクを計算 - is_pure_method: Pureメソッド判定 - 5つのユニットテスト ✅ 2. call_unified.rs整理 - compute_call_effects → 委譲に変更 - is_pure_method → 削除 - ~50行削減 【Phase 3-C: CallMaterializerBox】 1. 新規ファイル作成 - src/mir/builder/calls/materializer.rs (~151行) - try_global_fallback_handlers: Global関数フォールバック - materialize_receiver_in_callee: Receiver実体化 - Call前処理全般を集約 2. emit.rs整理 - 2つの大きな関数を委譲に変更 - ~115行削減 3. unified_emitter.rs更新 - CallMaterializerBox経由に変更 箱化効果(Phase 3全体): 【劇的な削減】 - emit.rs: 467行 → 164行(-303行、65%削減!) - call_unified.rs: 144行 → 98行(-46行、32%削減!) 【新規箱(責務明確・読みやすい)】 - unified_emitter.rs: 250行(統一Call発行専用) - effects_analyzer.rs: 155行(エフェクト解析専用) - materializer.rs: 151行(Call前処理専用) 【読みやすさ革命】 - ✅ 500行超えファイル根絶(最大489行まで) - ✅ 責務分離完璧(各ファイルが単一責務) - ✅ 9個の専用箱で管理(guard/resolver/emitter/effects/materializer) - ✅ テスト容易性劇的向上(独立した箱で簡単テスト) Phase 3 最終状態: - Phase 3-A: UnifiedCallEmitterBox ✅ - Phase 3-B: EffectsAnalyzerBox ✅ - Phase 3-C: CallMaterializerBox ✅ - 読みやすさ革命 ✅ 完全達成! ビルド・テスト: - cargo build --release: ✅ 成功 - effects_analyzer tests (5): ✅ all passed - 既存機能互換性: ✅ 完全保持
2025-11-17 23:57:04 +09:00
super::materializer::CallMaterializerBox::materialize_receiver_in_callee(self, callee)
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
}
refactor(builder): Phase 3-A - UnifiedCallEmitterBox実装完了 箱理論の実践:統一Call発行ロジックを独立した箱に集約 - 単一責務:統一Call発行のみ(Legacy Callは別モジュール) - 状態レス:MirBuilderを引数で受け取る設計 - ピュア関数的:入力CallTarget → 解決・発行 → MirCall命令 実装内容: 1. 新規ファイル作成 - src/mir/builder/calls/unified_emitter.rs (~250行) - UnifiedCallEmitterBox構造体 - 4つの主要メソッド: * emit_unified_call (公開API) * emit_unified_call_impl (コア実装) * emit_global_unified (Global関数呼び出し) * emit_value_unified (第一級関数呼び出し) 2. emit.rs からロジック移動 - emit_unified_call → 委譲に変更(1行) - emit_unified_call_impl → 削除(~150行削減) - emit_global_unified → 削除(委譲に変更) - emit_value_unified → 削除(委譲に変更) - try_global_fallback_handlers → pub(super)に変更 - materialize_receiver_in_callee → pub(super)に変更 3. mod.rs更新 - unified_emitter モジュール追加 箱化効果(Phase 3-A単独): - emit.rs: 467行 → 261行(-206行、44%削減!) - unified_emitter.rs: 250行(新規、Unified専用箱) - 読みやすさ大幅向上:統一Call発行ロジックが独立 - 責務分離明確化:Legacy/Unifiedの完全分離 Phase 3 進捗: - Phase 3-A: UnifiedCallEmitterBox ✅ 完了(本コミット) - Phase 3-B: EffectsAnalyzerBox ⏳ 次の目標 - Phase 3-C: CallMaterializerBox ⏳ 最終目標 ビルド・テスト: - cargo build --release: ✅ 成功 - 既存機能互換性: ✅ 完全保持
2025-11-17 23:49:18 +09:00
// ✅ 箱化完了:
// - emit_unified_call_impl → UnifiedCallEmitterBox::emit_unified_call_impl (unified_emitter.rs)
// - emit_global_unified → UnifiedCallEmitterBox::emit_global_unified (unified_emitter.rs)
// - emit_value_unified → UnifiedCallEmitterBox::emit_value_unified (unified_emitter.rs)
// - apply_static_runtime_guard → CalleeGuardBox::apply_static_runtime_guard (guard.rs)
refactor(builder): 箱理論リファクタリング Phase 2完了 - 驚異的94%削減達成! 🎯 目標75%削減を大幅に超える94%削減を達成! ## Phase 2 成果 ✅ builder_calls.rs: 766行 → 60行(706行削減、92%削減) ✅ calls/emit.rs: 415行(新規、Call命令発行専用) ✅ calls/build.rs: 505行(新規、Call構築専用) ✅ ビルド・テスト成功(0エラー) ## 累積削減効果 Phase 1: 982行 → 766行(216行削減、22%削減) Phase 2: 766行 → 60行(706行削減、92%削減) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 合計: 982行 → 60行(922行削減、94%削減達成!) ## 箱理論実装詳細 ### 1. 責務ごとに箱に分離 - emit.rs: Call命令発行専用 - emit_unified_call, emit_legacy_call等 - 統一Call/LegacyCallの明確な分離 - build.rs: Call構築専用 - build_function_call, build_method_call等 - 関数Call/メソッドCallの段階的構築 - lowering.rs: 関数lowering専用(Phase 1) - utils.rs: ユーティリティ専用(Phase 1) ### 2. 境界を明確に - 各モジュールで公開インターフェース明確化 - calls/mod.rs で統一的にre-export - 内部関数は適切に隠蔽 ### 3. いつでも戻せる - builder_calls.rs で既存API完全保持 - re-exportによる完全な後方互換性 - 段階的移行で各ステップでビルド確認 ### 4. 巨大関数は分割 **emit.rs**: - emit_unified_call (元231行) → 複数の小関数に分割 - try_global_fallback_handlers (~50行) - materialize_receiver_in_callee (~30行) - emit_global_unified (~20行) **build.rs**: - build_function_call (元134行) → 7つの小関数に分割 - try_build_typeop_function (~25行) - try_handle_math_function (~60行) - build_call_args (~7行) - 各関数30-60行に収まる - build_method_call (元107行) → 5つの小関数に分割 - try_build_static_method_call (~10行) - try_build_me_method_call (~35行) - 各関数が単一の明確な責務 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ ├── emit.rs # Call発行(415行)✨ NEW │ ├── build.rs # Call構築(505行)✨ NEW │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 最小限(60行、94%削減!) ## 技術的成果 - 可読性向上: 100行超 → 30-60行の小関数 - 保守性向上: 責務分離で影響範囲最小化 - 再利用性向上: 明確なIF定義で安全使用 - テスト容易性: 小さな単位でテスト可能 ## 次のステップ候補 - Phase 3: handlers.rs 作成(オプション) - さらなる細分化(emit/unified.rs 等) - ValueId(6)エラーの根本原因調査 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Task先生 <task@anthropic.com>
2025-11-17 17:11:21 +09:00
}