free referrence to str
Closed this issue · 0 comments
github-actions commented
free referrence to str
Line 423 in ac62e6b
}
void hg_ast_node_free(struct hg_ast_node* _node) {
if (_node == NULL)
return;
switch (_node->type) {
case AST_NODE_ASSIGNMENT: {
_raw_to(_node, struct hg_ast_assignment_stat, node);
hg_ast_node_free(node->exprs);
hg_ast_node_free(node->vars);
hg_free(node);
} break;
case AST_NODE_FOR: {
_raw_to(_node, struct hg_ast_for_stat, node);
hg_ast_node_free(node->params);
hg_ast_node_free(node->iterator);
hg_ast_node_free(node->block);
hg_free(node);
} break;
case AST_NODE_IF: {
_raw_to(_node, struct hg_ast_if_stat, node);
hg_ast_node_free(node->condition);
hg_ast_node_free(node->block);
hg_ast_node_free(node->else_block);
hg_free(node);
} break;
case AST_NODE_FUNC: {
_raw_to(_node, struct hg_ast_func_stat, node);
hg_ast_node_free(node->id);
hg_ast_node_free(node->params);
hg_ast_node_free(node->block);
hg_free(node);
} break;
case AST_NODE_BREAK: {
_raw_to(_node, struct hg_ast_break_stat, node);
hg_free(node);
} break;
case AST_NODE_CONTINUE: {
_raw_to(_node, struct hg_ast_continue_stat, node);
hg_free(node);
} break;
case AST_NODE_RETURN: {
_raw_to(_node, struct hg_ast_return_stat, node);
hg_ast_node_free(node->exprs);
hg_free(node);
} break;
case AST_NODE_CALL: {
_raw_to(_node, struct hg_ast_call_expr, node);
hg_ast_node_free(node->callable);
hg_ast_node_free(node->args);
hg_free(node);
} break;
case AST_NODE_FIELD: {
_raw_to(_node, struct hg_ast_field_expr, node);
hg_ast_node_free(node->prefix);
hg_ast_node_free(node->field);
hg_free(node);
} break;
case AST_NODE_INDEX: {
_raw_to(_node, struct hg_ast_index_expr, node);
hg_ast_node_free(node->prefix);
hg_ast_node_free(node->index);
hg_free(node);
} break;
case AST_NODE_FUNC_DEF: {
_raw_to(_node, struct hg_ast_func_def_expr, node);
hg_ast_node_free(node->params);
hg_ast_node_free(node->block);
hg_free(node);
} break;
case AST_NODE_BINARY_EXPR: {
_raw_to(_node, struct hg_ast_binary_expr, node);
hg_ast_node_free(node->left);
hg_ast_node_free(node->right);
hg_free(node);
} break;
case AST_NODE_UNARY_EXPR: {
_raw_to(_node, struct hg_ast_unary_expr, node);
hg_ast_node_free(node->expr);
hg_free(node);
} break;
case AST_NODE_TABLE: {
_raw_to(_node, struct hg_ast_table_expr, node);
hg_ast_node_free(node->entries);
hg_free(node);
} break;
case AST_NODE_TABLE_ENTRY: {
_raw_to(_node, struct hg_ast_table_entry, node);
hg_ast_node_free(node->key);
hg_ast_node_free(node->value);
hg_free(node);
} break;
case AST_NODE_LITERAL_STR: {
_raw_to(_node, struct hg_ast_literal, node);
// TODO: free referrence to str
hg_free(node);
} break;
case AST_NODE_LITERAL_ID: {
_raw_to(_node, struct hg_ast_literal, node);
// TODO: free referrence to str
hg_free(node);
} break;
case AST_NODE_LITERAL_BOOL: {
_raw_to(_node, struct hg_ast_literal, node);
hg_free(node);
} break;
case AST_NODE_LITERAL_INT: {
_raw_to(_node, struct hg_ast_literal, node);
hg_free(node);
} break;
case AST_NODE_LITERAL_FLOAT: {
_raw_to(_node, struct hg_ast_literal, node);
hg_free(node);
} break;
case AST_NODE_ARRAY: {
_raw_to(_node, struct hg_ast_node_array, node);
for (int i = 0; i < node->len; i++) {
hg_free(node->arr[i]);
}
hg_free(node);
} break;
default:
unreachable_();
}
}
static void _node_to_str(struct hg_ast_node* node, uint32_t indent,
struct hg_string_buffer* buffer) {
}
hg_char hg_ast_node_to_str(struct hg_ast_node* node, uint32_t indent) {
}
#undef _new
#undef _raw
#undef _raw_to
ndex 8066773..5c493a5 100644
++ b/src/ast.h
fa97fe5059e2d4d46f6ce5777e1f001e01eda2d2