diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | parse.y | 2 | ||||
-rw-r--r-- | test/ripper/test_parser_events.rb | 10 |
3 files changed, 16 insertions, 1 deletions
@@ -1,3 +1,8 @@ +Wed Oct 28 13:29:39 2015 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * parse.y (new_attr_op_assign): fix op_assign type, which is + already an ID since r52284. [Feature #11537] + Tue Oct 27 23:14:14 2015 Nobuyoshi Nakada <nobu@ruby-lang.org> * defs/id.def: enable anonymous IDs not to expose internal IDs for @@ -521,7 +521,7 @@ static int id_is_var_gen(struct parser_params *parser, ID id); static VALUE new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs); static VALUE new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs); -#define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), ripper_id2sym(type), (attr), (op), (rhs)) +#define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs)) #endif /* !RIPPER */ diff --git a/test/ripper/test_parser_events.rb b/test/ripper/test_parser_events.rb index aa222de84f..9fa65fa89b 100644 --- a/test/ripper/test_parser_events.rb +++ b/test/ripper/test_parser_events.rb @@ -789,6 +789,16 @@ class TestRipper::ParserEvents < Test::Unit::TestCase tree = parse('a::X ||= c 1', :on_opassign) {thru_opassign = true} assert_equal true, thru_opassign assert_equal "[opassign(const_path_field(vcall(a),X),||=,command(c,[1]))]", tree + + thru_opassign = false + tree = parse("self.foo += 1", :on_opassign) {thru_opassign = true} + assert_equal true, thru_opassign + assert_equal "[opassign(field(ref(self),.,foo),+=,1)]", tree + + thru_opassign = false + tree = parse("self.?foo += 1", :on_opassign) {thru_opassign = true} + assert_equal true, thru_opassign + assert_equal "[opassign(field(ref(self),.?,foo),+=,1)]", tree end def test_opassign_error |