Count metadata entries automatically from the names list
This commit is contained in:
parent
62a7f17157
commit
c772d2691d
Notes:
git
2025-04-25 12:55:45 +00:00
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user