summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--lib/forwardable.rb4
-rw-r--r--test/test_forwardable.rb13
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 <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)