diff options
| author | Carson Fleming <cflems@cflems.net> | 2026-07-18 22:34:54 -0700 |
|---|---|---|
| committer | Carson Fleming <cflems@cflems.net> | 2026-07-18 22:46:47 -0700 |
| commit | feb1cac139ca5aa2ba76ac6a0a318bced03d8638 (patch) | |
| tree | e107f774e08daed3dedd5d39345d2b725b2d171d /ast.c | |
| parent | 385419f95c6b9c35a7c2a6168f82f7aa4a44e22b (diff) | |
| download | ccc-feb1cac139ca5aa2ba76ac6a0a318bced03d8638.tar.gz | |
loop support
Diffstat (limited to 'ast.c')
| -rw-r--r-- | ast.c | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -116,12 +116,38 @@ static void expr_destroy(struct expr_node* node) { static void if_destroy(struct if_node* node) { expr_destroy(node->cond); free(node->cond); + stmt_destroy(node->true_branch); free(node->true_branch); + if (node->false_branch != NULL) { stmt_destroy(node->false_branch); free(node->false_branch); } + + scope_destroy(node->scope); + free(node->scope); +} + +static void loop_destroy(struct loop_node* node) { + if (node->init != NULL) { + expr_destroy(node->init); + free(node->init); + } + if (node->cond != NULL) { + expr_destroy(node->cond); + free(node->cond); + } + if (node->incr != NULL) { + expr_destroy(node->incr); + free(node->incr); + } + + stmt_destroy(node->body); + free(node->body); + + scope_destroy(node->scope); + free(node->scope); } static void stmt_destroy(struct stmt_node* node) { @@ -142,6 +168,9 @@ static void stmt_destroy(struct stmt_node* node) { case STMT_IF: if_destroy(&node->inner.if_); break; + case STMT_LOOP: + loop_destroy(&node->inner.loop); + break; } } |
