aboutsummaryrefslogtreecommitdiff
path: root/src/parser/ast.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/ast.c')
-rw-r--r--src/parser/ast.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/parser/ast.c b/src/parser/ast.c
index a387533..9c78d1f 100644
--- a/src/parser/ast.c
+++ b/src/parser/ast.c
@@ -26,7 +26,7 @@ void free_expr(struct Expr* expr)
free(expr);
}
-static void free_statement(struct Statement* statement)
+void free_statement(struct Statement* statement)
{
switch (statement->kind)
{
@@ -36,8 +36,12 @@ static void free_statement(struct Statement* statement)
case STATEMENT_IF:
free_expr(statement->branch.left);
free_expr(statement->branch.right);
- free_statement(statement->branch.body);
+ for (size_t i = 0; i < statement->branch.body_count; i += 1)
+ free_statement(&statement->branch.body[i]);
free(statement->branch.body);
+ for (size_t i = 0; i < statement->branch.else_count; i += 1)
+ free_statement(&statement->branch.else_body[i]);
+ free(statement->branch.else_body);
break;
case STATEMENT_CALL:
for (size_t i = 0; i < statement->call.arg_count; i += 1)