attempt to fix convert_operator

This commit is contained in:
2026-02-27 11:40:01 +01:00
parent 7e1e39cbb8
commit a2121d10f8

View File

@@ -132,20 +132,19 @@ static node_t* convert_operator(node_t* node)
{
assert(node->type == OPERATOR);
if (strcmp(node->data.operator, "or") == 0) {
free(node->data.operator);
node->data.operator = "?:";
node_t *new = node_create(NUMBER_LITERAL, 0);
new->data.number_literal = 0;
append_to_list_node(node, new);
node_t *one = node_create(NUMBER_LITERAL, 0);
one->data.number_literal = 1;
node_t *converted_op = node_create(OPERATOR, 3, node->children[0], one, node->children[1]);
converted_op->data.operator = "?:";
node_finalize(node);
node = converted_op;
} else if (strcmp(node->data.operator, "and") == 0) {
free(node->data.operator);
node->data.operator = "?:";
node_t *new = node_create(NUMBER_LITERAL, 0);
new->data.number_literal = 1;
append_to_list_node(node, new);
node_t *tmp = node->children[1];
node->children[1] = node->children[2];
node->children[2] = tmp;
node_t *zero = node_create(NUMBER_LITERAL, 0);
zero->data.number_literal = 0;
node_t *converted_op = node_create(OPERATOR, 3, node->children[0], node->children[1], zero);
converted_op->data.operator = "?:";
node_finalize(node);
node = converted_op;
} else {
printf("convert_operator: found op `%s`", node->data.operator);
}
@@ -323,12 +322,12 @@ static node_t* simplify_subtree(node_t* node)
case OPERATOR:
convert_operator(node);
break;
case PRINTLN_STATEMENT:
simplify_println_statement(node);
break;
case BLOCK:
flatten_variable_declarations(node);
break;
/* case PRINTLN_STATEMENT: */
/* simplify_println_statement(node); */
/* break; */
/* case BLOCK: */
/* flatten_variable_declarations(node); */
/* break; */
}
return node;