diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-08-22 14:23:46 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-08-22 14:23:46 +0900 |
| commit | db437b04a4e91e3f79e41eb71406c5167caaa876 (patch) | |
| tree | 57fe1288d1212b2fbec6c1266a8c24f220b23815 /src/class.c | |
| parent | 0d865a77d5b655f39330e690dcae7fb98119fdca (diff) | |
| download | mruby-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.c | 22 |
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 |
