From 12e1b45da9b79247f4655332c298c08a2ad5c9b4 Mon Sep 17 00:00:00 2001 From: lemon Date: Wed, 24 Aug 2022 18:13:58 +0200 Subject: do-while --- examples/life.cff | 4 ++-- 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); -- cgit v1.2.3