JSON v0 Bridge
- 役割: Stage‑B / self‑host 側で生成した
Program(JSON v0)を、Rust 側のLoopFormBuilder + LoopSnapshotMergeBoxに渡して MIR を生成する薄いフロント。 - 責務:
- JSON を
ProgramV0にデシリアライズし、lower_stmt_with_vars/loop_.rsなどへ流す。 - ループについては
LoopFormJsonOpsを介して preheader/header/body/latch/continue_merge/exit のブロック ID とスナップショットを用意し、PHI 構築は LoopForm 側に委譲する。 - break / continue / exit の snapshot を
LoopSnapshotMergeBoxに渡して canonical continue_merge/backedge を構築する。
- JSON を
LoopForm/PHI の意味論を変更したい場合は、loopform_builder.rs / loop_snapshot_merge.rs を更新すること。loop_.rs 内での ad-hoc な PHI 実装は禁止。
Rust パーサー経路との関係
- 共通 SSOT:
- 制御フロー:
src/mir/ssot/cf_common.rs(branch/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 側に委譲し、入口側では構造準備のみに留める。
- Rust パーサー経路:
Bridge 固有ロジックの箱化方針
- JSON v0 → MIR の際に必要な「ブリッジ固有」の処理は、入口ファイルにベタ書きしない:
hostbridge/env/meダミーなどの特別な変数解決- Stage‑1/Stage‑B の try-result モードに合わせた throw ルーティング
- これらは
lowering/globals.rs/lowering/throw_ctx.rsなどの小さなモジュールに閉じ込め、- JSON v0 経路
- 将来の Rust パーサー self‑host 経路 から同じ箱を使い回せるようにする。
このディレクトリでは「JSON → MIR 変換」と「最低限のブリッジ設定」だけを行い、その先の最適化や意味論変更は mir/*(optimizer/pass, LoopForm, VM/LLVM)側に任せる。