43#ifndef USE_RGENGC_LOGGING_WB_UNPROTECT
44# define USE_RGENGC_LOGGING_WB_UNPROTECT 0
47#ifndef RGENGC_WB_PROTECTED_ARRAY
48# define RGENGC_WB_PROTECTED_ARRAY 1
51#ifndef RGENGC_WB_PROTECTED_HASH
52# define RGENGC_WB_PROTECTED_HASH 1
55#ifndef RGENGC_WB_PROTECTED_STRUCT
56# define RGENGC_WB_PROTECTED_STRUCT 1
59#ifndef RGENGC_WB_PROTECTED_STRING
60# define RGENGC_WB_PROTECTED_STRING 1
63#ifndef RGENGC_WB_PROTECTED_OBJECT
64# define RGENGC_WB_PROTECTED_OBJECT 1
67#ifndef RGENGC_WB_PROTECTED_REGEXP
68# define RGENGC_WB_PROTECTED_REGEXP 1
71#ifndef RGENGC_WB_PROTECTED_CLASS
72# define RGENGC_WB_PROTECTED_CLASS 1
75#ifndef RGENGC_WB_PROTECTED_FLOAT
76# define RGENGC_WB_PROTECTED_FLOAT 1
79#ifndef RGENGC_WB_PROTECTED_COMPLEX
80# define RGENGC_WB_PROTECTED_COMPLEX 1
83#ifndef RGENGC_WB_PROTECTED_RATIONAL
84# define RGENGC_WB_PROTECTED_RATIONAL 1
87#ifndef RGENGC_WB_PROTECTED_BIGNUM
88# define RGENGC_WB_PROTECTED_BIGNUM 1
91#ifndef RGENGC_WB_PROTECTED_NODE_CREF
92# define RGENGC_WB_PROTECTED_NODE_CREF 1
107#define RB_OBJ_WRITE(a, slot, b) \
108 RBIMPL_CAST(rb_obj_write((VALUE)(a), (VALUE *)(slot), (VALUE)(b), __FILE__, __LINE__))
114#define RB_OBJ_WRITTEN(a, oldv, b) \
115 RBIMPL_CAST(rb_obj_written((VALUE)(a), (VALUE)(oldv), (VALUE)(b), __FILE__, __LINE__))
118#define OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
119#define OBJ_PROMOTED RB_OBJ_PROMOTED
120#define OBJ_WB_UNPROTECT RB_OBJ_WB_UNPROTECT
122#define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
123#define RB_OBJ_WB_UNPROTECT_FOR(type, obj) \
124 (RGENGC_WB_PROTECTED_##type ? OBJ_WB_UNPROTECT(obj) : obj)
125#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging
128#define RB_OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
129#define RB_OBJ_PROMOTED RB_OBJ_PROMOTED
135#if USE_RGENGC_LOGGING_WB_UNPROTECT
143RB_OBJ_PROMOTED_RAW(
VALUE obj)
152RB_OBJ_PROMOTED(
VALUE obj)
154 if (! RB_FL_ABLE(obj)) {
158 return RB_OBJ_PROMOTED_RAW(obj);
165#if USE_RGENGC_LOGGING_WB_UNPROTECT
175#if USE_RGENGC_LOGGING_WB_UNPROTECT
176 RGENGC_LOGGING_OBJ_WRITTEN(a, oldv, b,
filename, line);
179 if (!RB_SPECIAL_CONST_P(b)) {
189#ifdef RGENGC_LOGGING_WRITE
190 RGENGC_LOGGING_WRITE(a, slot, 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.
Various attribute-related macros.
Tewaking 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" {.
void rb_gc_unprotect_logging(void *objptr, const char *filename, int line)
Defines RBIMPL_ATTR_PURE.
#define RBIMPL_ATTR_PURE_UNLESS_DEBUG()
Enables RBIMPL_ATTR_PURE iff.
void rb_gc_writebarrier_unprotect(VALUE obj)
void rb_gc_writebarrier(VALUE a, VALUE b)
#define RGENGC_LOGGING_WB_UNPROTECT
Defines enum ruby_special_consts.