Count metadata entries automatically from the names list

This commit is contained in:
Nobuyoshi Nakada 2025-04-25 19:40:04 +09:00
parent 62a7f17157
commit c772d2691d
No known key found for this signature in database
GPG Key ID: 3582D74E1FEE4465
Notes: git 2025-04-25 12:55:45 +00:00

View File

@ -6191,7 +6191,13 @@ rb_gc_impl_writebarrier_remember(void *objspace_ptr, VALUE obj)
}
}
#define RB_GC_OBJECT_METADATA_ENTRY_COUNT 9
struct rb_gc_object_metadata_names {
// Must be ID only
ID ID_wb_protected, ID_age, ID_old, ID_uncollectible, ID_marking,
ID_marked, ID_pinned, ID_object_id, ID_shareable;
};
#define RB_GC_OBJECT_METADATA_ENTRY_COUNT (sizeof(struct rb_gc_object_metadata_names) / sizeof(ID))
static struct rb_gc_object_metadata_entry object_metadata_entries[RB_GC_OBJECT_METADATA_ENTRY_COUNT + 1];
struct rb_gc_object_metadata_entry *
@ -6199,10 +6205,10 @@ rb_gc_impl_object_metadata(void *objspace_ptr, VALUE obj)
{
rb_objspace_t *objspace = objspace_ptr;
size_t n = 0;
static ID ID_wb_protected, ID_age, ID_old, ID_uncollectible, ID_marking, ID_marked, ID_pinned, ID_object_id, ID_shareable;
static struct rb_gc_object_metadata_names names;
if (!ID_marked) {
#define I(s) ID_##s = rb_intern(#s);
if (!names.ID_marked) {
#define I(s) names.ID_##s = rb_intern(#s)
I(wb_protected);
I(age);
I(old);
@ -6217,7 +6223,7 @@ rb_gc_impl_object_metadata(void *objspace_ptr, VALUE obj)
#define SET_ENTRY(na, v) do { \
GC_ASSERT(n <= RB_GC_OBJECT_METADATA_ENTRY_COUNT); \
object_metadata_entries[n].name = ID_##na; \
object_metadata_entries[n].name = names.ID_##na; \
object_metadata_entries[n].val = v; \
n++; \
} while (0)