Files
hakorune/src/mir/builder
tomoaki f76fb6cd3e refactor(joinir): Phase 286 P2.8 - Normalizer Hygiene(小箱化・重複削減)
- LoopBlocksStandard5: 5-block レイアウト(Pattern1/9 で使用)
- LoopBlocksWithIfPhi: 8-block レイアウト(Pattern3 で使用)
- create_phi_bindings(): phi_bindings 作成ヘルパー(全5パターンで使用)

リファクタ適用:
- Pattern1: LoopBlocksStandard5 + create_phi_bindings
- Pattern3: LoopBlocksWithIfPhi + create_phi_bindings
- Pattern4: create_phi_bindings(8-block は別構造のため据え置き)
- Pattern8: create_phi_bindings(6-block は別構造のため据え置き)
- Pattern9: LoopBlocksStandard5 + create_phi_bindings

意味論は完全不変。quick 154/154 PASS。

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 05:08:09 +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 の回帰防止)