nyash-codex
89a769198a
feat(joinir): Phase 223-3 - LoopBodyCondPromoter implementation
Implements LoopBodyLocal condition promotion for Pattern4/continue patterns.
Previously, loops with LoopBodyLocal in conditions would Fail-Fast.
Now, safe Trim/skip_whitespace patterns (Category A-3) are promoted and lowering continues.
## Implementation
- **LoopBodyCondPromoter Box** (loop_body_cond_promoter.rs)
- extract_continue_condition(): Extract if-condition from continue branches
- try_promote_for_condition(): Thin wrapper delegating to LoopBodyCarrierPromoter
- ConditionPromotionRequest/Result API for Pattern2/4 integration
- **Pattern4 Integration** (pattern4_with_continue.rs)
- Analyze both header condition + continue condition
- On promotion success: merge carrier_info → continue lowering
- On promotion failure: Fail-Fast with clear error message
- **Unit Tests** (5 tests, all PASS)
- test_cond_promoter_skip_whitespace_pattern
- test_cond_promoter_break_condition
- test_cond_promoter_non_substring_pattern
- test_cond_promoter_no_scope_shape
- test_cond_promoter_no_body_locals
- **E2E Test** (phase223_p4_skip_whitespace_min.hako)
- Category A-3 pattern: local ch = s.substring(...); if ch == " " { continue }
- Verifies promotion succeeds and Pattern4 lowering proceeds
## Documentation
- joinir-architecture-overview.md: Updated LoopBodyCondPromoter section (Phase 223-3 完了)
- CURRENT_TASK.md: Added Phase 223-3 completion summary
- PHASE_223_SUMMARY.md: Phase overview and status tracking
- phase223-loopbodylocal-condition-*.md: Design docs and inventory
## Achievement
- **Before**: LoopBodyLocal in condition → Fail-Fast
- **Now**: Trim/skip_whitespace patterns promoted → Pattern4 lowering continues
- **Remaining**: Phase 172+ JoinIR Trim lowering for complete RC correctness
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-10 15:00:20 +09:00
..
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-12-04 15:00:45 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-12-04 13:32:58 +09:00
2025-12-04 13:32:58 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-12-01 11:10:46 +09:00
2025-11-06 15:41:52 +09:00
2025-11-24 05:23:26 +09:00
2025-11-06 15:41:52 +09:00
2025-11-27 08:18:09 +09:00
2025-11-27 08:18:09 +09:00
2025-11-27 02:58:38 +09:00
2025-11-27 02:58:38 +09:00
2025-11-23 04:10:12 +09:00
2025-11-22 01:21:38 +09:00
2025-12-04 17:47:19 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-12-07 19:00:12 +09:00
2025-12-07 19:00:12 +09:00
2025-12-06 03:30:03 +09:00
2025-12-06 00:10:27 +09:00
2025-12-07 19:00:12 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-21 06:21:45 +09:00
2025-11-21 06:21:45 +09:00
2025-11-21 06:21:45 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-21 06:21:45 +09:00
2025-11-21 06:21:45 +09:00
2025-11-21 06:21:45 +09:00
2025-11-21 09:02:02 +09:00
2025-11-21 11:16:38 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-12-02 12:36:28 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-28 17:13:52 +09:00
2025-12-08 21:39:49 +09:00
2025-12-08 21:39:49 +09:00
2025-12-08 23:14:10 +09:00
2025-12-08 23:14:10 +09:00
2025-12-08 23:14:10 +09:00
2025-12-08 23:14:10 +09:00
2025-12-08 23:59:19 +09:00
2025-12-08 23:59:19 +09:00
2025-12-09 00:59:38 +09:00
2025-12-09 00:59:38 +09:00
2025-12-09 00:59:38 +09:00
2025-12-09 01:09:54 +09:00
2025-12-09 01:09:54 +09:00
2025-12-09 01:47:07 +09:00
2025-12-09 01:47:07 +09:00
2025-12-09 01:47:07 +09:00
2025-12-09 03:07:15 +09:00
2025-12-09 03:07:15 +09:00
2025-12-09 03:40:25 +09:00
2025-12-09 04:20:28 +09:00
2025-12-09 04:20:28 +09:00
2025-12-09 14:45:04 +09:00
2025-12-09 14:45:04 +09:00
2025-12-09 18:32:03 +09:00
2025-12-09 18:32:03 +09:00
2025-12-09 18:32:03 +09:00
2025-12-09 18:32:03 +09:00
2025-12-09 18:32:03 +09:00
2025-12-09 18:32:03 +09:00
2025-12-10 00:01:53 +09:00
2025-12-10 04:10:45 +09:00
2025-12-10 01:53:06 +09:00
2025-11-22 00:00:51 +09:00
2025-12-10 02:07:28 +09:00
2025-12-10 09:28:08 +09:00
2025-12-10 15:00:20 +09:00
2025-11-06 15:41:52 +09:00
2025-09-01 23:44:34 +09:00
2025-12-04 13:32:58 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-12-02 14:07:19 +09:00
2025-12-02 12:36:28 +09:00
2025-12-02 14:07:19 +09:00
2025-11-21 11:16:38 +09:00
2025-11-21 11:16:38 +09:00
2025-12-04 13:54:45 +09:00
2025-11-21 13:19:18 +09:00
2025-11-21 06:21:45 +09:00
2025-11-21 06:21:45 +09:00
2025-11-24 04:13:41 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-24 14:17:02 +09:00
2025-11-24 14:17:02 +09:00
2025-11-21 11:16:38 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-21 06:21:45 +09:00
2025-11-21 06:21:45 +09:00
2025-11-21 06:21:45 +09:00
2025-11-21 06:21:45 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00