refactor(joinir): Extract legacy binding path to routing_legacy_binding.rs
Phase 179-A Step 2: Separate LoopFrontendBinding JSON construction logic into dedicated module for better organization. Changes: - New file: routing_legacy_binding.rs (223 lines) - routing.rs: cf_loop_joinir_impl() simplified to 15 lines (delegates to legacy path) - Routing now clearly separates pattern-based vs. legacy binding paths Benefits: - Clear separation of concerns (pattern router vs. legacy whitelist) - routing.rs reduced from 364 to 146 lines (60% reduction) - Legacy path isolated for future deprecation
This commit is contained in:
@ -40,6 +40,19 @@ JoinIR ラインで守るべきルールを先に書いておくよ:
|
||||
- JoinIR が対応していないループパターン / if パターンは、必ず `[joinir/freeze]` 等で明示的にエラーにする。
|
||||
- LoopBuilder 等へのサイレントフォールバックは禁止。
|
||||
|
||||
7. **Param の役割(ParamRole)を分ける**
|
||||
- JoinIR 側で扱うパラメータは概念的に 3 種類に分かれる:
|
||||
- 条件専用(Condition param): 継続条件や break 条件だけに使う値
|
||||
- キャリア(Carrier param): ループ状態(pos/result など)として更新される値
|
||||
- 式結果(Expr param): ループが式として返す値
|
||||
- ExitLine / Header PHI / InstructionRewriter は **Carrier param だけ** を対象にし、Condition/Expr param は上書きしない。
|
||||
- 現状は ConditionBinding/ExitMeta/JoinFragmentMeta で役割を区別しており、将来 ParamRole enum として明示する予定。
|
||||
|
||||
8. **LoopHeader PHI dst は予約領域(上書き禁止)**
|
||||
- LoopHeaderPhiBuilder が生成したヘッダ PHI の dst ValueId は「現在のループ値」の SSOT として扱い、
|
||||
BoundaryInjector や InstructionRewriter が `Copy` などで二度書きすることを禁止する。
|
||||
- merge ラインでは「ヘッダ PHI dst に対する新しい定義が出てきたら debug モードで panic する」ことで契約違反を早期検出する。
|
||||
|
||||
---
|
||||
|
||||
## 2. 主な箱と責務
|
||||
|
||||
Reference in New Issue
Block a user