diff options
Diffstat (limited to 'gc/default/default.c')
-rw-r--r-- | gc/default/default.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/gc/default/default.c b/gc/default/default.c index 038a330e9e..b2bbd79784 100644 --- a/gc/default/default.c +++ b/gc/default/default.c @@ -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) |