summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-method
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems/mruby-method')
-rw-r--r--mrbgems/mruby-method/mrblib/kernel.rb5
-rw-r--r--mrbgems/mruby-method/test/method.rb12
2 files changed, 10 insertions, 7 deletions
diff --git a/mrbgems/mruby-method/mrblib/kernel.rb b/mrbgems/mruby-method/mrblib/kernel.rb
index b2ebd45ea..2efc93f37 100644
--- a/mrbgems/mruby-method/mrblib/kernel.rb
+++ b/mrbgems/mruby-method/mrblib/kernel.rb
@@ -1,8 +1,9 @@
module Kernel
def singleton_method(name)
m = method(name)
- if m.owner != singleton_class
- raise NameError, "undefined method `#{name}' for class `#{singleton_class}'"
+ sc = (class <<self; self; end)
+ if m.owner != sc
+ raise NameError, "undefined method `#{name}' for class `#{sc}'"
end
m
end
diff --git a/mrbgems/mruby-method/test/method.rb b/mrbgems/mruby-method/test/method.rb
index b229a4560..eb5f48341 100644
--- a/mrbgems/mruby-method/test/method.rb
+++ b/mrbgems/mruby-method/test/method.rb
@@ -149,7 +149,7 @@ assert 'Method#source_location' do
assert_equal [filename, lineno], klass.new.method(:find_me_if_you_can).source_location
lineno = __LINE__ + 1
- klass.define_singleton_method(:s_find_me_if_you_can) {}
+ class <<klass; define_method(:s_find_me_if_you_can) {}; end
assert_equal [filename, lineno], klass.method(:s_find_me_if_you_can).source_location
klass = Class.new { def respond_to_missing?(m, b); m == :nothing; end }
@@ -243,7 +243,7 @@ assert 'owner' do
assert_equal(c, c.new.method(:foo).owner)
assert_equal(c, c2.new.method(:foo).owner)
- assert_equal(c.singleton_class, c2.method(:bar).owner)
+ assert_equal((class <<c; self; end), c2.method(:bar).owner)
end
assert 'owner missing' do
@@ -413,12 +413,14 @@ assert 'UnboundMethod#bind' do
assert_equal(:meth, m.bind(1).call)
assert_equal(:meth, m.bind(:sym).call)
assert_equal(:meth, m.bind(Object.new).call)
- sc = Class.new {
- class << self
+ sc = nil
+ Class.new {
+ sc = class << self
def foo
end
+ self
end
- }.singleton_class
+ }
assert_raise(TypeError) { sc.instance_method(:foo).bind([]) }
assert_raise(TypeError) { Array.instance_method(:each).bind(1) }
assert_kind_of Method, Object.instance_method(:object_id).bind(Object.new)