# Phase 136 Follow-up: Builder Context Box化 進捗 ## 概要 builder.rs の 1219 行を責任ごとに Context Box に分割し、保守性・テスト容易性を向上させる段階的リファクタリング。 ## 完了した Context (1/7) ### ✅ TypeContext (Step 1) - 完了 **実装日**: 2025-12-15 **抽出したフィールド** (3個): - `value_types: BTreeMap` - 型注釈マップ - `value_kinds: HashMap` - 型種別マップ (Phase 26-A) - `value_origin_newbox: BTreeMap` - Box クラス名由来追跡 **ファイル**: - `/home/tomoaki/git/hakorune-selfhost/src/mir/builder/type_context.rs` (新規作成) **統合方法**: - `MirBuilder` に `type_ctx: TypeContext` フィールドを追加 - 既存フィールドは `#[deprecated]` でマーク(後方互換性維持) - 同期ヘルパー (`sync_type_ctx_to_legacy()`, `sync_legacy_to_type_ctx()`) を実装 **テスト結果**: - ✅ `cargo build --release` 成功 (警告のみ) - ✅ `cargo test --release --lib` - 997/997 PASS - ✅ `phase135_trim_mir_verify.sh` - PASS - ✅ `phase132_exit_phi_parity.sh` - 3/3 PASS **影響範囲**: - 16 ファイルで 113 箇所が deprecated フィールドを使用中 - 段階的移行により破壊的変更なし **コミット**: (次回コミット時に記載) ## 残りの Context (6/7) ### 2. CoreContext (計画中) - `value_gen: ValueIdGenerator` - `block_gen: BasicBlockIdGenerator` - `next_fn_id: u32` (将来追加予定) ### 3. ScopeContext (計画中) - `lexical_scope_stack: Vec` - `scope_stack: Vec<...>` (既存の control flow スタック) - `current_function: Option` ### 4. BindingContext (計画中) - `bindings_stack: ...` - `global_bindings: ...` - `next_binding_id: u32` - `binding_map: BTreeMap` ### 5. ControlFlowContext (計画中) - `current_basic_block: Option` - `pending_phis: Vec<...>` - `loop_header_stack: Vec` - `loop_exit_stack: Vec` - `if_merge_stack: Vec` ### 6. MetadataContext (計画中) - `metadata: ...` - `loc_gen: ...` - `source_map: ...` - `hint_sink: HintSink` ### 7. ResourceContext (計画中) - `handle_registry: ...` (将来追加予定) - その他リソース管理関連 ## 設計原則 1. **段階的移行** - 全フィールドを一度に移行せず、1-2 Context ずつ 2. **後方互換性** - 既存の public API は維持(内部で Context 経由に変更) 3. **Box-First** - 各 Context は独立した struct として配置 4. **テスト駆動** - 各段階で全テストが PASS することを確認 ## 次のステップ **優先順位 2**: CoreContext 抽出 - ValueId/BlockId 生成の中核部分 - 依存関係が少なく、分離が容易 - テスト影響範囲が小さい ## 参考資料 - [Phase 136 分析ドキュメント](./phase-136-builder-analysis.md) (前提分析) - [Builder.rs](../../../../src/mir/builder.rs) (対象ファイル)