From ad3d4e87d7e20c7e7ff2836567a44bb29368f3ec Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Fri, 14 Apr 2023 16:25:06 -0400 Subject: [PATCH] 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. --- class.c | 4 ++-- internal/class.h | 4 ++-- vm_insnhelper.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/class.c b/class.c index 7e0099944a..7ac7813f17 100644 --- a/class.c +++ b/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)); diff --git a/internal/class.h b/internal/class.h index 9f933c1fee..0ac8e7c875 100644 --- a/internal/class.h +++ b/internal/class.h @@ -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 diff --git a/vm_insnhelper.c b/vm_insnhelper.c index e985e52077..f4894225d7 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -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);