1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* 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
This commit is contained in:
ko1 2015-05-31 19:17:18 +00:00
parent 3d410dde5c
commit 258131446c
4 changed files with 19 additions and 2 deletions

View file

@ -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> 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. * gc.c , gc.h (rb_obj_info): export obj_info(VALUE) for debugging.

View file

@ -1985,6 +1985,13 @@ rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, V
#undef extract_kwarg #undef extract_kwarg
} }
int
rb_class_has_methods(VALUE c)
{
st_table *mtbl = RCLASS_M_TBL(c);
return mtbl && mtbl->num_entries ? TRUE : FALSE;
}
/*! /*!
* \} * \}
*/ */

3
hash.c
View file

@ -37,8 +37,7 @@ has_extra_methods(VALUE klass)
const VALUE base = rb_cHash; const VALUE base = rb_cHash;
VALUE c = klass; VALUE c = klass;
while (c != base) { while (c != base) {
st_table *mtbl = RCLASS_M_TBL(c); if (rb_class_has_methods(c)) return klass;
if (mtbl && mtbl->num_entries) return klass;
c = RCLASS_SUPER(c); c = RCLASS_SUPER(c);
} }
return 0; return 0;

View file

@ -667,6 +667,8 @@ VALUE rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach);
VALUE rb_singleton_class_get(VALUE obj); VALUE rb_singleton_class_get(VALUE obj);
void Init_class_hierarchy(void); void Init_class_hierarchy(void);
int rb_class_has_methods(VALUE c);
/* compar.c */ /* compar.c */
VALUE rb_invcmp(VALUE, VALUE); VALUE rb_invcmp(VALUE, VALUE);