summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-12-26 14:19:58 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-12-26 14:19:58 +0000
commitafb10c62c2e45801df4245e6131af3a98efdebd1 (patch)
tree6fa9986e29f1f972819d260bb2376e732a467868 /parse.y
parent90b1afa3104659898aad5978b164d48e1809e228 (diff)
* 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.y31
1 files changed, 15 insertions, 16 deletions
diff --git a/parse.y b/parse.y
index ace81f9f19..b186ed9f38 100644
--- a/parse.y
+++ b/parse.y
@@ -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 */