[前][次][番号順一覧][スレッド一覧]

ruby-changes:22087

From: mame <ko1@a...>
Date: Mon, 26 Dec 2011 23:20:25 +0900 (JST)
Subject: [ruby-changes:22087] mame:r34135 (trunk): * node.h, node.c, parse.y: implement a parser part for keyword arguments. This is a preparation for keyword argument (see ).

mame	2011-12-26 23:20:03 +0900 (Mon, 26 Dec 2011)

  New Revision: 34135

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34135

  Log:
    * node.h, node.c, parse.y: implement a parser part for keyword arguments. This is a preparation for keyword argument (see [ruby-core:40290]).
    
    * gc.c (gc_mark_children): bookkeeping.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c
    trunk/node.c
    trunk/node.h
    trunk/parse.y

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 34134)
+++ ChangeLog	(revision 34135)
@@ -1,3 +1,11 @@
+Mon Dec 26 22:00:17 2011  Yusuke Endoh  <mame@t...>
+
+	* node.h, node.c, parse.y: implement a parser part for keyword
+	  arguments.
+	  This is a preparation for keyword argument (see [ruby-core:40290]).
+
+	* gc.c (gc_mark_children): bookkeeping.
+
 Mon Dec 26 21:03:18 2011  Yusuke Endoh  <mame@t...>
 
 	* node.h, parse.y (new_args_gen), compile.c (iseq_set_arguments): use
Index: gc.c
===================================================================
--- gc.c	(revision 34134)
+++ gc.c	(revision 34135)
@@ -1791,9 +1791,11 @@
 	    {
 		struct rb_args_info *args = obj->as.node.u3.args;
 		if (args) {
-		    if (args->pre_init)  gc_mark(objspace, (VALUE)args->pre_init, lev);
-		    if (args->post_init) gc_mark(objspace, (VALUE)args->post_init, lev);
-		    if (args->opt_args)  gc_mark(objspace, (VALUE)args->opt_args, lev);
+		    if (args->pre_init)    gc_mark(objspace, (VALUE)args->pre_init, lev);
+		    if (args->post_init)   gc_mark(objspace, (VALUE)args->post_init, lev);
+		    if (args->opt_args)    gc_mark(objspace, (VALUE)args->opt_args, lev);
+		    if (args->kw_args)     gc_mark(objspace, (VALUE)args->kw_args, lev);
+		    if (args->kw_rest_arg) gc_mark(objspace, (VALUE)args->kw_rest_arg, lev);
 		}
 	    }
 	    ptr = (VALUE)obj->as.node.u2.node;
Index: parse.y
===================================================================
--- parse.y	(revision 34134)
+++ parse.y	(revision 34135)
@@ -372,8 +372,8 @@
 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
 
-static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID);
-#define new_args(f,o,r,p,b) new_args_gen(parser, (f),(o),(r),(p),(b))
+static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*,ID,ID);
+#define new_args(f,o,r,p,k,kr,b) new_args_gen(parser, (f),(o),(r),(p),(k),(kr),(b))
 
 static NODE *negate_lit(NODE*);
 static NODE *ret_args_gen(struct parser_params*,NODE*);
@@ -501,6 +501,7 @@
 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
+static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE);
 
 #define dispatch0(n)            ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
 #define dispatch1(n,a)          ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
@@ -508,6 +509,7 @@
 #define dispatch3(n,a,b,c)      ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
 #define dispatch4(n,a,b,c,d)    ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
 #define dispatch5(n,a,b,c,d,e)  ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
+#define dispatch7(n,a,b,c,d,e,f,g) ripper_dispatch7(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e), (f), (g))
 
 #define yyparse ripper_yyparse
 
@@ -535,8 +537,8 @@
 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
 
-#define params_new(pars, opts, rest, pars2, blk) \
-        dispatch5(params, (pars), (opts), (rest), (pars2), (blk))
+#define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \
+        dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk))
 
 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
@@ -697,12 +699,14 @@
 %type <node> f_arglist f_args f_arg f_arg_item f_optarg f_marg f_marg_list f_margs
 %type <node> assoc_list assocs assoc undef_list backref string_dvar for_var
 %type <node> block_param opt_block_param block_param_def f_opt
+%type <node> f_kwarg f_kw f_block_kwarg f_block_kw
 %type <node> bv_decls opt_bv_decl bvar
 %type <node> lambda f_larglist lambda_body
 %type <node> brace_block cmd_brace_block do_block lhs none fitem
 %type <node> mlhs mlhs_head mlhs_basic mlhs_item mlhs_node mlhs_post mlhs_inner
 %type <id>   fsym keyword_variable user_variable sym symbol operation operation2 operation3
 %type <id>   cname fname op f_rest_arg f_block_arg opt_f_block_arg f_norm_arg f_bad_arg
