summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2012-07-17 16:24:16 -0700
committerYukihiro "Matz" Matsumoto <[email protected]>2012-07-17 16:24:16 -0700
commit4df4a3f0bf6e047daa83779730eb208e1a4f78c9 (patch)
tree33d8086317aae816d207076e007ffdaf72a2b741
parent1f7003c467232670e785a45adb5ac11db60049df (diff)
parent6f2aefae1f6032be5c7a7ba82734543b90be5ccc (diff)
downloadmruby-4df4a3f0bf6e047daa83779730eb208e1a4f78c9.tar.gz
mruby-4df4a3f0bf6e047daa83779730eb208e1a4f78c9.zip
Merge pull request #380 from masamitsu-murase/modify_respond_to
Modify return value of 'respond_to?'
-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