Files
hakorune/docs/development/current/main/phase-136-context-box-progress.md
nyash-codex 076f193f76 refactor(mir): Extract TypeContext from MirBuilder (Phase 136 follow-up 1/7)
## 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>
2025-12-15 19:59:55 +09:00

91 lines
3.0 KiB
Markdown

# 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: ValueIdGenerator`
- `block_gen: BasicBlockIdGenerator`
- `next_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: u32`
- `binding_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. **段階的移行** - 全フィールドを一度に移行せず、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) (対象ファイル)