feat: add AST freeing function
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user