From c2a13e05596c724fbdbc3e8ff1266c099b675e56 Mon Sep 17 00:00:00 2001 From: lemon Date: Fri, 5 Aug 2022 17:36:51 +0200 Subject: modify let and static decls to allow multiple vars this involved transforming statement and declaration parsing code to use a CPS-like style to yield many decls within one lexical decl --- bootstrap/cgen.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'bootstrap/cgen.c') diff --git a/bootstrap/cgen.c b/bootstrap/cgen.c index b4cea42..9e13e12 100644 --- a/bootstrap/cgen.c +++ b/bootstrap/cgen.c @@ -295,14 +295,16 @@ genstmt(struct stmt *stmt) { genblock(stmt->loop.body); break; case Sfor: - pri("for (\n"); - if (stmt->loop.ini) - genstmt(stmt->loop.ini); + pri("{\n"); + for (int i = 0; i < stmt->loop.ini.n; ++i) + genstmt(&stmt->loop.ini.d[i]); + pri("for (; "); pri("%e;", &stmt->loop.test); if (stmt->loop.next) pri(" %e", stmt->loop.next); pri(")"); genblock(stmt->loop.body); + pri("}\n"); break; case Siswitch: pri("switch (%e) {", &stmt->iswitch.test); @@ -434,7 +436,8 @@ liftnested(struct stmt *stmt) { liftnested(blocktostmt(stmt->loop.body)); break; case Sfor: - liftnested(stmt->loop.ini); + for (int i = 0; i < stmt->loop.ini.n; ++i) + liftnested(&stmt->loop.ini.d[i]); liftnestedex(&stmt->loop.test); liftnestedex(stmt->loop.next); liftnested(blocktostmt(stmt->loop.body)); -- cgit v1.2.3