Files
hakorune/tools/selfhost/test_pattern3_skip_whitespace.hako
nyash-codex 701f1fd650 feat(joinir): Phase 164 Pattern3 (If-Else PHI) validation complete
- Created 4 representative test cases for Pattern3 patterns:
  * test_pattern3_if_phi_no_break.hako - Core Pattern3 (if-else PHI, no break/continue)
  * test_pattern3_skip_whitespace.hako - Pattern3+break style (routed to Pattern2)
  * test_pattern3_trim_leading.hako - Pattern3+break style (routed to Pattern2)
  * test_pattern3_trim_trailing.hako - Pattern3+break style (routed to Pattern2)

- Validated Pattern3_WithIfPhi detection:
  * Pattern routing: Pattern3_WithIfPhi MATCHED confirmed
  * JoinIR lowering: 3 functions, 20 blocks → 8 blocks (successful)
  * [joinir/freeze] elimination: Complete (no errors on any test)

- Clarified pattern classification:
  * Pattern3_WithIfPhi handles if-else PHI without break/continue
  * Loops with "if-else PHI + break" are routed to Pattern2_WithBreak
  * Break takes priority over if-else PHI in pattern detection

- Cumulative achievement (Phase 162-164):
  * Pattern1: 6 loops working 
  * Pattern2: 5 loops working 
  * Pattern3 (no break): 1 loop working 
  * Pattern3+break (as Pattern2): 3 loops working 
  * Total: 15 loops covered, zero [joinir/freeze] errors

- Updated CURRENT_TASK.md with Phase 164 section and findings

Next: Phase 165 Pattern4 (continue) validation

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 16:22:38 +09:00

43 lines
1.0 KiB
Plaintext

// Phase 164: Test skip_whitespace from JsonParserBox (Pattern3 with if-else PHI + break)
// Simulates: loop(p < len) { if is_whitespace(ch) { p++ } else { break } }
static box Main {
main(args) {
// Simulate skipping leading whitespace
local s = " \t\nhello world"
local p = 0
local len = s.length()
// Loop with if-else PHI: p is updated in both branches differently
loop(p < len) {
local ch = s.substring(p, p + 1)
// Check if whitespace
local is_ws = 0
if ch == " " {
is_ws = 1
} else if ch == "\t" {
is_ws = 1
} else if ch == "\n" {
is_ws = 1
} else if ch == "\r" {
is_ws = 1
}
if is_ws == 1 {
p = p + 1
} else {
break
}
}
// Output result
local remaining = s.substring(p, len)
print("Skipped leading whitespace")
print("Position: " + ("" + p))
print("Remaining: " + remaining)
print("Expected position: 4")
print("Expected remaining: hello world")
return 0
}
}