Skip to content

Commit 31cf268

Browse files
committed
Output object_id in object metadata for MMTk
1 parent bdb2595 commit 31cf268

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

gc/mmtk/mmtk.c

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,14 +1318,33 @@ rb_gc_impl_stat_heap(void *objspace_ptr, VALUE heap_name, VALUE hash_or_sym)
13181318

13191319
// Miscellaneous
13201320

1321-
#define RB_GC_OBJECT_METADATA_ENTRY_COUNT 0
1321+
#define RB_GC_OBJECT_METADATA_ENTRY_COUNT 1
13221322
static struct rb_gc_object_metadata_entry object_metadata_entries[RB_GC_OBJECT_METADATA_ENTRY_COUNT + 1];
13231323

13241324
struct rb_gc_object_metadata_entry *
13251325
rb_gc_impl_object_metadata(void *objspace_ptr, VALUE obj)
13261326
{
1327-
object_metadata_entries[0].name = 0;
1328-
object_metadata_entries[0].val = 0;
1327+
static ID ID_object_id;
1328+
1329+
if (!ID_object_id) {
1330+
#define I(s) ID_##s = rb_intern(#s);
1331+
I(object_id);
1332+
#undef I
1333+
}
1334+
1335+
size_t n = 0;
1336+
1337+
#define SET_ENTRY(na, v) do { \
1338+
RUBY_ASSERT(n <= RB_GC_OBJECT_METADATA_ENTRY_COUNT); \
1339+
object_metadata_entries[n].name = ID_##na; \
1340+
object_metadata_entries[n].val = v; \
1341+
n++; \
1342+
} while (0)
1343+
1344+
if (FL_TEST(obj, FL_SEEN_OBJ_ID)) SET_ENTRY(object_id, rb_obj_id(obj));
1345+
1346+
object_metadata_entries[n].name = 0;
1347+
object_metadata_entries[n].val = 0;
13291348

13301349
return object_metadata_entries;
13311350
}

0 commit comments

Comments
 (0)