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

33 lines
1.2 KiB
Rust
Raw Normal View History

refactor(builder): 箱理論リファクタリング Phase 1完了 🎯 builder_calls.rs (982行) を箱理論で責務別にモジュール分割 ## 成果 ✅ builder_calls.rs: 982行 → 766行(-216行、22%削減) ✅ calls/lowering.rs: 354行(新規、箱理論6段階パターン) ✅ calls/utils.rs: 45行(新規、ユーティリティ統一) ✅ ビルド・テスト完全成功(0エラー) ## 箱理論の実装 1. 責務ごとに箱に分離: - lowering: 関数lowering専用 - utils: ユーティリティ統一 - emit/build: Phase 2で実装予定 2. 境界を明確に: - mod.rs で公開インターフェース定義 - pub(in crate::mir::builder) で適切な可視性制御 3. いつでも戻せる: - 段階的移行、各ステップでビルド確認 - 既存API完全保持(互換性100%) 4. 巨大関数は分割: - lower_static_method_as_function: 125行 → 6段階に分解 - lower_method_as_function: 80行 → 6段階に分解 ## 箱理論6段階パターン 1. prepare_lowering_context - Context準備 2. create_function_skeleton - 関数スケルトン作成 3. setup_function_params - パラメータ設定 4. lower_function_body - 本体lowering 5. finalize_function - 関数finalize 6. restore_lowering_context - Context復元 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 削減版(766行) ## 次のステップ Phase 2: emit.rs 作成(~500行移行) Phase 3: build.rs 作成(~350行移行) 最終目標: builder_calls.rs を200行以内に 🤖 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:02:01 +09:00
//! 🎯 箱理論: Call系処理のモジュール分離
//!
//! 責務別に明確に分離された「箱」の集合:
//! - lowering: 関数loweringstatic/instance method → MIR function
//! - utils: ユーティリティresolve/parse/extract
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
//! - emit: Call命令発行統一Call/Legacy Call ✅ Phase 2完了
//! - build: Call構築function call/method call ✅ Phase 2完了
refactor(builder): 箱化 - CalleeGuardBox抽出(構造ガード専用箱) 🎯 箱理論の実践: 単一責務の箱を作る ## 箱化内容 ✅ CalleeGuardBox(約150行、テスト込み約200行) - 責務: 構造ガード専任(静的Box/ランタイムBox混線防止) - 状態: value_typesのみ保持(最小化) - ピュア関数的: Callee入力 → 検証・変換 → Callee出力 ## 実装 - src/mir/builder/calls/guard.rs: 新ファイル - CalleeGuardBox::apply_static_runtime_guard() - CalleeGuardBox::is_me_call() - CalleeGuardBox::get_box_type() - 単体テスト3件追加(me-call検出、正規化) - src/mir/builder/calls/emit.rs: 箱化移行 - emit_unified_call_impl内でCalleeGuardBox使用 - 古いapply_static_runtime_guardメソッド削除(約50行削減) - src/mir/builder/calls/mod.rs: モジュール追加 - pub mod guard;(Phase 25.1d完了マーク) ## 箱理論原則 ✅ 箱にする: 構造ガード機能を1箱に集約 ✅ 境界を作る: MirBuilderから分離、独立した責務 ✅ 戻せる: 独立箱なので切り離し・差し替え可能 ✅ テスト容易: 単体テスト3件で検証済み ## 効果 - コード整理: emit.rs 約50行削減 - 保守性向上: 構造ガードロジックが1ファイルに集約 - テスト品質: 単体テストで挙動保証 - 拡張容易: 将来の構造ガード追加が容易 ## テスト結果 - ✅ CalleeGuardBox単体テスト 3件パス - ✅ 既存テスト mir_stageb_like系 パス - ✅ ビルド成功(0エラー) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 23:21:36 +09:00
//! - guard: 構造ガード静的Box/ランタイムBox混線防止 ✅ Phase 25.1d完了
refactor(builder): 箱理論リファクタリング Phase 1完了 🎯 builder_calls.rs (982行) を箱理論で責務別にモジュール分割 ## 成果 ✅ builder_calls.rs: 982行 → 766行(-216行、22%削減) ✅ calls/lowering.rs: 354行(新規、箱理論6段階パターン) ✅ calls/utils.rs: 45行(新規、ユーティリティ統一) ✅ ビルド・テスト完全成功(0エラー) ## 箱理論の実装 1. 責務ごとに箱に分離: - lowering: 関数lowering専用 - utils: ユーティリティ統一 - emit/build: Phase 2で実装予定 2. 境界を明確に: - mod.rs で公開インターフェース定義 - pub(in crate::mir::builder) で適切な可視性制御 3. いつでも戻せる: - 段階的移行、各ステップでビルド確認 - 既存API完全保持(互換性100%) 4. 巨大関数は分割: - lower_static_method_as_function: 125行 → 6段階に分解 - lower_method_as_function: 80行 → 6段階に分解 ## 箱理論6段階パターン 1. prepare_lowering_context - Context準備 2. create_function_skeleton - 関数スケルトン作成 3. setup_function_params - パラメータ設定 4. lower_function_body - 本体lowering 5. finalize_function - 関数finalize 6. restore_lowering_context - Context復元 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 削減版(766行) ## 次のステップ Phase 2: emit.rs 作成(~500行移行) Phase 3: build.rs 作成(~350行移行) 最終目標: builder_calls.rs を200行以内に 🤖 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:02:01 +09:00
// Existing modules (already implemented elsewhere)
pub mod annotation;
pub mod call_target;
refactor(builder): 箱理論リファクタリング Phase 1完了 🎯 builder_calls.rs (982行) を箱理論で責務別にモジュール分割 ## 成果 ✅ builder_calls.rs: 982行 → 766行(-216行、22%削減) ✅ calls/lowering.rs: 354行(新規、箱理論6段階パターン) ✅ calls/utils.rs: 45行(新規、ユーティリティ統一) ✅ ビルド・テスト完全成功(0エラー) ## 箱理論の実装 1. 責務ごとに箱に分離: - lowering: 関数lowering専用 - utils: ユーティリティ統一 - emit/build: Phase 2で実装予定 2. 境界を明確に: - mod.rs で公開インターフェース定義 - pub(in crate::mir::builder) で適切な可視性制御 3. いつでも戻せる: - 段階的移行、各ステップでビルド確認 - 既存API完全保持(互換性100%) 4. 巨大関数は分割: - lower_static_method_as_function: 125行 → 6段階に分解 - lower_method_as_function: 80行 → 6段階に分解 ## 箱理論6段階パターン 1. prepare_lowering_context - Context準備 2. create_function_skeleton - 関数スケルトン作成 3. setup_function_params - パラメータ設定 4. lower_function_body - 本体lowering 5. finalize_function - 関数finalize 6. restore_lowering_context - Context復元 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 削減版(766行) ## 次のステップ Phase 2: emit.rs 作成(~500行移行) Phase 3: build.rs 作成(~350行移行) 最終目標: builder_calls.rs を200行以内に 🤖 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:02:01 +09:00
pub mod call_unified;
pub mod extern_calls;
pub mod function_lowering;
refactor(builder): 箱理論リファクタリング Phase 1完了 🎯 builder_calls.rs (982行) を箱理論で責務別にモジュール分割 ## 成果 ✅ builder_calls.rs: 982行 → 766行(-216行、22%削減) ✅ calls/lowering.rs: 354行(新規、箱理論6段階パターン) ✅ calls/utils.rs: 45行(新規、ユーティリティ統一) ✅ ビルド・テスト完全成功(0エラー) ## 箱理論の実装 1. 責務ごとに箱に分離: - lowering: 関数lowering専用 - utils: ユーティリティ統一 - emit/build: Phase 2で実装予定 2. 境界を明確に: - mod.rs で公開インターフェース定義 - pub(in crate::mir::builder) で適切な可視性制御 3. いつでも戻せる: - 段階的移行、各ステップでビルド確認 - 既存API完全保持(互換性100%) 4. 巨大関数は分割: - lower_static_method_as_function: 125行 → 6段階に分解 - lower_method_as_function: 80行 → 6段階に分解 ## 箱理論6段階パターン 1. prepare_lowering_context - Context準備 2. create_function_skeleton - 関数スケルトン作成 3. setup_function_params - パラメータ設定 4. lower_function_body - 本体lowering 5. finalize_function - 関数finalize 6. restore_lowering_context - Context復元 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 削減版(766行) ## 次のステップ Phase 2: emit.rs 作成(~500行移行) Phase 3: build.rs 作成(~350行移行) 最終目標: builder_calls.rs を200行以内に 🤖 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:02:01 +09:00
pub mod method_resolution;
pub mod special_handlers;
refactor(builder): 箱化 - CalleeGuardBox抽出(構造ガード専用箱) 🎯 箱理論の実践: 単一責務の箱を作る ## 箱化内容 ✅ CalleeGuardBox(約150行、テスト込み約200行) - 責務: 構造ガード専任(静的Box/ランタイムBox混線防止) - 状態: value_typesのみ保持(最小化) - ピュア関数的: Callee入力 → 検証・変換 → Callee出力 ## 実装 - src/mir/builder/calls/guard.rs: 新ファイル - CalleeGuardBox::apply_static_runtime_guard() - CalleeGuardBox::is_me_call() - CalleeGuardBox::get_box_type() - 単体テスト3件追加(me-call検出、正規化) - src/mir/builder/calls/emit.rs: 箱化移行 - emit_unified_call_impl内でCalleeGuardBox使用 - 古いapply_static_runtime_guardメソッド削除(約50行削減) - src/mir/builder/calls/mod.rs: モジュール追加 - pub mod guard;(Phase 25.1d完了マーク) ## 箱理論原則 ✅ 箱にする: 構造ガード機能を1箱に集約 ✅ 境界を作る: MirBuilderから分離、独立した責務 ✅ 戻せる: 独立箱なので切り離し・差し替え可能 ✅ テスト容易: 単体テスト3件で検証済み ## 効果 - コード整理: emit.rs 約50行削減 - 保守性向上: 構造ガードロジックが1ファイルに集約 - テスト品質: 単体テストで挙動保証 - 拡張容易: 将来の構造ガード追加が容易 ## テスト結果 - ✅ CalleeGuardBox単体テスト 3件パス - ✅ 既存テスト mir_stageb_like系 パス - ✅ ビルド成功(0エラー) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 23:21:36 +09:00
// New refactored modules (Box Theory Phase 1 & 2 & 25.1d)
refactor(builder): 箱理論リファクタリング Phase 1完了 🎯 builder_calls.rs (982行) を箱理論で責務別にモジュール分割 ## 成果 ✅ builder_calls.rs: 982行 → 766行(-216行、22%削減) ✅ calls/lowering.rs: 354行(新規、箱理論6段階パターン) ✅ calls/utils.rs: 45行(新規、ユーティリティ統一) ✅ ビルド・テスト完全成功(0エラー) ## 箱理論の実装 1. 責務ごとに箱に分離: - lowering: 関数lowering専用 - utils: ユーティリティ統一 - emit/build: Phase 2で実装予定 2. 境界を明確に: - mod.rs で公開インターフェース定義 - pub(in crate::mir::builder) で適切な可視性制御 3. いつでも戻せる: - 段階的移行、各ステップでビルド確認 - 既存API完全保持(互換性100%) 4. 巨大関数は分割: - lower_static_method_as_function: 125行 → 6段階に分解 - lower_method_as_function: 80行 → 6段階に分解 ## 箱理論6段階パターン 1. prepare_lowering_context - Context準備 2. create_function_skeleton - 関数スケルトン作成 3. setup_function_params - パラメータ設定 4. lower_function_body - 本体lowering 5. finalize_function - 関数finalize 6. restore_lowering_context - Context復元 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 削減版(766行) ## 次のステップ Phase 2: emit.rs 作成(~500行移行) Phase 3: build.rs 作成(~350行移行) 最終目標: builder_calls.rs を200行以内に 🤖 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:02:01 +09:00
pub mod lowering;
pub mod utils;
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
pub mod emit; // Phase 2: Call emission
pub mod build; // Phase 2: Call building
pub mod guard; // Phase 25.1d: Structural guard (static/runtime box separation)
pub mod resolver; // Phase 25.1d: Callee resolution (CallTarget → Callee)
refactor(builder): 箱理論リファクタリング Phase 1完了 🎯 builder_calls.rs (982行) を箱理論で責務別にモジュール分割 ## 成果 ✅ builder_calls.rs: 982行 → 766行(-216行、22%削減) ✅ calls/lowering.rs: 354行(新規、箱理論6段階パターン) ✅ calls/utils.rs: 45行(新規、ユーティリティ統一) ✅ ビルド・テスト完全成功(0エラー) ## 箱理論の実装 1. 責務ごとに箱に分離: - lowering: 関数lowering専用 - utils: ユーティリティ統一 - emit/build: Phase 2で実装予定 2. 境界を明確に: - mod.rs で公開インターフェース定義 - pub(in crate::mir::builder) で適切な可視性制御 3. いつでも戻せる: - 段階的移行、各ステップでビルド確認 - 既存API完全保持(互換性100%) 4. 巨大関数は分割: - lower_static_method_as_function: 125行 → 6段階に分解 - lower_method_as_function: 80行 → 6段階に分解 ## 箱理論6段階パターン 1. prepare_lowering_context - Context準備 2. create_function_skeleton - 関数スケルトン作成 3. setup_function_params - パラメータ設定 4. lower_function_body - 本体lowering 5. finalize_function - 関数finalize 6. restore_lowering_context - Context復元 ## ファイル構成 src/mir/builder/ ├── calls/ │ ├── mod.rs # 公開インターフェース │ ├── lowering.rs # 関数lowering(354行) │ └── utils.rs # ユーティリティ(45行) └── builder_calls.rs # 削減版(766行) ## 次のステップ Phase 2: emit.rs 作成(~500行移行) Phase 3: build.rs 作成(~350行移行) 最終目標: builder_calls.rs を200行以内に 🤖 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:02:01 +09:00
// Re-export public interfaces
pub use call_target::CallTarget;
pub use lowering::*;
pub use utils::*;
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 use emit::*;
pub use build::*;