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

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 (新規作成)

統合方法:

  • MirBuildertype_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 生成の中核部分
  • 依存関係が少なく、分離が容易
  • テスト影響範囲が小さい

参考資料