+%type <id>   f_kwrest
 /*%%%*/
 /*%
 %type <val> program reswords then do dot_or_colon
@@ -2922,7 +2926,7 @@
 				    0),
 				node_assign($2, NEW_DVAR(id)));
 
-			    args = new_args(m, 0, id, 0, 0);
+			    args = new_args(m, 0, id, 0, 0, 0, 0);
 			}
 			else {
 			    if (nd_type($2) == NODE_LASGN ||
@@ -2931,11 +2935,11 @@
 				$2->nd_value = NEW_DVAR(id);
 				m->nd_plen = 1;
 				m->nd_next = $2;
-				args = new_args(m, 0, 0, 0, 0);
+				args = new_args(m, 0, 0, 0, 0, 0, 0);
 			    }
 			    else {
 				m->nd_next = node_assign(NEW_MASGN(NEW_LIST($2), 0), NEW_DVAR(id));
-				args = new_args(m, 0, id, 0, 0);
+				args = new_args(m, 0, id, 0, 0, 0, 0);
 			    }
 			}
 			scope = NEW_NODE(NODE_SCOPE, tbl, $8, args);
@@ -3339,125 +3343,349 @@
 		    }
 		;
 
-block_param	: f_arg ',' f_block_optarg ',' f_rest_arg opt_f_block_arg
+block_param	: f_arg ',' f_block_optarg ',' f_rest_arg ',' f_block_kwarg f_kwrest opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args($1, $3, $5, 0, $6);
+			$$ = new_args($1, $3, $5, 0, $7, $8, $9);
 		    /*%
-			$$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
+			$$ = params_new($1, $3, $5, Qnil, $7, $8, escape_Qundef($9));
 		    %*/
 		    }
+		| f_arg ',' f_block_optarg ',' f_rest_arg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, $5, 0, $7, 0, $8);
+		    /*%
+			$$ = params_new($1, $3, $5, Qnil, $7, Qnil, escape_Qundef($8));
+		    %*/
+		    }
+		| f_arg ',' f_block_optarg ',' f_rest_arg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, $5, 0, 0, 0, $6);
+		    /*%
+			$$ = params_new($1, $3, $5, Qnil, Qnil, Qnil, escape_Qundef($6));
+		    %*/
+		    }
+		| f_arg ',' f_block_optarg ',' f_rest_arg ',' f_arg ',' f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, $5, $7, $9, $10, $11);
+		    /*%
+			$$ = params_new($1, $3, $5, $7, $9, $10, escape_Qundef($11));
+		    %*/
+		    }
+		| f_arg ',' f_block_optarg ',' f_rest_arg ',' f_arg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, $5, $7, $9, 0, $10);
+		    /*%
+			$$ = params_new($1, $3, $5, $7, $9, Qnil, escape_Qundef($10));
+		    %*/
+		    }
 		| f_arg ',' f_block_optarg ',' f_rest_arg ',' f_arg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args($1, $3, $5, $7, $8);
+			$$ = new_args($1, $3, $5, $7, 0, 0, $8);
 		    /*%
-			$$ = params_new($1, $3, $5, $7, escape_Qundef($8));
+			$$ = params_new($1, $3, $5, $7, Qnil, Qnil, escape_Qundef($8));
 		    %*/
 		    }
+		| f_arg ',' f_block_optarg ',' f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, 0, 0, $5, $6, $7);
+		    /*%
+			$$ = params_new($1, $3, Qnil, Qnil, $5, $6, escape_Qundef($7));
+		    %*/
+		    }
+		| f_arg ',' f_block_optarg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, 0, 0, $5, 0, $6);
+		    /*%
+			$$ = params_new($1, $3, Qnil, Qnil, $5, Qnil, escape_Qundef($6));
+		    %*/
+		    }
 		| f_arg ',' f_block_optarg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args($1, $3, 0, 0, $4);
+			$$ = new_args($1, $3, 0, 0, 0, 0, $4);
 		    /*%
-			$$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
+			$$ = params_new($1, $3, Qnil, Qnil, Qnil, Qnil, escape_Qundef($4));
 		    %*/
 		    }
+		| f_arg ',' f_block_optarg ',' f_arg ',' f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, 0, $5, $7, $8, $9);
+		    /*%
+			$$ = params_new($1, $3, Qnil, $5, $7, $8, escape_Qundef($9));
+		    %*/
+		    }
+		| f_arg ',' f_block_optarg ',' f_arg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, 0, $5, $7, 0, $8);
+		    /*%
+			$$ = params_new($1, $3, Qnil, $5, $7, Qnil, escape_Qundef($8));
+		    %*/
+		    }
 		| f_arg ',' f_block_optarg ',' f_arg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args($1, $3, 0, $5, $6);
