From 258131446c394684678736507723ab404c892301 Mon Sep 17 00:00:00 2001 From: ko1 Date: Sun, 31 May 2015 19:17:18 +0000 Subject: [PATCH] * class.c (rb_class_has_methods): added to reduce depenedency to internal class data structure. * internal.h: ditto. * hash.c (has_extra_methods): use added function. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50700 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 9 +++++++++ class.c | 7 +++++++ hash.c | 3 +-- internal.h | 2 ++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index d91b700f79dab7..0c4f978e2b29bb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Mon Jun 1 04:15:42 2015 Koichi Sasada + + * class.c (rb_class_has_methods): added to reduce depenedency + to internal class data structure. + + * internal.h: ditto. + + * hash.c (has_extra_methods): use added function. + Mon Jun 1 04:11:48 2015 Koichi Sasada * gc.c , gc.h (rb_obj_info): export obj_info(VALUE) for debugging. diff --git a/class.c b/class.c index 37ad4b542b75b7..2409e0d68bc7ce 100644 --- a/class.c +++ b/class.c @@ -1985,6 +1985,13 @@ rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, V #undef extract_kwarg } +int +rb_class_has_methods(VALUE c) +{ + st_table *mtbl = RCLASS_M_TBL(c); + return mtbl && mtbl->num_entries ? TRUE : FALSE; +} + /*! * \} */ diff --git a/hash.c b/hash.c index bd099ce94dcf70..60e980763ce748 100644 --- a/hash.c +++ b/hash.c @@ -37,8 +37,7 @@ has_extra_methods(VALUE klass) const VALUE base = rb_cHash; VALUE c = klass; while (c != base) { - st_table *mtbl = RCLASS_M_TBL(c); - if (mtbl && mtbl->num_entries) return klass; + if (rb_class_has_methods(c)) return klass; c = RCLASS_SUPER(c); } return 0; diff --git a/internal.h b/internal.h index 95ce1f0daae799..01485dee6cdc9e 100644 --- a/internal.h +++ b/internal.h @@ -667,6 +667,8 @@ VALUE rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach); VALUE rb_singleton_class_get(VALUE obj); void Init_class_hierarchy(void); +int rb_class_has_methods(VALUE c); + /* compar.c */ VALUE rb_invcmp(VALUE, VALUE);