Files
hakorune/src/mir/builder
tomoaki 3bb865c6b0 refactor(mir): Separate KeepAlive/ReleaseStrong instructions (Phase 287)
Phase 287: KeepAlive/ReleaseStrong 命令分離

## 変更内容(2つの側面)

### 1. 命令セマンティクスの分離
- KeepAlive { values, drop_after: bool } を2命令に分離
  - KeepAlive { values }: スコープ終了での生存維持(PURE)
  - ReleaseStrong { values }: 変数上書き時の強参照解放(WRITE)
- 効果分析の明確化: PURE vs WRITE の境界確定

### 2. VM実行サポート
- handlers/mod.rs: KeepAlive → 完全 no-op
- handlers/mod.rs: ReleaseStrong → release_strong_refs() 呼び出し
- handlers/lifecycle.rs: handle_keepalive() 削除

## 影響範囲
- 10 ファイル修正(31箇所の出現を全変換)
- instruction.rs, builder.rs, lexical_scope.rs, methods.rs,
  display.rs, printer_helpers.rs, query.rs, joinir_id_remapper.rs,
  handlers/mod.rs, handlers/lifecycle.rs

## 検証
- 154/154 quick smoke PASS
- weak テスト回帰なし(weak_upgrade_fail, weak_basic)
- rg -n drop_after src → 0 件(完全除去確認)
- MIRダンプで release_strong/keepalive 正常表示

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

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