+			$$ = new_args($1, $3, 0, $5, 0, 0, $6);
 		    /*%
-			$$ = params_new($1, $3, Qnil, $5, escape_Qundef($6));
+			$$ = params_new($1, $3, Qnil, $5, Qnil, Qnil, escape_Qundef($6));
 		    %*/
 		    }
+                | f_arg ',' f_rest_arg ',' f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, 0, $3, 0, $5, $6, $7);
+		    /*%
+			$$ = params_new($1, Qnil, $3, Qnil, $5, $6, escape_Qundef($7));
+		    %*/
+		    }
+                | f_arg ',' f_rest_arg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, 0, $3, 0, $5, 0, $6);
+		    /*%
+			$$ = params_new($1, Qnil, $3, Qnil, $5, Qnil, escape_Qundef($6));
+		    %*/
+		    }
                 | f_arg ',' f_rest_arg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args($1, 0, $3, 0, $4);
+			$$ = new_args($1, 0, $3, 0, 0, 0, $4);
 		    /*%
-			$$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
+			$$ = params_new($1, Qnil, $3, Qnil, Qnil, Qnil, escape_Qundef($4));
 		    %*/
 		    }
 		| f_arg ','
 		    {
 		    /*%%%*/
-			$$ = new_args($1, 0, 1, 0, 0);
+			$$ = new_args($1, 0, 1, 0, 0, 0, 0);
 		    /*%
-			$$ = params_new($1, Qnil, Qnil, Qnil, Qnil);
+			$$ = params_new($1, Qnil, Qnil, Qnil, Qnil, Qnil, Qnil);
                         dispatch1(excessed_comma, $$);
 		    %*/
 		    }
+		| f_arg ',' f_rest_arg ',' f_arg ',' f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, 0, $3, $5, $7, $8, $9);
+		    /*%
+			$$ = params_new($1, Qnil, $3, $5, $7, $8, escape_Qundef($9));
+		    %*/
+		    }
+		| f_arg ',' f_rest_arg ',' f_arg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, 0, $3, $5, $7, 0, $8);
+		    /*%
+			$$ = params_new($1, Qnil, $3, $5, $7, Qnil, escape_Qundef($8));
+		    %*/
+		    }
 		| f_arg ',' f_rest_arg ',' f_arg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args($1, 0, $3, $5, $6);
+			$$ = new_args($1, 0, $3, $5, 0, 0, $6);
 		    /*%
-			$$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
+			$$ = params_new($1, Qnil, $3, $5, Qnil, Qnil, escape_Qundef($6));
 		    %*/
 		    }
+		| f_arg ',' f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, 0, 0, 0, $3, $4, $5);
+		    /*%
+			$$ = params_new($1, Qnil,Qnil, Qnil, $3, $4, escape_Qundef($5));
+		    %*/
+		    }
+		| f_arg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, 0, 0, 0, $3, 0, $4);
+		    /*%
+			$$ = params_new($1, Qnil,Qnil, Qnil, $3, Qnil, escape_Qundef($4));
+		    %*/
+		    }
 		| f_arg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args($1, 0, 0, 0, $2);
+			$$ = new_args($1, 0, 0, 0, 0, 0, $2);
 		    /*%
-			$$ = params_new($1, Qnil,Qnil, Qnil, escape_Qundef($2));
+			$$ = params_new($1, Qnil,Qnil, Qnil, Qnil, Qnil, escape_Qundef($2));
 		    %*/
 		    }
+		| f_block_optarg ',' f_rest_arg ',' f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, $1, $3, 0, $5, $6, $7);
+		    /*%
+			$$ = params_new(Qnil, $1, $3, Qnil, $5, $6, escape_Qundef($7));
+		    %*/
+		    }
+		| f_block_optarg ',' f_rest_arg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, $1, $3, 0, $5, 0, $6);
+		    /*%
+			$$ = params_new(Qnil, $1, $3, Qnil, $5, Qnil, escape_Qundef($6));
+		    %*/
+		    }
 		| f_block_optarg ',' f_rest_arg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args(0, $1, $3, 0, $4);
+			$$ = new_args(0, $1, $3, 0, 0, 0, $4);
 		    /*%
-			$$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4));
+			$$ = params_new(Qnil, $1, $3, Qnil, Qnil, Qnil, escape_Qundef($4));
 		    %*/
 		    }
