diff options
| -rw-r--r-- | examples/life.cff | 4 | ||||
| -rw-r--r-- | src/llvm.cff | 13 |
2 files changed, 15 insertions, 2 deletions
diff --git a/examples/life.cff b/examples/life.cff index cbdd3e0..8b58cf4 100644 --- a/examples/life.cff +++ b/examples/life.cff @@ -64,9 +64,9 @@ fn init(b *Board) void { extern fn usleep(u32) void; extern fn main() void { init(&board); - for ;; { + do { draw(&board); usleep(100); next(&board); - } + } while #t; } diff --git a/src/llvm.cff b/src/llvm.cff index 4644ee5..5772f76 100644 --- a/src/llvm.cff +++ b/src/llvm.cff @@ -784,6 +784,19 @@ fn genstmt(f *Fn, block *Block, st *Stmt) void { gen("Brk%d:",loop.id); nop(); + case DoWhile loop; + gen("\tbr label %%Next%d\n", loop.id); + gen("Next%d:", loop.id); + nop(); + genblock(f, loop.body); + gen("\tbr label %%Cont%d\n", loop.id); + gen("Cont%d:", loop.id); + nop(); + gen("\tbr i1 %v, label %%Next%d, label %%Brk%d\n", + llvmbool(f, &loop.test), loop.id, loop.id); + gen("Brk%d:",loop.id); + nop(); + case For loop; genblock(f, loop.ini); gen("\tbr label %%Cont%d\n", loop.id); |