refactor(normalization): Phase 135 P0 - Extend plan to zero post-loop assigns
Generalize NormalizationPlan suffix detection to accept zero post-loop assignments: Goal: Improve entry point consistency by allowing `loop + assign* + return` (N >= 0) Implementation: - Modified plan_box.rs detection logic (only file changed) - Removed `post_assign_count >= 1` requirement - Unified Phase 131 (loop + return) and Phase 132-133 (loop + assign+ + return) paths Changes: - src/mir/builder/control_flow/normalization/plan_box.rs: - Removed assignment count constraint - Unified pattern detection: `loop + assign* + return` (N >= 0) - apps/tests/phase135_loop_true_break_once_post_empty_return_min.hako (new fixture) - tools/smokes/v2/profiles/integration/apps/phase135_*.sh (new smoke tests) Pattern support: - Phase 131/135: loop + return only (consumed: 2, post_assign_count: 0) ✅ - Phase 132: loop + 1 assign + return (consumed: 3, post_assign_count: 1) ✅ - Phase 133: loop + N assigns + return (consumed: 2+N, post_assign_count: N) ✅ Design principles maintained: - **Minimal change**: Only plan_box.rs modified (execute_box unchanged) - **SSOT**: Detection logic centralized in plan_box.rs - **Box-First**: Responsibility separation preserved (Plan/Execute) Test results: - Unit tests (plan_box): 9/9 PASS (2 new tests added) - Phase 135 VM/LLVM EXE: PASS (exit code 1) - Phase 131 regression: 2/2 PASS (path now unified) - Phase 133 regression: 2/2 PASS - cargo test --lib: PASS Benefits: - Unified entry point for all loop + post patterns - Easier maintenance (single detection logic) - Future extensibility (easy to add new patterns) - Clear separation of Phase 131 and Phase 132-135 paths Default behavior unchanged: Dev-only guard maintained Related: Phase 135 normalization pattern consistency improvement 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -1,5 +1,35 @@
|
||||
# Self Current Task — Now (main)
|
||||
|
||||
## 2025-12-18:Phase 135 P0 完了 ✅
|
||||
|
||||
**Phase 135 P0: Normalization Plan Suffix Detection Generalization**
|
||||
- 目的: NormalizationPlanBox の suffix 検出を一般化し、post-loop assign が 0 回でも OK に
|
||||
- 背景:
|
||||
- Phase 133 までは `loop + assign+ + return`(assign 1回以上必須)
|
||||
- Phase 131 は `loop` のみ(return なし)
|
||||
- ギャップ: `loop + return`(0 assign)が別経路
|
||||
- 改善:
|
||||
- `loop + assign* + return`(N >= 0 assignments)を統一パターンとして検出
|
||||
- Phase 131 と Phase 132-133 を `LoopWithPost { post_assign_count }` enum で統一
|
||||
- Phase 131 (loop-only, no return) は `PlanKind::LoopOnly` として独立維持
|
||||
- 実装:
|
||||
- `src/mir/builder/control_flow/normalization/plan_box.rs`(検出ロジック修正のみ)
|
||||
- `post_assign_count >= 1` チェックを削除 → `>= 0` を許容
|
||||
- `execute_box.rs` は変更なし(既存ロジックが 0 assigns を自然にサポート)
|
||||
- Fixture: `apps/tests/phase135_loop_true_break_once_post_empty_return_min.hako`(期待: exit code 1)
|
||||
- Smoke tests:
|
||||
- `phase135_loop_true_break_once_post_empty_return_vm.sh` PASS
|
||||
- `phase135_loop_true_break_once_post_empty_return_llvm_exe.sh` PASS
|
||||
- Regression:
|
||||
- Phase 131: 2/2 PASS(VM + LLVM EXE)
|
||||
- Phase 133: 2/2 PASS(VM + LLVM EXE)
|
||||
- Unit tests: 9/9 PASS(plan_box module)
|
||||
- 設計原則:
|
||||
- **最小変更**: plan_box.rs の検出条件のみ変更
|
||||
- **SSOT 維持**: 検出ロジックは plan_box.rs に集約
|
||||
- **Box-First**: PlanBox(what)と ExecuteBox(how)の責任分離維持
|
||||
- 入口: `src/mir/builder/control_flow/normalization/README.md`(Phase 135 セクション追加)
|
||||
|
||||
## 2025-12-18:Phase 133 完了 ✅
|
||||
|
||||
**Phase 133: loop(true) break-once + multiple post-loop assigns(dev-only)**
|
||||
|
||||
Reference in New Issue
Block a user