diff options
Diffstat (limited to 'node.c')
| -rw-r--r-- | node.c | 19 |
1 files changed, 18 insertions, 1 deletions
@@ -163,6 +163,14 @@ parser_tokens_free(rb_ast_t *ast, rb_parser_ary_t *tokens) } static void +parser_nodes_free(rb_ast_t *ast, rb_parser_ary_t *nodes) +{ + /* Do nothing for nodes because nodes are freed when rb_ast_t is freed */ + xfree(nodes->data); + xfree(nodes); +} + +static void free_ast_value(rb_ast_t *ast, void *ctx, NODE *node) { switch (nd_type(node)) { @@ -206,6 +214,9 @@ free_ast_value(rb_ast_t *ast, void *ctx, NODE *node) case NODE_IMAGINARY: xfree(RNODE_IMAGINARY(node)->val); break; + case NODE_UNDEF: + parser_nodes_free(ast, RNODE_UNDEF(node)->nd_undefs); + break; default: break; } @@ -214,7 +225,7 @@ free_ast_value(rb_ast_t *ast, void *ctx, NODE *node) static void rb_node_buffer_free(rb_ast_t *ast, node_buffer_t *nb) { - if (nb && nb->tokens) { + if (nb->tokens) { parser_tokens_free(ast, nb->tokens); } iterate_node_values(ast, &nb->buffer_list, free_ast_value, NULL); @@ -427,3 +438,9 @@ rb_node_set_type(NODE *n, enum node_type t) { return nd_init_type(n, t); } + +enum node_type +rb_node_get_type(const NODE *n) +{ + return (enum node_type)nd_type(n); +} |
