diff options
| author | Carson Fleming <cflems@cflems.net> | 2026-03-28 09:42:44 -1000 |
|---|---|---|
| committer | Carson Fleming <cflems@cflems.net> | 2026-03-28 09:42:44 -1000 |
| commit | 33d10c0a684eaacb59102e2e2c2494ef54113aa1 (patch) | |
| tree | 230b1f1cfc4a6cde3285e2fac35c7f9a7a414e17 /ast.c | |
| parent | 55929c155f929a886a0fe72c1c16a7913830350a (diff) | |
| download | ccc-33d10c0a684eaacb59102e2e2c2494ef54113aa1.tar.gz | |
we got assignments bois
Diffstat (limited to 'ast.c')
| -rw-r--r-- | ast.c | 23 |
1 files changed, 22 insertions, 1 deletions
@@ -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; |
