diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-10-24 06:16:31 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-10-24 06:16:31 +0000 |
commit | ac3bad418c37195547a09bf6d1e3fc9d5ec99460 (patch) | |
tree | c3110ced5a14785b9b2afd2f03c1cc1a08aa8a8b /compile.c | |
parent | f70aa7637b68dc7035c4598f97220ad778693aa2 (diff) |
Remove dynamic NODE allocation out of parser
A temporary NODE object was allocated to create iseq. Instead, this
patch allocates a dummy NODE as auto variable, and discard it soon.
This change is intended as a preparation to manage AST NODEs out of GC.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60390 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'compile.c')
-rw-r--r-- | compile.c | 13 |
1 files changed, 8 insertions, 5 deletions
@@ -3963,11 +3963,14 @@ defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, int line = nd_line(node); LABEL *lstart = NEW_LABEL(line); LABEL *lend = NEW_LABEL(line); - const rb_iseq_t *rescue = NEW_CHILD_ISEQ(NEW_NIL(), - rb_str_concat(rb_str_new2 - ("defined guard in "), - iseq->body->location.label), - ISEQ_TYPE_DEFINED_GUARD, 0); + const rb_iseq_t *rescue; + NODE tmp_node, *node = &tmp_node; + rb_node_init(node, NODE_NIL, 0, 0, 0); + rescue = NEW_CHILD_ISEQ(node, + rb_str_concat(rb_str_new2 + ("defined guard in "), + iseq->body->location.label), + ISEQ_TYPE_DEFINED_GUARD, 0); lstart->rescued = LABEL_RESCUE_BEG; lend->rescued = LABEL_RESCUE_END; APPEND_LABEL(ret, lcur, lstart); |