Files
hakorune/src/mir/builder/vars
nyash-codex e404746612 refactor(mir): Phase 139-P3-B - RoutingDecision を enum 対応 + レガシー削除
- RoutingDecision の missing_caps を Vec<CapabilityTag> に変更(型安全化)
- error_tags は to_tag() メソッドで自動生成
- 全 callsite を enum variant に修正
- capability_tags モジュール(文字列定数群)を完全削除
- 全テスト PASS(型安全性向上を確認)
- フォーマット適用
2025-12-16 07:02:14 +09:00
..

mir::builder::vars(変数/スコープ系の小箱)

このディレクトリは「MIR ビルダ内の変数・スコープ」に関する小さな責務を分離するための層だよ。

責務(この層がやる)

  • レキシカルスコープ: {...} / ScopeBox の境界で local のシャドウイングを復元する。
  • AST 走査ユーティリティ: free vars 収集など、純粋な走査処理。
  • 代入の宣言ポリシー: 未宣言名への代入を Fail-Fast にする(AssignmentResolverBox)。

非責務(この層がやらない)

  • JoinIR lowering 側の名前解決(join_ir/lowering/*ScopeManager が担当)。
  • ループパターン/PHI/境界生成(control_flow/joinir/* が担当)。
  • 言語仕様の追加(この層は既存仕様の実装に限定)。

スコープ/名前解決の境界SSOT

同じ「名前」を扱っていても、層ごとに “解いている問題” が違うので混ぜない。

  • MIRこの層: variable_map + LexicalScopeGuard で「束縛の寿命・シャドウイング」を管理するSSA 変換のため)。
  • JoinIR lowering: src/mir/join_ir/lowering/scope_manager.rs は JoinIR 内の name → ValueId を解決する。
    • ExprLowererScopeManager 経由のみ で名前解決するenv を直参照しない)。
  • 解析箱: LoopConditionScopeBox / LoopBodyLocalEnv は「禁止/許可」「スケジュール」などの補助情報で、束縛そのものではない。

この境界を跨ぐ “便利メソッド” を作るのは原則禁止(責務混線の温床)。