Files
hakorune/src/mir/builder
tomoaki 5b74b3134a refactor(orchestrator): Phase 286C-4 Step 4 - Complete 3-stage pipeline (~1150 lines removed)
Transformed merge_and_rewrite() from monolithic function to orchestrator:

**File Reduction**:
- Before: 2437 lines
- After: 1289 lines
- Removed: 1148 lines (47% reduction)

**New Architecture**:
- Stage 1: scan_blocks() - Read-only analysis (~200 lines)
- Stage 2: plan_rewrites() - Generate rewritten blocks (~550 lines)
- Stage 3: apply_rewrites() - Mutate builder (~160 lines)

**merge_and_rewrite() Now**:
- Metadata setup (~80 lines)
- Call 3-stage pipeline (~50 lines)
- DirectValue processing (~50 lines)
- Result building (~20 lines)
- Total: ~200 lines (down from ~1350)

**Benefits**:
- Clear separation of concerns (scan/plan/apply)
- No builder mutation until apply stage
- Easier to test and maintain
- Preserves all functionality

Build passes successfully. Phase 286C-4 complete.
2025-12-25 04:09:11 +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 の回帰防止)