+		| f_block_optarg ',' f_rest_arg ',' f_arg ',' f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, $1, $3, $5, $7, $8, $9);
+		    /*%
+			$$ = params_new(Qnil, $1, $3, $5, $7, $8, escape_Qundef($9));
+		    %*/
+		    }
+		| f_block_optarg ',' f_rest_arg ',' f_arg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, $1, $3, $5, $7, 0, $8);
+		    /*%
+			$$ = params_new(Qnil, $1, $3, $5, $7, Qnil, escape_Qundef($8));
+		    %*/
+		    }
 		| f_block_optarg ',' f_rest_arg ',' f_arg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args(0, $1, $3, $5, $6);
+			$$ = new_args(0, $1, $3, $5, 0, 0, $6);
 		    /*%
-			$$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6));
+			$$ = params_new(Qnil, $1, $3, $5, Qnil, Qnil, escape_Qundef($6));
 		    %*/
 		    }
+		| f_block_optarg ',' f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, $1, 0, 0, $3, $4, $5);
+		    /*%
+			$$ = params_new(Qnil, $1, Qnil, Qnil, $3, $4, escape_Qundef($5));
+		    %*/
+		    }
+		| f_block_optarg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, $1, 0, 0, $3, 0, $4);
+		    /*%
+			$$ = params_new(Qnil, $1, Qnil, Qnil, $3, Qnil, escape_Qundef($4));
+		    %*/
+		    }
 		| f_block_optarg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args(0, $1, 0, 0, $2);
+			$$ = new_args(0, $1, 0, 0, 0, 0, $2);
 		    /*%
-			$$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2));
+			$$ = params_new(Qnil, $1, Qnil, Qnil, Qnil, Qnil, escape_Qundef($2));
 		    %*/
 		    }
+		| f_block_optarg ',' f_arg ',' f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, $1, 0, $3, $5, $6, $7);
+		    /*%
+			$$ = params_new(Qnil, $1, Qnil, $3, $5, $6, escape_Qundef($7));
+		    %*/
+		    }
+		| f_block_optarg ',' f_arg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, $1, 0, $3, $5, 0, $6);
+		    /*%
+			$$ = params_new(Qnil, $1, Qnil, $3, $5, Qnil, escape_Qundef($6));
+		    %*/
+		    }
 		| f_block_optarg ',' f_arg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args(0, $1, 0, $3, $4);
+			$$ = new_args(0, $1, 0, $3, 0, 0, $4);
 		    /*%
-			$$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4));
+			$$ = params_new(Qnil, $1, Qnil, $3, Qnil, Qnil, escape_Qundef($4));
 		    %*/
 		    }
+		| f_rest_arg ',' f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, 0, $1, 0, $3, $4, $5);
+		    /*%
+			$$ = params_new(Qnil, Qnil, $1, Qnil, $3, $4, escape_Qundef($5));
+		    %*/
+		    }
+		| f_rest_arg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, 0, $1, 0, $3, 0, $4);
+		    /*%
+			$$ = params_new(Qnil, Qnil, $1, Qnil, $3, Qnil, escape_Qundef($4));
+		    %*/
+		    }
 		| f_rest_arg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args(0, 0, $1, 0, $2);
+			$$ = new_args(0, 0, $1, 0, 0, 0, $2);
 		    /*%
-			$$ = params_new(Qnil, Qnil, $1, Qnil, escape_Qundef($2));
+			$$ = params_new(Qnil, Qnil, $1, Qnil, Qnil, Qnil, escape_Qundef($2));
 		    %*/
 		    }
+		| f_rest_arg ',' f_arg ',' f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, 0, $1, $3, $5, $6, $7);
+		    /*%
+			$$ = params_new(Qnil, Qnil, $1, $3, $5, $6, escape_Qundef($7));
+		    %*/
+		    }
+		| f_rest_arg ',' f_arg ',' f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, 0, $1, $3, $5, 0, $6);
+		    /*%
+			$$ = params_new(Qnil, Qnil, $1, $3, $5, Qnil, escape_Qundef($6));
+		    %*/
+		    }
 		| f_rest_arg ',' f_arg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args(0, 0, $1, $3, $4);
+			$$ = new_args(0, 0, $1, $3, 0, 0, $4);
 		    /*%
-			$$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
+			$$ = params_new(Qnil, Qnil, $1, $3, Qnil, Qnil, escape_Qundef($4));
 		    %*/
 		    }
