summaryrefslogtreecommitdiff
path: root/gc/default/default.c
diff options
context:
space:
mode:
Diffstat (limited to 'gc/default/default.c')
-rw-r--r--gc/default/default.c16
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)