diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | lib/forwardable.rb | 4 | ||||
-rw-r--r-- | test/test_forwardable.rb | 16 |
3 files changed, 25 insertions, 2 deletions
@@ -1,3 +1,10 @@ +Sat Oct 24 00:38:34 2015 Shugo Maeda <shugo@ruby-lang.org> + + * lib/forwardable (def_instance_delegator, def_single_delegator): + rescue ::Exception instead of Exception in case Exception is + defined under the target class. + [ruby-core:71175] [Ruby trunk - Bug #11615] + Fri Oct 23 21:10:37 2015 Nobuyoshi Nakada <nobu@ruby-lang.org> * error.c (name_err_mesg_to_str): separate class names from the diff --git a/lib/forwardable.rb b/lib/forwardable.rb index ecc5f03843..d814a756fa 100644 --- a/lib/forwardable.rb +++ b/lib/forwardable.rb @@ -181,7 +181,7 @@ module Forwardable def #{ali}(*args, &block) begin #{accessor}.__send__(:#{method}, *args, &block) - rescue Exception + rescue ::Exception $@.delete_if{|s| Forwardable::FILE_REGEXP =~ s} unless Forwardable::debug ::Kernel::raise end @@ -273,7 +273,7 @@ module SingleForwardable def #{ali}(*args, &block) begin #{accessor}.__send__(:#{method}, *args, &block) - rescue Exception + rescue ::Exception $@.delete_if{|s| Forwardable::FILE_REGEXP =~ s} unless Forwardable::debug ::Kernel::raise end diff --git a/test/test_forwardable.rb b/test/test_forwardable.rb index c04c78577b..9b26019893 100644 --- a/test/test_forwardable.rb +++ b/test/test_forwardable.rb @@ -94,6 +94,22 @@ class TestForwardable < Test::Unit::TestCase end end + class Foo + extend Forwardable + + def_delegator :bar, :baz + + class Exception + end + end + + def test_backtrace_adjustment + e = assert_raise(NameError) { + Foo.new.baz + } + assert_not_match(/\/forwardable\.rb/, e.backtrace[0]) + end + private def forwardable_class(&block) |