Files
hakorune/src/runner/json_v0_bridge

JSON v0 Bridge

  • 役割: StageB / selfhost 側で生成した Program(JSON v0) を、Rust 側の LoopFormBuilder + LoopSnapshotMergeBox に渡して MIR を生成する薄いフロント。
  • 責務:
    1. JSON を ProgramV0 にデシリアライズし、lower_stmt_with_vars / loop_.rs などへ流す。
    2. ループについては LoopFormJsonOps を介して preheader/header/body/latch/continue_merge/exit のブロック ID とスナップショットを用意し、PHI 構築は LoopForm 側に委譲する。
    3. break / continue / exit の snapshot を LoopSnapshotMergeBox に渡して canonical continue_merge/backedge を構築する。

LoopForm/PHI の意味論を変更したい場合は、loopform_builder.rs / loop_snapshot_merge.rs を更新すること。loop_.rs 内での ad-hoc な PHI 実装は禁止。

Rust パーサー経路との関係

  • 共通 SSOT:
    • 制御フロー: src/mir/ssot/cf_common.rsbranch/jump/compare/phi 挿入)
    • 算術・比較: src/mir/ssot/binop_lower.rs(二項演算 lowering
    • ループ形: src/mir/ssot/loop_common.rs LoopFormBuilder
  • フロントエンド(入口):
    • Rust パーサー経路: parser/* + mir/builder/* が AST から MIR を構築する。
    • JSON v0 経路: このディレクトリの lowering 群が ProgramV0 から MIR を構築する。
    • どちらも「PHI/LoopForm/CF の意味論」は mir/ssot 側に委譲し、入口側では構造準備のみに留める。

Bridge 固有ロジックの箱化方針

  • JSON v0 → MIR の際に必要な「ブリッジ固有」の処理は、入口ファイルにベタ書きしない:
    • hostbridge / env / me ダミーなどの特別な変数解決
    • Stage1/StageB の try-result モードに合わせた throw ルーティング
  • これらは lowering/globals.rs / lowering/throw_ctx.rs などの小さなモジュールに閉じ込め、
    • JSON v0 経路
    • 将来の Rust パーサー selfhost 経路 から同じ箱を使い回せるようにする。

このディレクトリでは「JSON → MIR 変換」と「最低限のブリッジ設定」だけを行い、その先の最適化や意味論変更は mir/*optimizer/pass, LoopForm, VM/LLVM側に任せる。