summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorydah <t.yudai92@gmail.com>2025-01-02 01:11:23 +0900
committerYudai Takada <t.yudai92@gmail.com>2025-01-04 18:58:44 +0900
commit4fa68953fbf1e2cec9b8650a5a25b4b6bfe0e331 (patch)
treec4be0c27b7f14e260b06c44ed925e625cd4f48ae
parent1e330dd5ecddd709d9d3c2fa24a42506c52c06b3 (diff)
Use user defined parameterizing rules `asgn(lhs, rhs)`
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/12494
-rw-r--r--parse.y26
1 files changed, 11 insertions, 15 deletions
diff --git a/parse.y b/parse.y
index 3054313062..ff9a1ed2d6 100644
--- a/parse.y
+++ b/parse.y
@@ -2919,6 +2919,14 @@ rb_parser_ary_free(rb_parser_t *p, rb_parser_ary_t *ary)
/*
* parameterizing rules
*/
+%rule asgn(lhs, rhs) <node>
+ : lhs '=' lex_ctxt rhs
+ {
+ $$ = node_assign(p, (NODE *)$lhs, $rhs, $lex_ctxt, &@$);
+ /*% ripper: assign!($:1, $:4) %*/
+ }
+ ;
+
%rule backref_with(value) <node>
: backref tOP_ASGN lex_ctxt value
{
@@ -3252,11 +3260,7 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
$$ = node_assign(p, (NODE *)$1, $4, $3, &@$);
/*% ripper: massign!($:1, $:4) %*/
}
- | lhs '=' lex_ctxt mrhs
- {
- $$ = node_assign(p, $1, $4, $3, &@$);
- /*% ripper: assign!($:1, $:4) %*/
- }
+ | asgn(lhs, mrhs)
| mlhs '=' lex_ctxt mrhs_arg modifier_rescue
after_rescue stmt[resbody]
{
@@ -3281,11 +3285,7 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
}
;
-command_asgn : lhs '=' lex_ctxt command_rhs
- {
- $$ = node_assign(p, $1, $4, $3, &@$);
- /*% ripper: assign!($:1, $:4) %*/
- }
+command_asgn : asgn(lhs, command_rhs)
| var_lhs tOP_ASGN lex_ctxt command_rhs
{
$$ = new_op_assign(p, $1, $2, $4, $3, &@$);
@@ -3852,11 +3852,7 @@ reswords : keyword__LINE__ | keyword__FILE__ | keyword__ENCODING__
| keyword_while | keyword_until
;
-arg : lhs '=' lex_ctxt arg_rhs
- {
- $$ = node_assign(p, $1, $4, $3, &@$);
- /*% ripper: assign!($:1, $:4) %*/
- }
+arg : asgn(lhs, arg_rhs)
| var_lhs tOP_ASGN lex_ctxt arg_rhs
{
$$ = new_op_assign(p, $1, $2, $4, $3, &@$);