aboutsummaryrefslogtreecommitdiff
path: root/bootstrap/cgen.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-11 07:53:44 +0200
committerlemon <lsof@mailbox.org>2022-08-11 07:53:44 +0200
commitc7961d732e5d67e8ea1b0be05e979bf24361f794 (patch)
tree07604810c980422332e971d436eea1fac62191f0 /bootstrap/cgen.c
parent86aa2d6ab3a003652159fa37828c27744a2cb45d (diff)
do-while
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: