diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-05-31 19:17:18 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-05-31 19:17:18 +0000 |
commit | 258131446c394684678736507723ab404c892301 (patch) | |
tree | d5fec98a61ee1ad347f10c824c95490a5e98b6f7 | |
parent | 3d410dde5c35e60fcfdcb3640ab3edcb40550055 (diff) | |
download | ruby-258131446c394684678736507723ab404c892301.tar.gz |
* 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
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | class.c | 7 | ||||
-rw-r--r-- | hash.c | 3 | ||||
-rw-r--r-- | internal.h | 2 |
4 files changed, 19 insertions, 2 deletions
@@ -1,3 +1,12 @@ +Mon Jun 1 04:15:42 2015 Koichi Sasada <ko1@atdot.net> + + * 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 <ko1@atdot.net> * gc.c , gc.h (rb_obj_info): export obj_info(VALUE) for debugging. @@ -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; +} + /*! * \} */ @@ -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 95ce1f0daa..01485dee6c 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); |