summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2024-05-19 19:42:57 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2024-06-07 11:28:38 +0900
commit9e28354705e2aa312e5dee775e3bd08095fc7e9c (patch)
tree4f98dfa744da8c61f358bd9abb05bd34f297d9c7
parent335cb28886dda81b5c3dad1bb02cf7b7450e05e9 (diff)
ripper: Fix excess `compile_error` at simple backref op_asgn
Fix up 89cfc1520717257073012ec07105c551e4b8af7c.
-rw-r--r--parse.y10
-rw-r--r--test/ripper/test_parser_events.rb24
2 files changed, 18 insertions, 16 deletions
diff --git a/parse.y b/parse.y
index e8ac0917e7..e10dee1646 100644
--- a/parse.y
+++ b/parse.y
@@ -1448,7 +1448,9 @@ static NODE *assignable(struct parser_params*,ID,NODE*,const YYLTYPE*);
static NODE *aryset(struct parser_params*,NODE*,NODE*,const YYLTYPE*);
static NODE *attrset(struct parser_params*,NODE*,ID,ID,const YYLTYPE*);
+#ifndef RIPPER
static void rb_backref_error(struct parser_params*,NODE*);
+#endif
static NODE *node_assign(struct parser_params*,NODE*,NODE*,struct lex_context,const YYLTYPE*);
static NODE *new_op_assign(struct parser_params *p, NODE *lhs, ID op, NODE *rhs, struct lex_context, const YYLTYPE *loc);
@@ -3875,10 +3877,10 @@ arg : lhs '=' lex_ctxt arg_rhs
}
| backref tOP_ASGN lex_ctxt arg_rhs
{
- rb_backref_error(p, $1);
/*%%%*/
- $$ = NEW_ERROR(&@$);
+ rb_backref_error(p, $1);
/*% %*/
+ $$ = NEW_ERROR(&@$);
/*% ripper[error]: backref_error(p, $1, opassign!(var_field!($:1), $:2, $:4)) %*/
}
| arg tDOT2 arg
@@ -6114,8 +6116,6 @@ qsym_list : /* none */
string_contents : /* none */
{
$$ = 0;
- /*%%%*/
- /*% %*/
/*% ripper: string_content! %*/
}
| string_contents string_content
@@ -13671,6 +13671,7 @@ attrset(struct parser_params *p, NODE *recv, ID atype, ID id, const YYLTYPE *loc
return NEW_ATTRASGN(recv, id, 0, loc);
}
+#ifndef RIPPER
static void
rb_backref_error(struct parser_params *p, NODE *node)
{
@@ -13683,6 +13684,7 @@ rb_backref_error(struct parser_params *p, NODE *node)
break;
}
}
+#endif
#ifdef RIPPER
static VALUE
diff --git a/test/ripper/test_parser_events.rb b/test/ripper/test_parser_events.rb
index a5c7401968..5434acb523 100644
--- a/test/ripper/test_parser_events.rb
+++ b/test/ripper/test_parser_events.rb
@@ -267,28 +267,28 @@ class TestRipper::ParserEvents < Test::Unit::TestCase
end
def test_assign_error_backref
- thru_assign_error = false
+ errors = []
result =
- parse('$& = 1', :on_assign_error) {thru_assign_error = true}
- assert_equal true, thru_assign_error
+ parse('$& = 1', %i[on_assign_error compile_error]) {|e, *| errors << e}
+ assert_equal %i[on_assign_error], errors
assert_equal '[assign(assign_error(var_field($&)),1)]', result
- thru_assign_error = false
+ errors = []
result =
- parse('$&, _ = 1', :on_assign_error) {thru_assign_error = true}
- assert_equal true, thru_assign_error
+ parse('$&, _ = 1', %i[on_assign_error compile_error]) {|e, *| errors << e}
+ assert_equal %i[on_assign_error], errors
assert_equal '[massign([assign_error(var_field($&)),var_field(_)],1)]', result
- thru_assign_error = false
+ errors = []
result =
- parse('$& += 1', :on_assign_error) {thru_assign_error = true}
- assert_equal true, thru_assign_error
+ parse('$& += 1', %i[on_assign_error compile_error]) {|e, *| errors << e}
+ assert_equal %i[on_assign_error], errors
assert_equal '[assign_error(opassign(var_field($&),+=,1))]', result
- thru_assign_error = false
+ errors = []
result =
- parse('$& += cmd 1, 2', :on_assign_error) {thru_assign_error = true}
- assert_equal true, thru_assign_error
+ parse('$& += cmd 1, 2', %i[on_assign_error compile_error]) {|e, *| errors << e}
+ assert_equal %i[on_assign_error], errors
assert_equal '[assign_error(opassign(var_field($&),+=,command(cmd,[1,2])))]', result
end