and/or-conversion works

This commit is contained in:
2026-03-01 12:43:23 +01:00
parent a2121d10f8
commit cd8bb29524

View File

@@ -131,6 +131,7 @@ static void node_print(node_t* node, int nesting)
static node_t* convert_operator(node_t* node)
{
assert(node->type == OPERATOR);
assert(node->children[0] && node->children[1]);
if (strcmp(node->data.operator, "or") == 0) {
node_t *one = node_create(NUMBER_LITERAL, 0);
one->data.number_literal = 1;
@@ -146,7 +147,7 @@ static node_t* convert_operator(node_t* node)
node_finalize(node);
node = converted_op;
} else {
printf("convert_operator: found op `%s`", node->data.operator);
printf("convert_operator: found op `%s`\n", node->data.operator);
}
return node;
}
@@ -315,19 +316,16 @@ static node_t* simplify_subtree(node_t* node)
for (int i = 0; i < node->n_children; i++) {
node_t *child = node->children[i];
simplify_subtree(child);
node->children[i] = simplify_subtree(child);
}
switch (node->type) {
case OPERATOR:
convert_operator(node);
break;
/* case PRINTLN_STATEMENT: */
/* simplify_println_statement(node); */
/* break; */
/* case BLOCK: */
/* flatten_variable_declarations(node); */
/* break; */
return convert_operator(node);
case PRINTLN_STATEMENT:
return simplify_println_statement(node);
case BLOCK:
return flatten_variable_declarations(node);
}
return node;