aboutsummaryrefslogtreecommitdiff
path: root/bootstrap/cgen.c
diff options
context:
space:
mode:
Diffstat (limited to 'bootstrap/cgen.c')
-rw-r--r--bootstrap/cgen.c8
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: