62#ifndef USE_RGENGC_LOGGING_WB_UNPROTECT
63# define USE_RGENGC_LOGGING_WB_UNPROTECT 0
73#ifndef RGENGC_WB_PROTECTED_ARRAY
74# define RGENGC_WB_PROTECTED_ARRAY 1
84#ifndef RGENGC_WB_PROTECTED_HASH
85# define RGENGC_WB_PROTECTED_HASH 1
95#ifndef RGENGC_WB_PROTECTED_STRUCT
96# define RGENGC_WB_PROTECTED_STRUCT 1
106#ifndef RGENGC_WB_PROTECTED_STRING
107# define RGENGC_WB_PROTECTED_STRING 1
117#ifndef RGENGC_WB_PROTECTED_OBJECT
118# define RGENGC_WB_PROTECTED_OBJECT 1
128#ifndef RGENGC_WB_PROTECTED_REGEXP
129# define RGENGC_WB_PROTECTED_REGEXP 1
139#ifndef RGENGC_WB_PROTECTED_CLASS
140# define RGENGC_WB_PROTECTED_CLASS 1
150#ifndef RGENGC_WB_PROTECTED_FLOAT
151# define RGENGC_WB_PROTECTED_FLOAT 1
161#ifndef RGENGC_WB_PROTECTED_COMPLEX
162# define RGENGC_WB_PROTECTED_COMPLEX 1
172#ifndef RGENGC_WB_PROTECTED_RATIONAL
173# define RGENGC_WB_PROTECTED_RATIONAL 1
183#ifndef RGENGC_WB_PROTECTED_BIGNUM
184# define RGENGC_WB_PROTECTED_BIGNUM 1
198#ifndef RGENGC_WB_PROTECTED_NODE_CREF
199# define RGENGC_WB_PROTECTED_NODE_CREF 1
220#define RB_OBJ_WRITE(old, slot, young) \
221 RBIMPL_CAST(rb_obj_write((VALUE)(old), (VALUE *)(slot), (VALUE)(young), __FILE__, __LINE__))
232#define RB_OBJ_WRITTEN(old, oldv, young) \
233 RBIMPL_CAST(rb_obj_written((VALUE)(old), (VALUE)(oldv), (VALUE)(young), __FILE__, __LINE__))
236#define OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
237#define OBJ_PROMOTED RB_OBJ_PROMOTED
238#define OBJ_WB_UNPROTECT RB_OBJ_WB_UNPROTECT
247#define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
260#define RB_OBJ_WB_UNPROTECT_FOR(type, obj) \
261 (RGENGC_WB_PROTECTED_##type ? OBJ_WB_UNPROTECT(obj) : obj)
269#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging
272#define RB_OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
273#define RB_OBJ_PROMOTED RB_OBJ_PROMOTED
294#if USE_RGENGC_LOGGING_WB_UNPROTECT
307void rb_gc_unprotect_logging(
void *objptr,
const char *filename,
int line);
366 const char *filename,
370#if USE_RGENGC_LOGGING_WB_UNPROTECT
397 const char *filename,
401#if USE_RGENGC_LOGGING_WB_UNPROTECT
402 RGENGC_LOGGING_OBJ_WRITTEN(a, oldv, b, filename, line);
427 VALUE a, VALUE *slot, VALUE b,
429 const char *filename,
433#ifdef RGENGC_LOGGING_WRITE
434 RGENGC_LOGGING_WRITE(a, slot, b, filename, line);
439 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().
#define RGENGC_LOGGING_WB_UNPROTECT
This is an implementation detail 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.