Files
hakorune/src/mir/builder
tomoaki d81937e744 refactor(joinir): Phase 286C-2 - RewriteContext state consolidation
- Create RewriteContext struct to consolidate 11 scattered state variables
- Add 4 helper Boxes: InstructionFilterBox, ParameterBindingBox, ReturnConverterBox, TailCallDetectorBox
- Reduce instruction_rewriter.rs cognitive overhead via centralized state API
- All state mutations now go through consistent RewriteContext methods

Changes:
- New: rewrite_context.rs (94 lines) - State consolidation SSOT
- New: 4 helper Box modules (instruction_filter, parameter_binding, return_converter, tail_call_detector)
- Modified: instruction_rewriter.rs (1454 → 1421 lines)
- Modified: rewriter/mod.rs (export RewriteContext)

Benefits:
- State tracking simplified (11 variables → 1 context object)
- Clearer intent via API methods (add_exit_phi_input vs push)
- Foundation for future refactoring (Phase 286C-2.1: 3-stage pipeline)
- Zero functionality changes (pure refactoring)

Build: cargo build --release 

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-25 02:58:36 +09:00
..

MIR Builder (src/mir/builder/)

このディレクトリは Rust 側の MIR 生成AST → MIRを担う。
JoinIR の merge もここ(control_flow/joinir/merge/)が入口。

原則SSOT / Box-First

  • 状態は Context が SSOT: MirBuilder の状態は Contextに分割され、二重管理をしない。
  • ValueId 発行は SSOT: 関数内の ValueId は MirBuilder::next_value_id() を唯一入口にする。
  • 境界は Fail-Fast: JoinIR merge は contract_checks.rs で契約違反を早期検出するdebug-only

Context 構成(責務マップ)

  • core_context.rs
    • ID 生成器ValueId/BlockId/BindingId 等)と最小の共通コア状態。
  • type_context.rs
    • ValueId → 型/種別/起源NewBox 由来など)の追跡。
  • scope_context.rs
    • lexical scope / loop/if/try のスタックと、current_function / current_block の実行文脈。
  • binding_context.rs
    • 変数名 ↔ BindingId の対応shadowing の復元を含む)。
  • variable_context.rs
    • 変数解決variable_map 等)。
  • metadata_context.rs
    • span/source_hint/region観測などのメタ情報。
  • compilation_context.rs
    • コンパイル全体のレジストリBox/型レジストリ、reserved ids 等)。
  • context.rs
    • 上記 Context を束ねる入れ物(MirBuilder はここを介して状態へアクセスする)。

主要エントリポイント

  • ValueId/BlockId
    • src/mir/builder/utils.rsMirBuilder::next_value_id() など)
  • AST → MIR の基本道
    • src/mir/builder/stmts.rs
    • src/mir/builder/exprs.rs
  • JoinIR merge契約検証を含む
    • src/mir/builder/control_flow/joinir/merge/mod.rs
    • src/mir/builder/control_flow/joinir/merge/contract_checks.rs

追加ルール(将来の変更者向け)

  • 新しい状態を追加する場合は、まず「どの Context の責務か」を決めてから追加する(MirBuilder 直下に増やさない)。
  • 変更後に最低限確認する:
    • tools/smokes/v2/profiles/integration/apps/phase135_trim_mir_verify.shMIR verify の回帰防止)