Commit 430539c
Fix nested for loops: emit inner while(true) for nested loop headers
The bug: emit_loop_body! never checked for nested loop headers.
Inner loops compiled as if-blocks instead of while(true) loops,
causing inner break to exit the outer loop.
Fix: when emit_loop_body! encounters a statement that's in loop_headers
(and isn't the current loop's own header), emit a nested while(true)
with proper phi initialization and recursive body emission.
Now works: double nested, triple nested, matmul with ND arrays.
Tests: 3 new e2e Node.js tests
- nested loop sum (1:3 × 1:2 = 18)
- triple nested counter (2×2×2 = 8)
- 2×2 matrix multiply via triple nested loop + ND arrays = [19,43,22,50]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent c418921 commit 430539c
2 files changed
Lines changed: 67 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
337 | 337 | | |
338 | 338 | | |
339 | 339 | | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
340 | 377 | | |
341 | 378 | | |
342 | 379 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3551 | 3551 | | |
3552 | 3552 | | |
3553 | 3553 | | |
3554 | | - | |
3555 | | - | |
3556 | | - | |
| 3554 | + | |
| 3555 | + | |
| 3556 | + | |
| 3557 | + | |
| 3558 | + | |
| 3559 | + | |
| 3560 | + | |
| 3561 | + | |
| 3562 | + | |
| 3563 | + | |
| 3564 | + | |
| 3565 | + | |
| 3566 | + | |
| 3567 | + | |
| 3568 | + | |
| 3569 | + | |
| 3570 | + | |
| 3571 | + | |
| 3572 | + | |
| 3573 | + | |
| 3574 | + | |
| 3575 | + | |
| 3576 | + | |
| 3577 | + | |
| 3578 | + | |
| 3579 | + | |
| 3580 | + | |
| 3581 | + | |
| 3582 | + | |
| 3583 | + | |
3557 | 3584 | | |
0 commit comments