diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | parse.y | 8 | ||||
-rw-r--r-- | test/ruby/test_proc.rb | 7 |
3 files changed, 15 insertions, 5 deletions
@@ -1,3 +1,8 @@ +Fri Dec 4 16:50:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * parse.y (k_def): adjust the location of method definition to the + line of def. [Bug #2427] + Fri Dec 4 15:50:18 2009 Shugo Maeda <shugo@ruby-lang.org> * vm_eval.c (yield_under): does not yield self, and passes blockptr @@ -2902,7 +2902,7 @@ primary : literal NODE *body = remove_begin($5); reduce_nodes(&body); $$ = NEW_DEFN($2, $4, body, NOEX_PRIVATE); - fixpos($$, $4); + nd_set_line($$, $<num>1); /*% $$ = dispatch3(def, $2, $4, $5); %*/ @@ -2924,7 +2924,7 @@ primary : literal NODE *body = remove_begin($8); reduce_nodes(&body); $$ = NEW_DEFS($2, $5, $7, body); - fixpos($$, $2); + nd_set_line($$, $<num>1); /*% $$ = dispatch5(defs, $2, $3, $5, $7, $8); %*/ @@ -3034,6 +3034,10 @@ k_module : keyword_module k_def : keyword_def { token_info_push("def"); + /*%%%*/ + $<num>$ = ruby_sourceline; + /*% + %*/ } ; diff --git a/test/ruby/test_proc.rb b/test/ruby/test_proc.rb index 6c2bae4c41..de95ed5676 100644 --- a/test/ruby/test_proc.rb +++ b/test/ruby/test_proc.rb @@ -746,14 +746,15 @@ class TestProc < Test::Unit::TestCase assert(x.to_s.tainted?) end - def source_location_test - __LINE__ + @@line_of_source_location_test = __LINE__ + 1 + def source_location_test a=1, + b=2 end def test_source_location file, lineno = method(:source_location_test).source_location assert_match(/^#{ Regexp.quote(__FILE__) }$/, file) - assert_equal(source_location_test - 1, lineno) + assert_equal(@@line_of_source_location_test, lineno, 'Bug #2427') end def test_splat_without_respond_to |