summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/class.c10
-rw-r--r--test/t/kernel.rb7
2 files changed, 14 insertions, 3 deletions
diff --git a/src/class.c b/src/class.c
index 027eceb10..7f53b7a2b 100644
--- a/src/class.c
+++ b/src/class.c
@@ -1052,8 +1052,14 @@ mrb_obj_respond_to(struct RClass* c, mrb_sym mid)
if (h) {
k = kh_get(mt, h, mid);
- if (k != kh_end(h))
- return 1; /* exist method */
+ if (k != kh_end(h)) {
+ if (kh_value(h, k)) {
+ return 1; /* exist method */
+ }
+ else {
+ return 0;
+ }
+ }
}
c = c->super;
}
diff --git a/test/t/kernel.rb b/test/t/kernel.rb
index 4f1d2b42f..6e68b1b22 100644
--- a/test/t/kernel.rb
+++ b/test/t/kernel.rb
@@ -300,7 +300,12 @@ assert('Kernel#raise', '15.3.1.3.40') do
end
assert('Kernel#respond_to?', '15.3.1.3.43') do
- respond_to? :nil?
+ class Test4RespondTo
+ def test_method; end
+ undef test_method
+ end
+
+ respond_to?(:nil?) and Test4RespondTo.new.respond_to?(:test_method) == false
end
assert('Kernel#send', '15.3.1.3.44') do