diff options
| author | 2022-08-12 12:44:56 +0200 | |
|---|---|---|
| committer | 2022-08-12 12:44:56 +0200 | |
| commit | f14aee6184568bae34f8d8d8f9140fa760099fa5 (patch) | |
| tree | 208e40a7e1b04833bd5b199c803b8220e1b21fdd /bootstrap | |
| parent | eff929f0d323559f3b2e9272e3c1d4aa82fc5c80 (diff) | |
oops
Diffstat (limited to 'bootstrap')
| -rw-r--r-- | bootstrap/cgen.c | 18 |
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); |