From c7961d732e5d67e8ea1b0be05e979bf24361f794 Mon Sep 17 00:00:00 2001 From: lemon Date: Thu, 11 Aug 2022 07:53:44 +0200 Subject: do-while --- bootstrap/cgen.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'bootstrap/cgen.c') 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: -- cgit v1.2.3