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>
This commit is contained in:
35
tools/selfhost/test_pattern2_search.hako
Normal file
35
tools/selfhost/test_pattern2_search.hako
Normal file
@ -0,0 +1,35 @@
|
||||
// Phase 163: Test linear search with break (Pattern2)
|
||||
// Simulates: loop(j < len) { if found { break } j++ }
|
||||
|
||||
static box Main {
|
||||
main(args) {
|
||||
// Simulate searching for a value in an array
|
||||
local target = "needle"
|
||||
local search_list = new ArrayBox()
|
||||
search_list.push("apple")
|
||||
search_list.push("banana")
|
||||
search_list.push("needle")
|
||||
search_list.push("cherry")
|
||||
|
||||
local j = 0
|
||||
local found = 0
|
||||
local search_len = search_list.length()
|
||||
|
||||
loop(j < search_len) {
|
||||
local item = search_list.get(j)
|
||||
if item == target {
|
||||
found = 1
|
||||
break
|
||||
}
|
||||
j = j + 1
|
||||
}
|
||||
|
||||
if found == 1 {
|
||||
print("Found at index: " + ("" + j))
|
||||
} else {
|
||||
print("Not found")
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user