1 #ifndef RBIMPL_RGENGC_H
2 #define RBIMPL_RGENGC_H
65 #ifndef RGENGC_WB_PROTECTED_ARRAY
66 # define RGENGC_WB_PROTECTED_ARRAY 1
76 #ifndef RGENGC_WB_PROTECTED_HASH
77 # define RGENGC_WB_PROTECTED_HASH 1
87 #ifndef RGENGC_WB_PROTECTED_STRUCT
88 # define RGENGC_WB_PROTECTED_STRUCT 1
98 #ifndef RGENGC_WB_PROTECTED_STRING
99 # define RGENGC_WB_PROTECTED_STRING 1
109 #ifndef RGENGC_WB_PROTECTED_OBJECT
110 # define RGENGC_WB_PROTECTED_OBJECT 1
120 #ifndef RGENGC_WB_PROTECTED_REGEXP
121 # define RGENGC_WB_PROTECTED_REGEXP 1
131 #ifndef RGENGC_WB_PROTECTED_MATCH
132 # define RGENGC_WB_PROTECTED_MATCH 1
142 #ifndef RGENGC_WB_PROTECTED_CLASS
143 # define RGENGC_WB_PROTECTED_CLASS 1
153 #ifndef RGENGC_WB_PROTECTED_FLOAT
154 # define RGENGC_WB_PROTECTED_FLOAT 1
164 #ifndef RGENGC_WB_PROTECTED_COMPLEX
165 # define RGENGC_WB_PROTECTED_COMPLEX 1
175 #ifndef RGENGC_WB_PROTECTED_RATIONAL
176 # define RGENGC_WB_PROTECTED_RATIONAL 1
186 #ifndef RGENGC_WB_PROTECTED_BIGNUM
187 # define RGENGC_WB_PROTECTED_BIGNUM 1
201 #ifndef RGENGC_WB_PROTECTED_NODE_CREF
202 # define RGENGC_WB_PROTECTED_NODE_CREF 1
223 #define RB_OBJ_WRITE(old, slot, young) \
224 RBIMPL_CAST(rb_obj_write((VALUE)(old), (VALUE *)(slot), (VALUE)(young), __FILE__, __LINE__))
235 #define RB_OBJ_WRITTEN(old, oldv, young) \
236 RBIMPL_CAST(rb_obj_written((VALUE)(old), (VALUE)(oldv), (VALUE)(young), __FILE__, __LINE__))
239 #define OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
240 #define OBJ_PROMOTED RB_OBJ_PROMOTED
241 #define OBJ_WB_UNPROTECT RB_OBJ_WB_UNPROTECT
250 #define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
263 #define RB_OBJ_WB_UNPROTECT_FOR(type, obj) \
264 (RGENGC_WB_PROTECTED_##type ? OBJ_WB_UNPROTECT(obj) : obj)
272 #define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging
275 #define RB_OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
276 #define RB_OBJ_PROMOTED RB_OBJ_PROMOTED
353 const char *filename,
361 #define RGENGC_LOGGING_OBJ_WRITTEN rb_gc_obj_written_logging
383 const char *filename,
411 const char *filename,
415 #ifdef RGENGC_LOGGING_WRITE
416 RGENGC_LOGGING_WRITE(a, slot, b, filename, line);
421 rb_obj_written(a,
RUBY_Qundef , b, filename, line);
Defines RBIMPL_ATTR_ARTIFICIAL.
#define RBIMPL_ATTR_ARTIFICIAL()
Wraps (or simulates) __attribute__((artificial))
#define RBIMPL_ASSERT_OR_ASSUME(expr)
This is either RUBY_ASSERT or RBIMPL_ASSUME, depending on RUBY_DEBUG.
Tweaking visibility of C variables/functions.
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
static bool RB_FL_ABLE(VALUE obj)
Checks if the object is flaggable.
static bool RB_FL_ANY_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_ANY().
@ RUBY_FL_PROMOTED
This flag has something to do with our garbage collector.
Defines RBIMPL_ATTR_MAYBE_UNUSED.
#define RBIMPL_ATTR_MAYBE_UNUSED()
Wraps (or simulates) [[maybe_unused]]
Defines RBIMPL_ATTR_PURE.
#define RBIMPL_ATTR_PURE_UNLESS_DEBUG()
Enables RBIMPL_ATTR_PURE if and only if.
static VALUE rb_obj_wb_unprotect(VALUE x, const char *filename, int line)
This is the implementation of RB_OBJ_WB_UNPROTECT().
void rb_gc_writebarrier(VALUE old, VALUE young)
This is the implementation of RB_OBJ_WRITE().
void rb_gc_writebarrier_unprotect(VALUE obj)
This is the implementation of RB_OBJ_WB_UNPROTECT().
static bool RB_OBJ_PROMOTED(VALUE obj)
Tests if the object is "promoted" – that is, whether the object experienced one or more GC marks.
static bool RB_OBJ_PROMOTED_RAW(VALUE obj)
This is the implementation of RB_OBJ_PROMOTED().
Defines enum ruby_special_consts.
static bool RB_SPECIAL_CONST_P(VALUE obj)
Checks if the given object is of enum ruby_special_consts.
@ RUBY_Qundef
Represents so-called undef.
uintptr_t VALUE
Type that represents a Ruby object.