ruby-changes:21982
From: nobu <ko1@a...>
Date: Wed, 14 Dec 2011 00:01:37 +0900 (JST)
Subject: [ruby-changes:21982] nobu:r34031 (trunk): * parse.y (primary): point method name line.
nobu 2011-12-14 00:01:20 +0900 (Wed, 14 Dec 2011) New Revision: 34031 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34031 Log: * parse.y (primary): point method name line. [ruby-core:40936] [Bug #5614] Modified files: trunk/ChangeLog trunk/parse.y trunk/test/ruby/test_parse.rb trunk/test/ruby/test_settracefunc.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 34030) +++ ChangeLog (revision 34031) @@ -1,3 +1,8 @@ +Wed Dec 14 00:01:15 2011 Nobuyoshi Nakada <nobu@r...> + + * parse.y (primary): point method name line. [ruby-core:40936] + [Bug #5614] + Tue Dec 13 23:43:48 2011 CHIKANAGA Tomoyuki <nagachika00@g...> * error.c (name_err_mesg_to_str): clear rb_thread_t::errinfo when Index: parse.y =================================================================== --- parse.y (revision 34030) +++ parse.y (revision 34031) @@ -3645,33 +3645,51 @@ } ; -method_call : operation paren_args +method_call : operation { /*%%%*/ - $$ = NEW_FCALL($1, $2); - fixpos($$, $2); + $<num>$ = ruby_sourceline; + /*% %*/ + } + paren_args + { + /*%%%*/ + $$ = NEW_FCALL($1, $3); + nd_set_line($$, $<num>2); /*% - $$ = method_arg(dispatch1(fcall, $1), $2); + $$ = method_arg(dispatch1(fcall, $1), $3); %*/ } - | primary_value '.' operation2 opt_paren_args + | primary_value '.' operation2 { /*%%%*/ - $$ = NEW_CALL($1, $3, $4); - fixpos($$, $1); + $<num>$ = ruby_sourceline; + /*% %*/ + } + opt_paren_args + { + /*%%%*/ + $$ = NEW_CALL($1, $3, $5); + nd_set_line($$, $<num>4); /*% $$ = dispatch3(call, $1, ripper_id2sym('.'), $3); - $$ = method_optarg($$, $4); + $$ = method_optarg($$, $5); %*/ } - | primary_value tCOLON2 operation2 paren_args + | primary_value tCOLON2 operation2 { /*%%%*/ - $$ = NEW_CALL($1, $3, $4); - fixpos($$, $1); + $<num>$ = ruby_sourceline; + /*% %*/ + } + paren_args + { + /*%%%*/ + $$ = NEW_CALL($1, $3, $5); + nd_set_line($$, $<num>4); /*% $$ = dispatch3(call, $1, ripper_id2sym('.'), $3); - $$ = method_optarg($$, $4); + $$ = method_optarg($$, $5); %*/ } | primary_value tCOLON2 operation3 @@ -3682,26 +3700,38 @@ $$ = dispatch3(call, $1, ripper_intern("::"), $3); %*/ } - | primary_value '.' paren_args + | primary_value '.' { /*%%%*/ - $$ = NEW_CALL($1, rb_intern("call"), $3); - fixpos($$, $1); + $<num>$ = ruby_sourceline; + /*% %*/ + } + paren_args + { + /*%%%*/ + $$ = NEW_CALL($1, rb_intern("call"), $4); + nd_set_line($$, $<num>3); /*% $$ = dispatch3(call, $1, ripper_id2sym('.'), ripper_intern("call")); - $$ = method_optarg($$, $3); + $$ = method_optarg($$, $4); %*/ } - | primary_value tCOLON2 paren_args + | primary_value tCOLON2 { /*%%%*/ - $$ = NEW_CALL($1, rb_intern("call"), $3); - fixpos($$, $1); + $<num>$ = ruby_sourceline; + /*% %*/ + } + paren_args + { + /*%%%*/ + $$ = NEW_CALL($1, rb_intern("call"), $4); + nd_set_line($$, $<num>3); /*% $$ = dispatch3(call, $1, ripper_intern("::"), ripper_intern("call")); - $$ = method_optarg($$, $3); + $$ = method_optarg($$, $4); %*/ } | keyword_super paren_args Index: test/ruby/test_settracefunc.rb =================================================================== --- test/ruby/test_settracefunc.rb (revision 34030) +++ test/ruby/test_settracefunc.rb (revision 34031) @@ -23,7 +23,7 @@ 4: x = 1 + 1 5: set_trace_func(nil) EOF - assert_equal(["c-return", 3, :set_trace_func, Kernel], + assert_equal(["c-return", 1, :set_trace_func, Kernel], events.shift) assert_equal(["line", 4, __method__, self.class], events.shift) @@ -50,7 +50,7 @@ 7: x = add(1, 1) 8: set_trace_func(nil) EOF - assert_equal(["c-return", 3, :set_trace_func, Kernel], + assert_equal(["c-return", 1, :set_trace_func, Kernel], events.shift) assert_equal(["line", 4, __method__, self.class], events.shift) @@ -90,7 +90,7 @@ 8: x = Foo.new.bar 9: set_trace_func(nil) EOF - assert_equal(["c-return", 3, :set_trace_func, Kernel], + assert_equal(["c-return", 1, :set_trace_func, Kernel], events.shift) assert_equal(["line", 4, __method__, self.class], events.shift) @@ -143,7 +143,7 @@ 9: foo(false) 10: set_trace_func(nil) EOF - assert_equal(["c-return", 3, :set_trace_func, Kernel], + assert_equal(["c-return", 1, :set_trace_func, Kernel], events.shift) assert_equal(["line", 4, __method__, self.class], events.shift) @@ -187,7 +187,7 @@ 8: foo 9: set_trace_func(nil) EOF - assert_equal(["c-return", 3, :set_trace_func, Kernel], + assert_equal(["c-return", 1, :set_trace_func, Kernel], events.shift) assert_equal(["line", 4, __method__, self.class], events.shift) @@ -224,7 +224,7 @@ 7: end 8: set_trace_func(nil) EOF - assert_equal(["c-return", 3, :set_trace_func, Kernel], + assert_equal(["c-return", 1, :set_trace_func, Kernel], events.shift) assert_equal(["line", 4, __method__, self.class], events.shift) @@ -273,7 +273,7 @@ 8: set_trace_func(nil) EOF - [["c-return", 3, :set_trace_func, Kernel], + [["c-return", 1, :set_trace_func, Kernel], ["line", 4, __method__, self.class], ["c-call", 4, :any?, Enumerable], ["c-call", 4, :each, Array], @@ -367,7 +367,7 @@ 7: set_trace_func(nil) EOF - [["c-return", 5, :set_trace_func, Kernel], + [["c-return", 3, :set_trace_func, Kernel], ["line", 6, __method__, self.class], ["call", 6, :foobar, FooBar], ["return", 6, :foobar, FooBar], Index: test/ruby/test_parse.rb =================================================================== --- test/ruby/test_parse.rb (revision 34030) +++ test/ruby/test_parse.rb (revision 34031) @@ -825,4 +825,18 @@ c.instance_eval { remove_class_variable(:@var) } end end + + def test_method_block_location + bug5614 = '[ruby-core:40936]' + expected = nil + e = assert_raise(NoMethodError) do + 1.times do + expected = __LINE__+1 + end.print do + # + end + end + actual = e.backtrace.first[/\A#{Regexp.quote(__FILE__)}:(\d+):/o, 1].to_i + assert_equal(expected, actual, bug5614) + end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/