diff options
| author | ydah <t.yudai92@gmail.com> | 2025-01-02 01:11:23 +0900 |
|---|---|---|
| committer | Yudai Takada <t.yudai92@gmail.com> | 2025-01-04 18:58:44 +0900 |
| commit | 4fa68953fbf1e2cec9b8650a5a25b4b6bfe0e331 (patch) | |
| tree | c4be0c27b7f14e260b06c44ed925e625cd4f48ae | |
| parent | 1e330dd5ecddd709d9d3c2fa24a42506c52c06b3 (diff) | |
Use user defined parameterizing rules `asgn(lhs, rhs)`
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/12494
| -rw-r--r-- | parse.y | 26 |
1 files changed, 11 insertions, 15 deletions
@@ -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, &@$); |
