aboutsummaryrefslogtreecommitdiff
path: root/bootstrap
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-12 12:44:56 +0200
committerlemon <lsof@mailbox.org>2022-08-12 12:44:56 +0200
commitf14aee6184568bae34f8d8d8f9140fa760099fa5 (patch)
tree208e40a7e1b04833bd5b199c803b8220e1b21fdd /bootstrap
parenteff929f0d323559f3b2e9272e3c1d4aa82fc5c80 (diff)
oops
Diffstat (limited to 'bootstrap')
-rw-r--r--bootstrap/cgen.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/bootstrap/cgen.c b/bootstrap/cgen.c
index 6321e92..b0cfd92 100644
--- a/bootstrap/cgen.c
+++ b/bootstrap/cgen.c
@@ -356,15 +356,15 @@ genstmt(struct stmt *stmt) {
}
break;
case Swhile:
- pri("while (%e) {_cont%d:;", &stmt->loop.test, stmt->loop.id);
+ pri("while (%e) {", &stmt->loop.test);
genblock(stmt->loop.body);
- pri("} _brk%d:;\n", stmt->loop.id);
+ pri("_cont%d:;} _brk%d:;\n", stmt->loop.id, stmt->loop.id);
break;
case Sdowhile:
- pri("do {_cont%d:;",stmt->loop.id);
+ pri("do {");
genblock(stmt->loop.body);
- pri("} while (%e); _brk%d:;\n",
- &stmt->loop.test, stmt->loop.id);
+ pri("_cont%d:;} while (%e); _brk%d:;\n",
+ stmt->loop.id, &stmt->loop.test, stmt->loop.id);
break;
case Sfor:
pri("{\n");
@@ -374,12 +374,10 @@ genstmt(struct stmt *stmt) {
pri("%e;", &stmt->loop.test);
if (stmt->loop.next)
pri(" %e", stmt->loop.next);
- pri(") {goto _skip%d; _cont%d:", stmt->loop.id, stmt->loop.id);
- if (stmt->loop.next)
- pri(" %e;", stmt->loop.next);
- pri("_skip%d:;", stmt->loop.id);
+ pri(") {");
genblock(stmt->loop.body);
- pri("}} _brk%d:;\n", stmt->loop.id);
+ pri("_cont%d:; }", stmt->loop.id);
+ pri("} _brk%d:;\n", stmt->loop.id);
break;
case Siswitch:
pri("switch (%e) {", &stmt->iswitch.test);