From 4e1ee809bbf78dc7edb3350628bf80c3e0133fee Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 23 Oct 2015 22:29:14 +0000 Subject: [PATCH] forwardable.rb: full qualify names * 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] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52259 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ lib/forwardable.rb | 4 ++-- test/test_forwardable.rb | 13 +++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index b160bf6628..b32e00ea2a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sat Oct 24 07:29:12 2015 Nobuyoshi Nakada + + * 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 * 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)