summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2025-02-18 12:58:40 -0500
committerPeter Zhu <peter@peterzhu.ca>2025-02-19 09:47:28 -0500
commit7b6e07ea93cfc42bfb8bdf875555d2c8c7d5e507 (patch)
treeb798642d9ecae2c2355a96339f6f2c6f7b329fa4 /internal
parent273e35cdcc04c6c68066a963157896472a2d1eb3 (diff)
Add rb_gc_object_metadata API
This function replaces the internal rb_obj_gc_flags API. rb_gc_object_metadata returns an array of name and value pairs, with the last element having 0 for the name.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/12777
Diffstat (limited to 'internal')
-rw-r--r--internal/gc.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/internal/gc.h b/internal/gc.h
index 1407f4b988..4e9b4554e8 100644
--- a/internal/gc.h
+++ b/internal/gc.h
@@ -127,7 +127,13 @@ struct rb_objspace; /* in vm_core.h */
rb_wb_protected_newobj_of((ec ? ec : GET_EC()), (c), (f) & ~FL_WB_PROTECTED, s) : \
rb_wb_unprotected_newobj_of((c), (f), s))
-#define RB_OBJ_GC_FLAGS_MAX 6 /* used in ext/objspace */
+#ifndef RB_GC_OBJECT_METADATA_ENTRY_DEFINED
+# define RB_GC_OBJECT_METADATA_ENTRY_DEFINED
+struct rb_gc_object_metadata_entry {
+ ID name;
+ VALUE val;
+};
+#endif
#ifndef USE_UNALIGNED_MEMBER_ACCESS
# define UNALIGNED_MEMBER_ACCESS(expr) (expr)
@@ -244,7 +250,7 @@ const char *rb_objspace_data_type_name(VALUE obj);
VALUE rb_wb_protected_newobj_of(struct rb_execution_context_struct *, VALUE, VALUE, size_t);
VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE, size_t);
size_t rb_obj_memsize_of(VALUE);
-size_t rb_obj_gc_flags(VALUE, ID[], size_t);
+struct rb_gc_object_metadata_entry *rb_gc_object_metadata(VALUE obj);
void rb_gc_mark_values(long n, const VALUE *values);
void rb_gc_mark_vm_stack_values(long n, const VALUE *values);
void rb_gc_update_values(long n, VALUE *values);