diff options
author | kdx <kikoodx@paranoici.org> | 2023-06-10 14:33:16 +0200 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2023-06-10 14:33:16 +0200 |
commit | da3ba4b7e5e64a4ec778f39c49da79842134f9be (patch) | |
tree | ed4cf1cd892f7d5034255c28207e834e07ba143e | |
parent | 48696f476b85f42ea3c8ff5aa4248ee518c5a18f (diff) | |
download | golem-da3ba4b7e5e64a4ec778f39c49da79842134f9be.tar.gz |
nested if statements
-rw-r--r-- | src/main.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -679,6 +679,7 @@ static void gen_stmt(Node *node, Node *fname) { static int label = 0; + int lbl; switch (node->type) { case NOD_BLOCK_STMT: node = node->lhs; @@ -719,18 +720,19 @@ gen_stmt(Node *node, Node *fname) depth -= 1; break; case NOD_IFELSE_STMT: + lbl = label; + label = lbl + 1 + (node->rhs->next != NULL); gen_expr(node->lhs); - printf("\tJEZ ,__lbl_%x\n", label); + printf("\tJEZ ,__lbl_%x\n", lbl); depth -= 1; gen_stmt(node->rhs, fname); if (node->rhs->next != NULL) { - printf("\tJMP ,__lbl_%x\n", label + 1); - printf("@__lbl_%x\n", label); + printf("\tJMP ,__lbl_%x\n", lbl + 1); + printf("@__lbl_%x\n", lbl); gen_stmt(node->rhs->next, fname); - label += 1; + lbl += 1; } - printf("@__lbl_%x\n", label); - label += 1; + printf("@__lbl_%x\n", lbl); break; default: error("unexpected %d", node->type); |