feat(joinir): Phase 286 P3.2 - Pattern5 Plan line (loop(true) + early exit)

- Pattern5InfiniteEarlyExitPlan (Return/Break variants)
- extract_pattern5_plan() for loop(true) literal only
- normalize_pattern5_return(): 5 blocks CFG (header→body→found/step)
- normalize_pattern5_break(): 6 blocks CFG with carrier PHI
- NormalizationPlanBox exclusion for Pattern5-style loops
- Fixtures: phase286_pattern5_{return,break}_min.hako
- quick smoke 154/154 PASS

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-26 09:56:34 +09:00
parent ec55cce380
commit 22945c190c
12 changed files with 963 additions and 16 deletions

View File

@ -59,13 +59,12 @@ Related:
- 既存の `apps/tests/*.hako` fixture を再利用し、VM/LLVM parity のスモークが維持される。
- weak の語彙(`weak <expr>` / `weak_to_strong()`が同じ意味で動作するcycleは当面リーク仕様でも可
- **Phase 286planned, design-first: JoinIR Line AbsorptionJoinIR→CorePlan/Frag 収束)**
- **Phase 286✅ complete: JoinIR Line AbsorptionJoinIR→CorePlan/Frag 収束)**
- 目的: 移行期間に残っている「2本の loweringPlan line / JoinIR line」を、構造で 1 本に収束させる
- ねらい: `return/break/continue` のような “大きな出口語彙” の実装場所が揺れない状態にする
- 入口: `docs/development/current/main/phases/phase-286/README.md`
- P0docs-only: `docs/development/current/main/phases/phase-286/P0-INSTRUCTIONS.md`
- 状況: P2Pattern4/P2.1Pattern1/P2.2hygiene/P2.3Pattern9/P2.4.1Pattern8 Plan完走まで完了。現在は P2.6Pattern3 Plan化進行中
- 次の実装指示Pattern3完走: `docs/development/current/main/phases/phase-286/P2.6.1-INSTRUCTIONS.md`
- 状況: Pattern19 の主要ループ形が Plan/Frag SSOT に吸収され、quick gate は green を維持
- 将来の設計相談Phase 286 の範囲外で、別フェーズでSSOT化してから: `docs/development/current/main/investigations/phase-286-plan-normalization-consult.md`
- SSOT:
- Plan/Frag: `compose::*` + `emit_frag()`Phase 280/281