зеркало из https://github.com/github/ruby.git
Move RCLASS_CLONED to rb_classext_struct
This commit moves RCLASS_CLONED from the flags to the rb_classext_struct. This frees the FL_USER1 bit.
This commit is contained in:
Родитель
fac814c2dc
Коммит
ad3d4e87d7
4
class.c
4
class.c
|
@ -508,8 +508,8 @@ rb_mod_init_copy(VALUE clone, VALUE orig)
|
|||
/* cloned flag is refer at constant inline cache
|
||||
* see vm_get_const_key_cref() in vm_insnhelper.c
|
||||
*/
|
||||
FL_SET(clone, RCLASS_CLONED);
|
||||
FL_SET(orig , RCLASS_CLONED);
|
||||
RCLASS_EXT(clone)->cloned = true;
|
||||
RCLASS_EXT(orig)->cloned = true;
|
||||
|
||||
if (!FL_TEST(CLASS_OF(clone), FL_SINGLETON)) {
|
||||
RBASIC_SET_CLASS(clone, rb_singleton_class_clone(orig));
|
||||
|
|
|
@ -67,7 +67,8 @@ struct rb_classext_struct {
|
|||
#endif
|
||||
attr_index_t max_iv_count;
|
||||
unsigned char variation_count;
|
||||
bool permanent_classpath;
|
||||
bool permanent_classpath : 1;
|
||||
bool cloned : 1;
|
||||
VALUE classpath;
|
||||
};
|
||||
typedef struct rb_classext_struct rb_classext_t;
|
||||
|
@ -110,7 +111,6 @@ STATIC_ASSERT(sizeof_rb_classext_t, sizeof(struct RClass) + sizeof(rb_classext_t
|
|||
#define RCLASS_ATTACHED_OBJECT(c) (RCLASS_EXT(c)->as.singleton_class.attached_object)
|
||||
|
||||
#define RICLASS_IS_ORIGIN FL_USER0
|
||||
#define RCLASS_CLONED FL_USER1
|
||||
#define RCLASS_SUPERCLASSES_INCLUDE_SELF FL_USER2
|
||||
#define RICLASS_ORIGIN_SHARED_MTBL FL_USER3
|
||||
|
||||
|
|
|
@ -895,7 +895,7 @@ vm_get_const_key_cref(const VALUE *ep)
|
|||
|
||||
while (cref) {
|
||||
if (FL_TEST(CREF_CLASS(cref), FL_SINGLETON) ||
|
||||
FL_TEST(CREF_CLASS(cref), RCLASS_CLONED)) {
|
||||
RCLASS_EXT(CREF_CLASS(cref))->cloned) {
|
||||
return key_cref;
|
||||
}
|
||||
cref = CREF_NEXT(cref);
|
||||
|
|
Загрузка…
Ссылка в новой задаче