summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-20 16:21:29 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-20 16:21:29 +0000
commit7ba7a2f70ebc27fd097843bf866d46b665475cbb (patch)
treebc223b45ca2c774502ea681093f7488efbcfd619
parent43aa218de3958b78897d2c85caad07ff324e576a (diff)
parse.y: rewrite excessed_comma process
Currently, parser.y includes core parser and Ripper parser obscurity. In addition, *some* Ripper code uses the result of the core parser, which make it difficult to separate the two parsers. I want to simplify this, not by separating the two parsers, but by making *all* Ripper actions follows the core parser actions. In other words, all the core parser actions run always even in Ripper, and after that, Ripper-specific actions run. For tha sake, in principle, I want to put `/*% ripper: ... %*/` in the end of actions. Anyway, it is too dirty to put it within expressions, IMO. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61990 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--parse.y12
1 files changed, 4 insertions, 8 deletions
diff --git a/parse.y b/parse.y
index 57235b6009..7c518872c7 100644
--- a/parse.y
+++ b/parse.y
@@ -2908,16 +2908,12 @@ block_param : f_arg ',' f_block_optarg ',' f_rest_arg opt_block_args_tail
}
| f_arg ','
{
-#ifndef RIPPER
+ /*%%%*/
/* magic number for rest_id in iseq_set_arguments() */
const ID excessed_comma = 1;
-#else
- const VALUE excessed_comma =
- /*% ripper: excessed_comma! %*/
- ;
-#endif
- $$ = new_args_tail(p, Qnone, Qnone, Qnone, &@1);
- $$ = new_args(p, $1, Qnone, excessed_comma, Qnone, $$, &@$);
+ $$ = new_args(p, $1, Qnone, excessed_comma, Qnone, new_args_tail(p, Qnone, Qnone, Qnone, &@1), &@$);
+ /*% %*/
+ /*% ripper: new_args(p, $1, Qnone, excessed_comma!, Qnone, new_args_tail(p, Qnone, Qnone, Qnone, NULL), NULL) %*/
}
| f_arg ',' f_rest_arg ',' f_arg opt_block_args_tail
{