summaryrefslogtreecommitdiff
path: root/decls_cgen.c
diff options
context:
space:
mode:
Diffstat (limited to 'decls_cgen.c')
-rw-r--r--decls_cgen.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/decls_cgen.c b/decls_cgen.c
index 72d9105..045367e 100644
--- a/decls_cgen.c
+++ b/decls_cgen.c
@@ -37,6 +37,8 @@ static void cgen_sdecls_type(CGenerator *g, Type *type) {
static void cgen_sdecls_block(CGenerator *g, Block *b) {
Block *prev_block = g->block;
g->block = b;
+ b->c.break_lbl = 0;
+ b->c.cont_lbl = 0;
arr_foreach(b->stmts, Statement, s)
cgen_sdecls_stmt(g, s);
@@ -150,7 +152,15 @@ static void cgen_sdecls_stmt(CGenerator *g, Statement *s) {
}
break;
case STMT_BREAK:
+ if (!s->referring_to->c.break_lbl) {
+ s->referring_to->c.break_lbl = ++g->lbl_counter;
+ }
+ break;
case STMT_CONT:
+ if (!s->referring_to->c.cont_lbl) {
+ s->referring_to->c.cont_lbl = ++g->lbl_counter;
+ }
+ break;
case STMT_MESSAGE:
break;
}