summaryrefslogtreecommitdiffhomepage
path: root/src/class.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-08-22 14:23:46 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-08-22 14:23:46 +0900
commitdb437b04a4e91e3f79e41eb71406c5167caaa876 (patch)
tree57fe1288d1212b2fbec6c1266a8c24f220b23815 /src/class.c
parent0d865a77d5b655f39330e690dcae7fb98119fdca (diff)
downloadmruby-db437b04a4e91e3f79e41eb71406c5167caaa876.tar.gz
mruby-db437b04a4e91e3f79e41eb71406c5167caaa876.zip
`mrb_obj_respond_to` to use `mrb_method_search_vm`.
Diffstat (limited to 'src/class.c')
-rw-r--r--src/class.c22
1 files changed, 5 insertions, 17 deletions
diff --git a/src/class.c b/src/class.c
index 9bba28684..57d5af1df 100644
--- a/src/class.c
+++ b/src/class.c
@@ -1563,25 +1563,13 @@ mrb_obj_not_equal_m(mrb_state *mrb, mrb_value self)
MRB_API mrb_bool
mrb_obj_respond_to(mrb_state *mrb, struct RClass* c, mrb_sym mid)
{
- khiter_t k;
-
- while (c) {
- khash_t(mt) *h = c->mt;
+ struct RProc *m;
- if (h) {
- k = kh_get(mt, mrb, h, mid);
- if (k != kh_end(h)) {
- if (kh_value(h, k)) {
- return TRUE; /* method exists */
- }
- else {
- return FALSE; /* undefined method */
- }
- }
- }
- c = c->super;
+ m = mrb_method_search_vm(mrb, &c, mid);
+ if (!m) {
+ return FALSE;
}
- return FALSE; /* no method */
+ return TRUE;
}
MRB_API mrb_bool