From 8c8e17d49917b0f8cb8e1437b78dc1d0a2e6e945 Mon Sep 17 00:00:00 2001 From: shugo Date: Fri, 23 Oct 2015 15:41:04 +0000 Subject: * 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] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ lib/forwardable.rb | 4 ++-- test/test_forwardable.rb | 16 ++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 142703a14d..61a5092265 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sat Oct 24 00:38:34 2015 Shugo Maeda + + * 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 * 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) -- cgit v1.2.3