summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authoryui-knk <spiketeika@gmail.com>2022-11-17 23:43:21 +0900
committerYuichiro Kaneko <spiketeika@gmail.com>2022-11-18 18:25:42 +0900
commitf0ce1186620273a1182e6084559765143099eb88 (patch)
tree8c78074e33cc1387827923003939c375a444431d /parse.y
parentddd62fadaf91418cd259593285bc59358fb0b166 (diff)
downloadruby-f0ce1186620273a1182e6084559765143099eb88.tar.gz
Make anonymous rest arg (*) and block arg (&) accessible from ARGS node
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y11
1 files changed, 7 insertions, 4 deletions
diff --git a/parse.y b/parse.y
index f5f8e15acf..846136bd03 100644
--- a/parse.y
+++ b/parse.y
@@ -5322,6 +5322,9 @@ args_tail : f_kwarg ',' f_kwrest opt_f_block_arg
{
add_forwarding_args(p);
$$ = new_args_tail(p, Qnone, $1, ID2VAL(idFWD_BLOCK), &@1);
+ /*%%%*/
+ ($$->nd_ainfo)->forwarding = 1;
+ /*% %*/
}
;
@@ -5688,7 +5691,7 @@ f_rest_arg : restarg_mark tIDENTIFIER
{
arg_var(p, ANON_REST_ID);
/*%%%*/
- $$ = internal_id(p);
+ $$ = ANON_REST_ID;
/*% %*/
/*% ripper: rest_param!(Qnil) %*/
}
@@ -5710,7 +5713,7 @@ f_block_arg : blkarg_mark tIDENTIFIER
{
arg_var(p, ANON_BLOCK_ID);
/*%%%*/
- $$ = internal_id(p);
+ $$ = ANON_BLOCK_ID;
/*% %*/
/*% ripper: blockarg!(Qnil) %*/
}
@@ -12204,7 +12207,7 @@ new_args(struct parser_params *p, NODE *pre_args, NODE *opt_args, ID rest_arg, N
int saved_line = p->ruby_sourceline;
struct rb_args_info *args = tail->nd_ainfo;
- if (args->block_arg == idFWD_BLOCK) {
+ if (args->forwarding) {
if (rest_arg) {
yyerror1(&tail->nd_loc, "... after rest argument");
return tail;
@@ -12223,7 +12226,7 @@ new_args(struct parser_params *p, NODE *pre_args, NODE *opt_args, ID rest_arg, N
args->opt_args = opt_args;
- args->ruby2_keywords = rest_arg == idFWD_REST;
+ args->ruby2_keywords = args->forwarding;
p->ruby_sourceline = saved_line;
nd_set_loc(tail, loc);