diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-12-26 14:19:58 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-12-26 14:19:58 +0000 |
commit | afb10c62c2e45801df4245e6131af3a98efdebd1 (patch) | |
tree | 6fa9986e29f1f972819d260bb2376e732a467868 /parse.y | |
parent | 90b1afa3104659898aad5978b164d48e1809e228 (diff) | |
download | ruby-afb10c62c2e45801df4245e6131af3a98efdebd1.tar.gz |
* node.h, parse.y (new_args_gen), compile.c (iseq_set_arguments): use struct rb_args_info instead of NODEs. This is a preparation for keyword argument (see [ruby-core:40290]).
* node.c (dump_node), gc.c (gc_mark_children, obj_free): bookkeeping.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34134 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 31 |
1 files changed, 15 insertions, 16 deletions
@@ -9121,25 +9121,24 @@ static NODE* new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b) { int saved_line = ruby_sourceline; - NODE *node; - NODE *i1, *i2 = 0; + struct rb_args_info *args; - node = NEW_ARGS(m ? m->nd_plen : 0, o); - i1 = m ? m->nd_next : 0; - node->nd_next = NEW_ARGS_AUX(r, b); + args = ALLOC(struct rb_args_info); + + args->pre_args_num = m ? m->nd_plen : 0; + args->pre_init = m ? m->nd_next : 0; + + args->post_args_num = p ? p->nd_plen : 0; + args->post_init = p ? p->nd_next : 0; + args->first_post_arg = p ? p->nd_pid : 0; + + args->rest_arg = r; + args->block_arg = b; + + args->opt_args = o; - if (p) { - i2 = p->nd_next; - node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen); - } - else if (i1) { - node->nd_next->nd_next = NEW_ARGS_AUX(0, 0); - } - if (i1 || i2) { - node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0); - } ruby_sourceline = saved_line; - return node; + return NEW_NODE(NODE_ARGS, 0, 0, args); } #endif /* !RIPPER */ |