nyash-codex
e6e306c020
fix(joinir): Phase 219 Phantom Carrier Bug fix complete
Fixes phantom carrier detection that blocked AST-based if-sum lowerer.
## Problem
Name-based heuristic in loop_update_summary.rs created phantom "count"
carrier even when variable didn't exist, causing:
1. counter_count() = 2 (i + phantom "count") instead of 1
2. is_simple_if_sum_pattern() = false
3. AST-based lowerer never activates (falls back to legacy)
4. Result: RC=0 instead of expected values
## Solution
Assignment-based carrier detection:
### New API (recommended)
```rust
pub fn analyze_loop_updates_from_ast(
loop_body_ast: &[ASTNode]
) -> LoopUpdateSummary
```
- Extracts only variables with actual assignments in loop body
- Classifies by RHS structure (not name)
- Eliminates phantom carriers completely
### Changes
1. **Added**: `extract_assigned_variables()` - AST walker for assignments
2. **Added**: `find_assignment_rhs()` - RHS expression extraction
3. **Added**: `classify_update_kind_from_rhs()` - Structure-based classification
4. **Added**: `is_likely_loop_index()` - Name heuristic for disambiguation
5. **Deprecated**: `analyze_loop_updates()` - Legacy name-based API (3 call sites remain)
### Verification
Before:
```
variable_map = {i, sum, defs, len}
→ Phantom "count" detected
→ counter_count() = 2
→ is_simple_if_sum_pattern() = false
```
After:
```
assigned_vars = {i, sum} // Only assigned!
→ No phantom carriers
→ counter_count() = 1
→ accumulation_count() = 1
→ is_simple_if_sum_pattern() = true ✅
```
## Files Modified
**Core Fix**:
- src/mir/join_ir/lowering/loop_update_summary.rs (+116 lines)
- New assignment-based API
- Phantom carrier elimination
**Integration**:
- src/mir/builder/control_flow/joinir/patterns/pattern_pipeline.rs (+3 lines)
- Updated is_if_sum_pattern() to use new API
## Test Results
- ✅ Phantom carrier bug fixed
- ✅ AST lowerer activates correctly
- ⚠️ 3 deprecation warnings (expected, legacy call sites)
- ⏳ phase212/218 still RC=0 (blocked by condition variable support)
## Design Principles
1. **No Phantom Carriers**: Only variables with actual assignments
2. **Assignment-Based Detection**: LHS from AST assignments only
3. **Structure-Based Classification**: RHS patterns + name disambiguation
## Next Steps
Phase 220: Condition variable extraction and wiring to enable
phase212/218 tests to pass with correct RC values.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-10 02:30:14 +09:00
..
2025-12-03 13:42:05 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 01:45:03 +09:00
2025-09-17 10:58:12 +09:00
2025-12-04 10:52:10 +09:00
2025-12-05 16:08:56 +09:00
2025-12-04 06:02:03 +09:00
2025-12-04 06:02:03 +09:00
2025-12-03 13:59:06 +09:00
2025-12-05 23:33:06 +09:00
2025-12-05 23:33:06 +09:00
2025-12-08 04:14:28 +09:00
2025-12-02 21:52:18 +09:00
2025-12-10 00:01:53 +09:00
2025-12-04 06:02:03 +09:00
2025-12-10 02:07:28 +09:00
2025-12-08 06:14:03 +09:00
2025-12-08 00:09:45 +09:00
2025-12-03 14:33:04 +09:00
2025-12-06 16:22:38 +09:00
2025-12-08 18:36:13 +09:00
2025-12-04 17:47:19 +09:00
2025-12-06 03:30:03 +09:00
2025-12-06 03:30:03 +09:00
2025-11-27 17:05:46 +09:00
2025-12-05 14:41:24 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-08 00:09:45 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-11-29 15:57:14 +09:00
2025-11-29 15:57:14 +09:00
2025-11-29 15:57:14 +09:00
2025-11-30 08:54:18 +09:00
2025-12-02 09:45:54 +09:00
2025-11-30 10:10:45 +09:00
2025-12-02 10:19:07 +09:00
2025-12-02 11:16:01 +09:00
2025-12-10 00:01:53 +09:00
2025-12-02 19:37:01 +09:00
2025-12-02 19:37:01 +09:00
2025-12-02 19:37:01 +09:00
2025-12-02 19:37:01 +09:00
2025-12-02 20:18:13 +09:00
2025-12-02 20:18:13 +09:00
2025-12-02 20:18:13 +09:00
2025-12-02 20:30:22 +09:00
2025-12-02 20:18:13 +09:00
2025-12-02 19:37:01 +09:00
2025-12-02 19:37:01 +09:00
2025-12-02 21:09:15 +09:00
2025-12-02 21:09:15 +09:00
2025-12-03 18:16:49 +09:00
2025-12-03 19:37:32 +09:00
2025-12-03 19:37:32 +09:00
2025-12-03 19:22:55 +09:00
2025-12-03 21:32:14 +09:00
2025-12-03 21:12:37 +09:00
2025-12-03 22:03:16 +09:00
2025-12-04 03:35:25 +09:00
2025-12-04 03:58:02 +09:00
2025-12-04 04:30:30 +09:00
2025-12-04 04:30:30 +09:00
2025-12-04 04:42:32 +09:00
2025-12-04 06:26:59 +09:00
2025-12-04 04:42:32 +09:00
2025-12-04 04:42:32 +09:00
2025-12-04 06:02:03 +09:00
2025-12-04 06:02:03 +09:00
2025-12-04 06:02:03 +09:00
2025-12-04 06:17:10 +09:00
2025-12-04 06:24:03 +09:00
2025-12-04 06:02:03 +09:00
2025-12-04 06:02:03 +09:00
2025-12-04 06:02:03 +09:00
2025-12-04 11:04:29 +09:00
2025-12-04 10:57:13 +09:00
2025-12-04 11:28:55 +09:00
2025-12-04 11:44:55 +09:00
2025-12-04 12:06:34 +09:00
2025-12-04 12:22:55 +09:00
2025-12-04 12:27:44 +09:00
2025-12-04 13:07:12 +09:00
2025-12-04 13:07:12 +09:00
2025-12-04 13:33:44 +09:00
2025-12-04 13:54:45 +09:00
2025-12-04 14:10:51 +09:00
2025-12-04 14:19:48 +09:00
2025-12-04 15:15:27 +09:00
2025-12-04 15:00:45 +09:00
2025-12-04 15:00:45 +09:00
2025-12-04 15:00:45 +09:00
2025-12-04 15:23:43 +09:00
2025-12-04 16:16:56 +09:00
2025-12-04 19:37:18 +09:00
2025-12-04 19:34:19 +09:00
2025-12-06 16:22:38 +09:00
2025-12-04 19:38:06 +09:00
2025-12-04 19:37:18 +09:00
2025-12-05 23:26:55 +09:00
2025-12-05 23:26:55 +09:00
2025-12-07 23:09:25 +09:00
2025-12-07 01:45:03 +09:00
2025-12-07 01:45:03 +09:00
2025-12-04 16:16:56 +09:00
2025-12-07 14:17:58 +09:00
2025-12-07 23:09:25 +09:00
2025-12-07 23:09:25 +09:00
2025-12-07 23:09:25 +09:00
2025-12-07 23:09:25 +09:00
2025-12-07 21:29:19 +09:00
2025-12-07 01:45:03 +09:00
2025-12-04 16:55:11 +09:00
2025-12-07 01:45:03 +09:00
2025-12-04 17:03:14 +09:00
2025-12-07 01:45:03 +09:00
2025-12-07 01:45:03 +09:00
2025-12-07 01:45:03 +09:00
2025-12-08 02:41:53 +09:00
2025-12-04 16:35:34 +09:00
2025-12-04 16:55:11 +09:00
2025-12-08 03:06:20 +09:00
2025-12-04 17:47:19 +09:00
2025-12-04 17:47:19 +09:00
2025-12-04 17:47:19 +09:00
2025-12-04 17:47:19 +09:00
2025-12-04 18:20:07 +09:00
2025-12-04 18:20:07 +09:00
2025-12-04 18:20:07 +09:00
2025-12-04 17:47:19 +09:00
2025-12-08 10:13:34 +09:00
2025-12-08 10:13:34 +09:00
2025-12-08 10:13:34 +09:00
2025-12-04 19:34:19 +09:00
2025-12-08 13:08:44 +09:00
2025-12-08 13:08:44 +09:00
2025-12-08 15:17:53 +09:00
2025-12-08 15:17:53 +09:00
2025-12-08 15:17:53 +09:00
2025-12-08 15:17:53 +09:00
2025-12-08 16:34:04 +09:00
2025-12-08 16:34:04 +09:00
2025-12-08 18:36:13 +09:00
2025-12-08 19:29:10 +09:00
2025-12-08 21:09:00 +09:00
2025-12-08 21:19:54 +09:00
2025-12-08 21:26:57 +09:00
2025-12-08 21:42:51 +09:00
2025-12-08 21:34:16 +09:00
2025-12-08 23:14:10 +09:00
2025-12-08 21:26:57 +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:47:07 +09:00
2025-12-05 16:05:32 +09:00
2025-12-09 03:07:15 +09:00
2025-12-09 03:40:25 +09:00
2025-12-06 03:30:03 +09:00
2025-12-09 04:20:28 +09:00
2025-12-06 11:09:52 +09:00
2025-12-06 11:09:03 +09:00
2025-12-09 06:04:09 +09:00
2025-12-06 16:22:38 +09:00
2025-12-09 14:45:04 +09:00
2025-12-09 14:45:04 +09:00
2025-12-09 13:28:15 +09:00
2025-12-09 13:58:31 +09:00
2025-12-06 14:46:33 +09:00
2025-12-09 14:45:04 +09:00
2025-12-09 14:56:05 +09:00
2025-12-06 14:46:33 +09:00
2025-12-09 15:28:49 +09:00
2025-12-09 16:19:08 +09:00
2025-12-09 18:32:03 +09:00
2025-12-09 18:32:03 +09:00
2025-12-09 18:56:51 +09:00
2025-12-09 19:14:01 +09:00
2025-12-09 19:39:01 +09:00
2025-12-09 19:57:32 +09:00
2025-12-10 00:01:53 +09:00
2025-12-10 00:01:53 +09:00
2025-12-10 00:01:53 +09:00
2025-12-09 23:37:18 +09:00
2025-12-10 00:01:53 +09:00
2025-12-10 00:01:53 +09:00
2025-12-10 00:54:46 +09:00
2025-12-10 00:01:53 +09:00
2025-12-10 00:29:25 +09:00
2025-12-10 01:40:18 +09:00
2025-12-10 01:40:18 +09:00
2025-12-10 01:45:15 +09:00
2025-12-10 01:53:06 +09:00
2025-12-10 02:07:28 +09:00
2025-12-10 02:30:14 +09:00
2025-12-07 21:02:20 +09:00
2025-12-07 21:02:20 +09:00
2025-12-05 16:06:39 +09:00
2025-12-06 11:10:38 +09:00
2025-11-23 05:53:27 +09:00
2025-12-07 21:02:20 +09:00
2025-12-10 00:29:25 +09:00
2025-12-04 03:58:02 +09:00
2025-12-04 12:40:01 +09:00
2025-11-21 07:00:05 +09:00
2025-11-21 08:03:03 +09:00
2025-11-21 08:03:03 +09:00
2025-12-08 15:17:53 +09:00
2025-11-20 17:10:03 +09:00
2025-11-20 17:10:03 +09:00
2025-11-20 17:10:03 +09:00