diff options
Diffstat (limited to 'ast.c')
| -rw-r--r-- | ast.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -75,6 +75,19 @@ static void call_destroy(struct call_node* node) { } } +static void unary_destroy(struct unary_node* node) { + expr_destroy(node->expr); + free(node->expr); +} + +static void binary_destroy(struct binary_node* node) { + expr_destroy(node->lhs); + free(node->lhs); + + expr_destroy(node->rhs); + free(node->rhs); +} + static void expr_destroy(struct expr_node* node) { switch (node->type) { case EXPR_INT_LIT: @@ -93,6 +106,12 @@ static void expr_destroy(struct expr_node* node) { case EXPR_CALL: call_destroy(&node->as._call); break; + case EXPR_UNARY: + unary_destroy(&node->as._unary); + break; + case EXPR_BINARY: + binary_destroy(&node->as._binary); + break; } } |
