From 9c6a0b4340fe430e941586134f585c27309a0084 Mon Sep 17 00:00:00 2001 From: lemon Date: Sun, 4 Jun 2023 09:51:46 +0200 Subject: do while --- parse.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'parse.c') diff --git a/parse.c b/parse.c index 5d40258..77d263a 100644 --- a/parse.c +++ b/parse.c @@ -1625,6 +1625,26 @@ stmt(struct parser *pr, struct function *fn) useblk(fn, end); } break; + case TKWdo: + lex(pr, NULL); + begin = end = NULL; + EMITS { + putbranch(fn, begin = newblk(fn)); + useblk(fn, begin); + } + terminates = stmt(pr, fn); + expect(pr, TKWwhile, NULL); + expect(pr, '(', NULL); + ex = commaexpr(pr); + expect(pr, ')', NULL); + if (!isscalar(ex.ty)) + error(&ex.span, "'while' condition is not a scalar (%ty)", ex.ty); + EMITS { + end = newblk(fn); + if (!terminates) condjump(fn, &ex, begin, end); + useblk(fn, end); + } + break; case TKWreturn: lex(pr, NULL); if (fn->retty.t != TYVOID) { -- cgit v1.2.3