summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-06-10 14:33:16 +0200
committerkdx <kikoodx@paranoici.org>2023-06-10 14:33:16 +0200
commitda3ba4b7e5e64a4ec778f39c49da79842134f9be (patch)
treeed4cf1cd892f7d5034255c28207e834e07ba143e /src
parent48696f476b85f42ea3c8ff5aa4248ee518c5a18f (diff)
downloadgolem-da3ba4b7e5e64a4ec778f39c49da79842134f9be.tar.gz
nested if statements
Diffstat (limited to 'src')
-rw-r--r--src/main.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/main.c b/src/main.c
index 813ec02..de2f81f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);