diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | lib/forwardable.rb | 4 | ||||
-rw-r--r-- | test/test_forwardable.rb | 13 |
3 files changed, 22 insertions, 2 deletions
@@ -1,3 +1,10 @@ +Sat Oct 24 07:29:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * lib/forwardable.rb (def_instance_delegator, def_single_delegator): + match backtraces against ::Forwardable in case the target class + is a subclass of BasicObject and does not include Kernel. + [ruby-core:71176] [Bug #11616] + Sat Oct 24 04:10:13 2015 Koichi Sasada <ko1@atdot.net> * iseq.c (make_compile_option_value): include frozen_string_literal* diff --git a/lib/forwardable.rb b/lib/forwardable.rb index d814a756fa..c24c8d8630 100644 --- a/lib/forwardable.rb +++ b/lib/forwardable.rb @@ -182,7 +182,7 @@ module Forwardable begin #{accessor}.__send__(:#{method}, *args, &block) rescue ::Exception - $@.delete_if{|s| Forwardable::FILE_REGEXP =~ s} unless Forwardable::debug + $@.delete_if{|s| ::Forwardable::FILE_REGEXP =~ s} unless ::Forwardable::debug ::Kernel::raise end end @@ -274,7 +274,7 @@ module SingleForwardable begin #{accessor}.__send__(:#{method}, *args, &block) rescue ::Exception - $@.delete_if{|s| Forwardable::FILE_REGEXP =~ s} unless Forwardable::debug + $@.delete_if{|s| ::Forwardable::FILE_REGEXP =~ s} unless ::Forwardable::debug ::Kernel::raise end end diff --git a/test/test_forwardable.rb b/test/test_forwardable.rb index 9b26019893..6dd015e5a4 100644 --- a/test/test_forwardable.rb +++ b/test/test_forwardable.rb @@ -110,6 +110,19 @@ class TestForwardable < Test::Unit::TestCase assert_not_match(/\/forwardable\.rb/, e.backtrace[0]) end + class Foo2 < BasicObject + extend ::Forwardable + + def_delegator :bar, :baz + end + + def test_basicobject_subclass + bug11616 = '[ruby-core:71176] [Bug #11616]' + assert_raise_with_message(NameError, /`bar'/, bug11616) { + Foo2.new.baz + } + end + private def forwardable_class(&block) |