Feature #16746 ยป endless-method-definition.patch
| parse.y | ||
|---|---|---|
|
%type <node> command_rhs arg_rhs
|
||
|
%type <node> command_asgn mrhs mrhs_arg superclass block_call block_command
|
||
|
%type <node> f_block_optarg f_block_opt
|
||
|
%type <node> f_arglist f_args f_arg f_arg_item f_optarg f_marg f_marg_list f_margs f_rest_marg
|
||
|
%type <node> f_arglist f_arglist_opt f_args f_arg f_arg_item f_optarg f_marg f_marg_list f_margs f_rest_marg
|
||
|
%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
|
||
| ... | ... | |
|
/*% ripper: case!($1, in!($5, Qnil, Qnil)) %*/
|
||
|
}
|
||
|
| arg %prec tLBRACE_ARG
|
||
|
| k_def ':' fname
|
||
|
{
|
||
|
numparam_name(p, get_id($3));
|
||
|
local_push(p, 0);
|
||
|
$<id>$ = p->cur_arg;
|
||
|
p->cur_arg = 0;
|
||
|
$<ctxt>1 = p->ctxt;
|
||
|
p->ctxt.in_def = 1;
|
||
|
}
|
||
|
f_arglist_opt '=' arg
|
||
|
{
|
||
|
/*%%%*/
|
||
|
NODE *body = remove_begin($7);
|
||
|
reduce_nodes(p, &body);
|
||
|
$$ = NEW_DEFN($3, $5, body, &@$);
|
||
|
nd_set_line($$->nd_defn, @7.end_pos.lineno);
|
||
|
set_line_body(body, @1.beg_pos.lineno);
|
||
|
/*% %*/
|
||
|
/*% ripper: def!($3, $5, $7) %*/
|
||
|
local_pop(p);
|
||
|
p->ctxt.in_def = $<ctxt>1.in_def;
|
||
|
p->cur_arg = $<id>4;
|
||
|
}
|
||
|
| k_def ':' singleton dot_or_colon {SET_LEX_STATE(EXPR_FNAME);} fname
|
||
|
{
|
||
|
numparam_name(p, get_id($6));
|
||
|
$<ctxt>2 = p->ctxt;
|
||
|
p->ctxt.in_def = 1;
|
||
|
SET_LEX_STATE(EXPR_ENDFN|EXPR_LABEL); /* force for args */
|
||
|
local_push(p, 0);
|
||
|
$<id>$ = p->cur_arg;
|
||
|
p->cur_arg = 0;
|
||
|
}
|
||
|
f_arglist_opt '='
|
||
|
arg
|
||
|
{
|
||
|
/*%%%*/
|
||
|
NODE *body = remove_begin($10);
|
||
|
reduce_nodes(p, &body);
|
||
|
$$ = NEW_DEFS($3, $6, $8, body, &@$);
|
||
|
nd_set_line($$->nd_defn, @10.end_pos.lineno);
|
||
|
set_line_body(body, @1.beg_pos.lineno);
|
||
|
/*% %*/
|
||
|
/*% ripper: defs!($3, $4, $6, $8, $10) %*/
|
||
|
local_pop(p);
|
||
|
p->ctxt.in_def = $<ctxt>2.in_def;
|
||
|
p->cur_arg = $<id>7;
|
||
|
}
|
||
|
;
|
||
|
expr_value : expr
|
||
| ... | ... | |
|
}
|
||
|
;
|
||
|
f_arglist_opt : f_arglist
|
||
|
| /* none */
|
||
|
{
|
||
|
/*%%%*/
|
||
|
$$ = new_args_tail(p, Qnone, Qnone, Qnone, &@0);
|
||
|
$$ = new_args(p, Qnone, Qnone, Qnone, Qnone, $$, &@0);
|
||
|
/*% %*/
|
||
|
/*% ripper: Qnil %*/
|
||
|
}
|
||
|
;
|
||
|
f_arglist : '(' f_args rparen
|
||
|
{
|
||
|
/*%%%*/
|
||