feat: add AST freeing function

This commit is contained in:
samsonium
2026-10-09 23:46:17 +03:00
parent 7744a28a12
commit 2fabd0ec2d
3 changed files with 29 additions and 2 deletions
+3
View File
@@ -56,6 +56,9 @@ char *fzl_parser_geterror();
// Free node
void fzl_freenode(fzl_node_t *node);
// Free entire AST going from root node
void fzl_freeast(fzl_node_t *root);
// Free parser
void fzl_freeparser(fzl_parser_t *parser);
+25 -2
View File
@@ -210,11 +210,34 @@ void fzl_freenode(fzl_node_t *node)
{
if (!node)
return;
if (node->token)
fzl_freetoken(node->token);
free(node);
}
void fzl_freeast(fzl_node_t *root)
{
if (!root)
return;
while (root)
{
if (root->type == FZL_NODETYPE_BLOCK)
{
for (size_t i = 0; i < root->list.entry_count; i++)
if (root->list.entries[i])
fzl_freeast(root->list.entries[i]);
}
else if (root->type == FZL_NODETYPE_CALL)
{
for (size_t i = 0; i < root->list.entry_count; i++)
if (root->list.entries[i])
fzl_freeast(root->list.entries[i]);
}
fzl_freenode(root);
root = root->next;
}
}
void fzl_freeparser(fzl_parser_t *parser)
{
if (!parser)
+1
View File
@@ -160,6 +160,7 @@ int main(int argc, char **argv)
free(args);
fzl_freereader(rd);
fzl_freeparser(parser);
fzl_freeast(parser->root);
printf("done.\n");
return 0;