ruby-changes:40201
From: nobu <ko1@a...>
Date: Mon, 26 Oct 2015 12:55:35 +0900 (JST)
Subject: [ruby-changes:40201] nobu:r52282 (trunk): parse.y: call_op2
nobu 2015-10-26 12:55:08 +0900 (Mon, 26 Oct 2015) New Revision: 52282 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=52282 Log: parse.y: call_op2 * parse.y (call_op2): separate from call_op and also allow "::", while dot_or_colon should not allow ".?". [Feature #11537] Modified files: trunk/ChangeLog trunk/parse.y trunk/test/ripper/test_parser_events.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 52281) +++ ChangeLog (revision 52282) @@ -1,3 +1,13 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Mon Oct 26 12:55:06 2015 Nobuyoshi Nakada <nobu@r...> + + * parse.y (call_op2): separate from call_op and also allow "::", + while dot_or_colon should not allow ".?". [Feature #11537] + +Mon Oct 26 12:54:26 2015 Nobuyoshi Nakada <nobu@r...> + + * parse.y (call_op2): separate from call_op and also allow "::", + while dot_or_colon should not allow ".?". [Feature #11537] + Mon Oct 26 01:03:23 2015 Rei Odaira <Rei.Odaira@g...> * thread_pthread.c: fix compile erros when Index: parse.y =================================================================== --- parse.y (revision 52281) +++ parse.y (revision 52282) @@ -847,7 +847,7 @@ static void token_info_pop(struct parser https://github.com/ruby/ruby/blob/trunk/parse.y#L847 %type <node> mlhs mlhs_head mlhs_basic mlhs_item mlhs_node mlhs_post mlhs_inner %type <id> fsym keyword_variable user_variable sym symbol operation operation2 operation3 %type <id> cname fname op f_rest_arg f_block_arg opt_f_block_arg f_norm_arg f_bad_arg -%type <id> f_kwrest f_label f_arg_asgn call_op +%type <id> f_kwrest f_label f_arg_asgn call_op call_op2 /*%%%*/ /*% %type <val> program reswords then do dot_or_colon @@ -1395,7 +1395,7 @@ command_call : command https://github.com/ruby/ruby/blob/trunk/parse.y#L1395 ; block_command : block_call - | block_call dot_or_colon operation2 command_args + | block_call call_op2 operation2 command_args { /*%%%*/ $$ = NEW_CALL($1, $3, $4); @@ -3608,7 +3608,7 @@ block_call : command do_block https://github.com/ruby/ruby/blob/trunk/parse.y#L3608 $$ = method_add_block($1, $2); %*/ } - | block_call dot_or_colon operation2 opt_paren_args + | block_call call_op2 operation2 opt_paren_args { /*%%%*/ $$ = NEW_CALL($1, $3, $4); @@ -3617,7 +3617,7 @@ block_call : command do_block https://github.com/ruby/ruby/blob/trunk/parse.y#L3617 $$ = method_optarg($$, $4); %*/ } - | block_call dot_or_colon operation2 opt_paren_args brace_block + | block_call call_op2 operation2 opt_paren_args brace_block { /*%%%*/ block_dup_check($4, $5); @@ -3629,7 +3629,7 @@ block_call : command do_block https://github.com/ruby/ruby/blob/trunk/parse.y#L3629 $$ = method_add_block($$, $5); %*/ } - | block_call dot_or_colon operation2 command_args do_block + | block_call call_op2 operation2 command_args do_block { /*%%%*/ block_dup_check($4, $5); @@ -5107,7 +5107,7 @@ operation3 : tIDENTIFIER https://github.com/ruby/ruby/blob/trunk/parse.y#L5107 | op ; -dot_or_colon : call_op +dot_or_colon : '.' /*%c%*/ /*%c { $$ = $<val>1; } @@ -5123,6 +5123,10 @@ call_op : '.' {$$ = '.';} https://github.com/ruby/ruby/blob/trunk/parse.y#L5123 | tDOTQ {$$ = tDOTQ;} ; +call_op2 : call_op + | tCOLON2 {$$ = tCOLON2;} + ; + opt_terms : /* none */ | terms ; Index: test/ripper/test_parser_events.rb =================================================================== --- test/ripper/test_parser_events.rb (revision 52281) +++ test/ripper/test_parser_events.rb (revision 52282) @@ -389,6 +389,16 @@ class TestRipper::ParserEvents < Test::U https://github.com/ruby/ruby/blob/trunk/test/ripper/test_parser_events.rb#L389 } assert_equal true, thru_call assert_equal "[call(vcall(foo),::,call,[])]", tree + + thru_call = false + tree = parse("self.?foo", :on_call) {thru_call = true} + assert_equal true, thru_call + assert_equal "[call(ref(self),.?,foo)]", tree + + thru_call = false + tree = parse("self.?foo()", :on_call) {thru_call = true} + assert_equal true, thru_call + assert_equal "[call(ref(self),.?,foo,[])]", tree end def test_excessed_comma @@ -554,8 +564,13 @@ class TestRipper::ParserEvents < Test::U https://github.com/ruby/ruby/blob/trunk/test/ripper/test_parser_events.rb#L564 def test_defs thru_defs = false - parse('def foo.bar; end', :on_defs) {thru_defs = true} + tree = parse('def foo.bar; end', :on_defs) {thru_defs = true} assert_equal true, thru_defs + assert_equal("[defs(vcall(foo),.,bar,[],bodystmt([void()]))]", tree) + + thru_parse_error = false + tree = parse('def foo.?bar; end', :on_parse_error) {thru_parse_error = true} + assert_equal(true, thru_parse_error) end def test_do_block -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/