yangtau/hedgehog

free referrence to str

Closed this issue · 0 comments

free referrence to str

// TODO: free referrence to str

}

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