Use user defined parameterizing rules asgn(lhs, rhs)

This commit is contained in:
ydah 2025-01-02 01:11:23 +09:00 committed by Yudai Takada
parent 1e330dd5ec
commit 4fa68953fb
Notes: git 2025-01-04 09:59:05 +00:00

26
parse.y
View File

@ -2919,6 +2919,14 @@ rb_parser_ary_free(rb_parser_t *p, rb_parser_ary_t *ary)
/* /*
* parameterizing rules * 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> %rule backref_with(value) <node>
: backref tOP_ASGN lex_ctxt value : 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, &@$); $$ = node_assign(p, (NODE *)$1, $4, $3, &@$);
/*% ripper: massign!($:1, $:4) %*/ /*% ripper: massign!($:1, $:4) %*/
} }
| lhs '=' lex_ctxt mrhs | asgn(lhs, mrhs)
{
$$ = node_assign(p, $1, $4, $3, &@$);
/*% ripper: assign!($:1, $:4) %*/
}
| mlhs '=' lex_ctxt mrhs_arg modifier_rescue | mlhs '=' lex_ctxt mrhs_arg modifier_rescue
after_rescue stmt[resbody] 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 command_asgn : asgn(lhs, command_rhs)
{
$$ = node_assign(p, $1, $4, $3, &@$);
/*% ripper: assign!($:1, $:4) %*/
}
| var_lhs tOP_ASGN lex_ctxt command_rhs | var_lhs tOP_ASGN lex_ctxt command_rhs
{ {
$$ = new_op_assign(p, $1, $2, $4, $3, &@$); $$ = new_op_assign(p, $1, $2, $4, $3, &@$);
@ -3852,11 +3852,7 @@ reswords : keyword__LINE__ | keyword__FILE__ | keyword__ENCODING__
| keyword_while | keyword_until | keyword_while | keyword_until
; ;
arg : lhs '=' lex_ctxt arg_rhs arg : asgn(lhs, arg_rhs)
{
$$ = node_assign(p, $1, $4, $3, &@$);
/*% ripper: assign!($:1, $:4) %*/
}
| var_lhs tOP_ASGN lex_ctxt arg_rhs | var_lhs tOP_ASGN lex_ctxt arg_rhs
{ {
$$ = new_op_assign(p, $1, $2, $4, $3, &@$); $$ = new_op_assign(p, $1, $2, $4, $3, &@$);