From 33d10c0a684eaacb59102e2e2c2494ef54113aa1 Mon Sep 17 00:00:00 2001 From: Carson Fleming Date: Sat, 28 Mar 2026 09:42:44 -1000 Subject: we got assignments bois --- ast.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'ast.c') diff --git a/ast.c b/ast.c index 1334073..05f2755 100644 --- a/ast.c +++ b/ast.c @@ -18,6 +18,23 @@ static void var_ref_destroy(struct var_ref_node* node) { free(node->ident); } +static void lval_destroy(struct lval_node* node) { + switch (node->type) { + case LVAL_VAR_DECL: + var_decl_destroy(&node->as._var_decl); + break; + case LVAL_VAR_REF: + var_ref_destroy(&node->as._var_ref); + break; + } +} + +static void assign_destroy(struct assign_node* node) { + lval_destroy(&node->lval); + expr_destroy(node->rval); + free(node->rval); +} + static void group_destroy(struct group_node* node) { struct stmt_node* body_node = node->body_head; while (body_node != NULL) { @@ -53,17 +70,21 @@ static void return_destroy(struct return_node* node) { static void expr_destroy(struct expr_node* node) { switch (node->type) { - case EXPR_EMPTY: case EXPR_INT_LIT: break; case EXPR_VAR_REF: var_ref_destroy(&node->as._var_ref); break; + case EXPR_ASSIGN: + assign_destroy(&node->as._assign); + break; } } static void stmt_destroy(struct stmt_node* node) { switch (node->type) { + case STMT_EMPTY: + break; case STMT_EXPR: expr_destroy(&node->as._expr); break; -- cgit v1.2.3