## Summary Extract type-related fields into dedicated TypeContext for better code organization and maintainability. First step of 7-context refactoring plan. ## Changes - **New**: src/mir/builder/type_context.rs - Consolidates value_types, value_kinds, value_origin_newbox - Provides clean API for type operations - BTreeMap/HashMap as appropriate for determinism - **Modified**: src/mir/builder.rs - Add type_ctx field to MirBuilder - Deprecate old fields (backward compat) - Add sync helpers for gradual migration - Initialize type_ctx in new() - **Doc**: phase-136-context-box-progress.md - Track refactoring progress (1/7 complete) - Document design principles - Plan next steps (CoreContext) ## Impact - 16 files with 113 deprecated field usages - No breaking changes (gradual migration) - All tests pass (997/997) ## Test Results ✅ cargo build --release (warnings only) ✅ cargo test --release --lib (997 passed) ✅ phase135_trim_mir_verify.sh (PASS) ✅ phase132_exit_phi_parity.sh (3/3 PASS) ## Next Step CoreContext extraction (ValueId/BlockId generators) Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3.0 KiB
3.0 KiB
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<ValueId, MirType>- 型注釈マップvalue_kinds: HashMap<ValueId, MirValueKind>- 型種別マップ (Phase 26-A)value_origin_newbox: BTreeMap<ValueId, String>- 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: ValueIdGeneratorblock_gen: BasicBlockIdGeneratornext_fn_id: u32(将来追加予定)
3. ScopeContext (計画中)
lexical_scope_stack: Vec<LexicalScopeFrame>scope_stack: Vec<...>(既存の control flow スタック)current_function: Option<MirFunction>
4. BindingContext (計画中)
bindings_stack: ...global_bindings: ...next_binding_id: u32binding_map: BTreeMap<String, BindingId>
5. ControlFlowContext (計画中)
current_basic_block: Option<BasicBlockId>pending_phis: Vec<...>loop_header_stack: Vec<BasicBlockId>loop_exit_stack: Vec<BasicBlockId>if_merge_stack: Vec<BasicBlockId>
6. MetadataContext (計画中)
metadata: ...loc_gen: ...source_map: ...hint_sink: HintSink
7. ResourceContext (計画中)
handle_registry: ...(将来追加予定)- その他リソース管理関連
設計原則
- 段階的移行 - 全フィールドを一度に移行せず、1-2 Context ずつ
- 後方互換性 - 既存の public API は維持(内部で Context 経由に変更)
- Box-First - 各 Context は独立した struct として配置
- テスト駆動 - 各段階で全テストが PASS することを確認
次のステップ
優先順位 2: CoreContext 抽出
- ValueId/BlockId 生成の中核部分
- 依存関係が少なく、分離が容易
- テスト影響範囲が小さい
参考資料
- Phase 136 分析ドキュメント (前提分析)
- Builder.rs (対象ファイル)