P1-1: ConditionalStep lowering を1箱に隔離 - 新規作成: src/mir/join_ir/lowering/common/conditional_step_emitter.rs - emit_conditional_step_update() を carrier_update_emitter.rs から移動 - Fail-Fast 不変条件チェック追加(then_delta != else_delta) - 副作用を減らしたクリーンなインターフェース - 包括的なテストスイート(3テスト) P1-0: 境界SSOTの固定 - routing.rs: skeleton 設定をrouting層から削除 - pattern2_with_break.rs: skeleton 取得をlower()内部に閉じ込め - parity_checker から skeleton を直接取得 - skeleton の使用を Pattern2 のみに限定 P1-2: escape recognizer をSSOTに戻す - escape_pattern_recognizer.rs: 未使用フィールド削除 - quote_char, escape_char 削除(使われていない) - 責務を cond/delta 抽出のみに限定 - pattern_recognizer.rs: デフォルト値を使用 P1-3: E2Eテスト作成(実行は後回し) - apps/tests/test_pattern5b_escape_minimal.hako 作成 - body-local 変数対応後に検証予定 テスト結果: - conditional_step_emitter tests: 3 passed - Pattern2 tests: 18 passed - Regression: 0 failures 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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の実行文脈。
- lexical scope / loop/if/try のスタックと、
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はここを介して状態へアクセスする)。
- 上記 Context を束ねる入れ物(
主要エントリポイント
- ValueId/BlockId
src/mir/builder/utils.rs(MirBuilder::next_value_id()など)
- AST → MIR の基本道
src/mir/builder/stmts.rssrc/mir/builder/exprs.rs
- JoinIR merge(契約検証を含む)
src/mir/builder/control_flow/joinir/merge/mod.rssrc/mir/builder/control_flow/joinir/merge/contract_checks.rs
追加ルール(将来の変更者向け)
- 新しい状態を追加する場合は、まず「どの Context の責務か」を決めてから追加する(
MirBuilder直下に増やさない)。 - 変更後に最低限確認する:
tools/smokes/v2/profiles/integration/apps/phase135_trim_mir_verify.sh(MIR verify の回帰防止)