+		| f_block_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, 0, 0, 0, $1, $2, $3);
+		    /*%
+			$$ = params_new(Qnil, Qnil, Qnil, Qnil, $1, $2, escape_Qundef($3));
+		    %*/
+		    }
+		| f_block_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args(0, 0, 0, 0, $1, 0, $2);
+		    /*%
+			$$ = params_new(Qnil, Qnil, Qnil, Qnil, $1, Qnil, escape_Qundef($2));
+		    %*/
+		    }
 		| f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args(0, 0, 0, 0, $1);
+			$$ = new_args(0, 0, 0, 0, 0, 0, $1);
 		    /*%
-			$$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
+			$$ = params_new(Qnil, Qnil, Qnil, Qnil, Qnil, Qnil, $1);
 		    %*/
 		    }
 		;
@@ -3474,7 +3702,7 @@
 		    /*%%%*/
 			$$ = 0;
 		    /*%
-			$$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
+			$$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
                                           escape_Qundef($2));
 		    %*/
 		    }
@@ -3483,7 +3711,7 @@
 		    /*%%%*/
 			$$ = 0;
 		    /*%
-			$$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
+			$$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
                                           Qnil);
 		    %*/
 		    }
@@ -4428,124 +4656,348 @@
 		    }
 		;
 
-f_args		: f_arg ',' f_optarg ',' f_rest_arg opt_f_block_arg
+f_args		: f_arg ',' f_optarg ',' f_rest_arg ',' f_kwarg f_kwrest opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args($1, $3, $5, 0, $6);
+			$$ = new_args($1, $3, $5, 0, $7, $8, $9);
 		    /*%
-			$$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
+			$$ = params_new($1, $3, $5, Qnil, $7, $8, escape_Qundef($9));
 		    %*/
 		    }
+		| f_arg ',' f_optarg ',' f_rest_arg ',' f_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, $5, 0, $7, 0, $8);
+		    /*%
+			$$ = params_new($1, $3, $5, Qnil, $7, Qnil, escape_Qundef($8));
+		    %*/
+		    }
+		| f_arg ',' f_optarg ',' f_rest_arg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, $5, 0, 0, 0, $6);
+		    /*%
+			$$ = params_new($1, $3, $5, Qnil, Qnil, Qnil, escape_Qundef($6));
+		    %*/
+		    }
+		| f_arg ',' f_optarg ',' f_rest_arg ',' f_arg ',' f_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, $5, $7, $9, $10, $11);
+		    /*%
+			$$ = params_new($1, $3, $5, $7, $9, $10, escape_Qundef($11));
+		    %*/
+		    }
+		| f_arg ',' f_optarg ',' f_rest_arg ',' f_arg ',' f_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, $5, $7, $9, 0, $10);
+		    /*%
+			$$ = params_new($1, $3, $5, $7, $9, Qnil, escape_Qundef($10));
+		    %*/
+		    }
 		| f_arg ',' f_optarg ',' f_rest_arg ',' f_arg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args($1, $3, $5, $7, $8);
+			$$ = new_args($1, $3, $5, $7, 0, 0, $8);
 		    /*%
-			$$ = params_new($1, $3, $5, $7, escape_Qundef($8));
+			$$ = params_new($1, $3, $5, $7, Qnil, Qnil, escape_Qundef($8));
 		    %*/
 		    }
+		| f_arg ',' f_optarg ',' f_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, 0, 0, $5, $6, $7);
+		    /*%
+			$$ = params_new($1, $3, Qnil, Qnil, $5, $6, escape_Qundef($7));
+		    %*/
+		    }
+		| f_arg ',' f_optarg ',' f_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, 0, 0, $5, 0, $6);
+		    /*%
+			$$ = params_new($1, $3, Qnil, Qnil, $5, Qnil, escape_Qundef($6));
+		    %*/
+		    }
 		| f_arg ',' f_optarg opt_f_block_arg
 		    {
 		    /*%%%*/
-			$$ = new_args($1, $3, 0, 0, $4);
+			$$ = new_args($1, $3, 0, 0, 0, 0, $4);
 		    /*%
-			$$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
+			$$ = params_new($1, $3, Qnil, Qnil, Qnil, Qnil, escape_Qundef($4));
 		    %*/
 		    }
+		| f_arg ',' f_optarg ',' f_arg ',' f_kwarg f_kwrest opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_args($1, $3, 0, $5, $7, $8, $9);
+		    /*%
+			$$ = params_new($1, $3, Qnil, $5, $7, $8, escape_Qundef($9));
+		    %*/
+		    }
+		| f_arg ',' f_optarg ',' f_arg ',' f_kwarg opt_f_block_arg
+		    {
+		    /*%%%*/
+			$$ = new_a (... truncated)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]