aboutsummaryrefslogtreecommitdiffstats
path: root/vm.c
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-10-24 06:16:31 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-10-24 06:16:31 +0000
commite044a59504aa97f6178c7f72f84cf8e5e2068e6b (patch)
treec3110ced5a14785b9b2afd2f03c1cc1a08aa8a8b /vm.c
parentd10bc8f974c1bd6b39394d734942aa9f872bc96b (diff)
downloadruby-e044a59504aa97f6178c7f72f84cf8e5e2068e6b.tar.gz
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.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/vm.c b/vm.c
index 0ede2b8327..19ec4f4a09 100644
--- a/vm.c
+++ b/vm.c
@@ -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);