diff options
Diffstat (limited to 'bootstrap/cgen.c')
| -rw-r--r-- | bootstrap/cgen.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/bootstrap/cgen.c b/bootstrap/cgen.c index 9a28829..f79e112 100644 --- a/bootstrap/cgen.c +++ b/bootstrap/cgen.c @@ -347,6 +347,12 @@ genstmt(struct stmt *stmt) { genblock(stmt->loop.body); pri("_cont%d:;} _brk%d:;\n", stmt->loop.id, stmt->loop.id); break; + case Sdowhile: + pri("do {"); + genblock(stmt->loop.body); + pri("_cont%d:;} while (%e); _brk%d:;\n", + stmt->loop.id, &stmt->loop.test, stmt->loop.id); + break; case Sfor: pri("{\n"); for (int i = 0; i < stmt->loop.ini.n; ++i) @@ -566,6 +572,8 @@ liftnested(struct stmt *stmt) { liftnested(blocktostmt(stmt->ifelse.t)); break; case Swhile: + case Sdowhile: + liftnestedex(&stmt->loop.test); liftnested(blocktostmt(stmt->loop.body)); break; case Sfor: |