From cd8bb29524418cb223026bdaed8d9bf1de9cbce9 Mon Sep 17 00:00:00 2001 From: Fredrik Robertsen Date: Sun, 1 Mar 2026 12:43:23 +0100 Subject: [PATCH] and/or-conversion works --- ps3/src/tree.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/ps3/src/tree.c b/ps3/src/tree.c index 05c8dcb..812f35f 100644 --- a/ps3/src/tree.c +++ b/ps3/src/tree.c @@ -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;