39 lines
1.2 KiB
Plaintext
39 lines
1.2 KiB
Plaintext
|
|
// Phase 200-D: Minimal capture test (Pattern 2)
|
||
|
|
// This test verifies that captured variables work in JoinIR Pattern 2
|
||
|
|
// without using substring or other unsupported methods.
|
||
|
|
//
|
||
|
|
// Key points:
|
||
|
|
// - base/offset are captured (function-scoped constants)
|
||
|
|
// - No substring/indexOf in body-local init (Phase 193 limitation)
|
||
|
|
// - Simple accumulation using captured value
|
||
|
|
// - Break condition: i == 100 (never true, just to trigger Pattern 2)
|
||
|
|
|
||
|
|
static box Main {
|
||
|
|
main() {
|
||
|
|
local base = 10 // Captured var (used in multiplication)
|
||
|
|
local offset = 5 // Captured var (used in addition)
|
||
|
|
|
||
|
|
local i = 0
|
||
|
|
local v = 0
|
||
|
|
local n = 3 // Loop 3 times
|
||
|
|
|
||
|
|
// Pattern 2: loop with break (break never fires)
|
||
|
|
loop(i < n) {
|
||
|
|
// Simple break condition that never fires
|
||
|
|
if i == 100 {
|
||
|
|
break
|
||
|
|
}
|
||
|
|
|
||
|
|
// Use captured variable in accumulation
|
||
|
|
// v = v + base
|
||
|
|
// For i=0: v = 0 + 10 = 10
|
||
|
|
// For i=1: v = 10 + 10 = 20
|
||
|
|
// For i=2: v = 20 + 10 = 30
|
||
|
|
v = v + base
|
||
|
|
i = i + 1
|
||
|
|
}
|
||
|
|
|
||
|
|
print(v) // Expected: 30
|
||
|
|
}
|
||
|
|
}
|