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 /vm.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 'vm.c')
-rw-r--r-- | vm.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -932,7 +932,7 @@ rb_binding_add_dynavars(VALUE bindval, rb_binding_t *bind, int dyncount, const I const rb_env_t *env; rb_thread_t *th = GET_THREAD(); const rb_iseq_t *base_iseq, *iseq; - NODE *node = 0; + NODE *node = 0, tmp_node; ID minibuf[4], *dyns = minibuf; VALUE idtmp = 0; @@ -945,7 +945,8 @@ rb_binding_add_dynavars(VALUE bindval, rb_binding_t *bind, int dyncount, const I dyns[0] = dyncount; MEMCPY(dyns + 1, dynvars, ID, dyncount); - node = NEW_NODE(NODE_SCOPE, dyns, 0, 0); + node = &tmp_node; + rb_node_init(node, NODE_SCOPE, (VALUE)dyns, 0, 0); if (base_iseq) { iseq = rb_iseq_new(node, base_iseq->body->location.label, path, realpath, base_iseq, ISEQ_TYPE_EVAL); |