17struct rb_gc_vm_context {
 
   18    rb_nativethread_lock_t lock;
 
   24typedef int (*vm_table_foreach_callback_func)(
VALUE value, 
void *data);
 
   25typedef int (*vm_table_update_callback_func)(
VALUE *value, 
void *data);
 
   27enum rb_gc_vm_weak_tables {
 
   29    RB_GC_VM_OVERLOADED_CME_TABLE,
 
   30    RB_GC_VM_GLOBAL_SYMBOLS_TABLE,
 
   31    RB_GC_VM_ID2REF_TABLE,
 
   32    RB_GC_VM_GENERIC_FIELDS_TABLE,
 
   33    RB_GC_VM_FROZEN_STRINGS_TABLE,
 
   34    RB_GC_VM_CC_REFINEMENT_TABLE,
 
   35    RB_GC_VM_WEAK_TABLE_COUNT
 
   38#define RB_GC_VM_LOCK() rb_gc_vm_lock(__FILE__, __LINE__) 
   39#define RB_GC_VM_UNLOCK(lev) rb_gc_vm_unlock(lev, __FILE__, __LINE__) 
   40#define RB_GC_CR_LOCK() rb_gc_cr_lock(__FILE__, __LINE__) 
   41#define RB_GC_CR_UNLOCK(lev) rb_gc_cr_unlock(lev, __FILE__, __LINE__) 
   42#define RB_GC_VM_LOCK_NO_BARRIER() rb_gc_vm_lock_no_barrier(__FILE__, __LINE__) 
   43#define RB_GC_VM_UNLOCK_NO_BARRIER(lev) rb_gc_vm_unlock_no_barrier(lev, __FILE__, __LINE__) 
   50# define MODULAR_GC_FN static 
   54RUBY_SYMBOL_EXPORT_BEGIN
 
   59size_t rb_size_mul_or_raise(
size_t x, 
size_t y, 
VALUE exc);
 
   60void rb_objspace_reachable_objects_from(
VALUE obj, 
void (func)(
VALUE, 
void *), 
void *data);
 
   61const char *rb_raw_obj_info(
char *
const buff, 
const size_t buff_size, 
VALUE obj);
 
   62const char *rb_obj_info(
VALUE obj);
 
   63size_t rb_obj_memsize_of(
VALUE obj);
 
   64bool ruby_free_at_exit_p(
void);
 
   65void rb_objspace_reachable_objects_from_root(
void (func)(
const char *category, 
VALUE, 
void *), 
void *passing_data);
 
   67MODULAR_GC_FN 
unsigned int rb_gc_vm_lock(
const char *file, 
int line);
 
   68MODULAR_GC_FN 
void rb_gc_vm_unlock(
unsigned int lev, 
const char *file, 
int line);
 
   69MODULAR_GC_FN 
unsigned int rb_gc_cr_lock(
const char *file, 
int line);
 
   70MODULAR_GC_FN 
void rb_gc_cr_unlock(
unsigned int lev, 
const char *file, 
int line);
 
   71MODULAR_GC_FN 
unsigned int rb_gc_vm_lock_no_barrier(
const char *file, 
int line);
 
   72MODULAR_GC_FN 
void rb_gc_vm_unlock_no_barrier(
unsigned int lev, 
const char *file, 
int line);
 
   73MODULAR_GC_FN 
void rb_gc_vm_barrier(
void);
 
   74MODULAR_GC_FN 
size_t rb_gc_obj_optimal_size(
VALUE obj);
 
   75MODULAR_GC_FN 
void rb_gc_mark_children(
void *
objspace, 
VALUE obj);
 
   76MODULAR_GC_FN 
void rb_gc_vm_weak_table_foreach(vm_table_foreach_callback_func callback, vm_table_update_callback_func update_callback, 
void *data, 
bool weak_only, 
enum rb_gc_vm_weak_tables table);
 
   77MODULAR_GC_FN 
void rb_gc_update_object_references(
void *
objspace, 
VALUE obj);
 
   78MODULAR_GC_FN 
void rb_gc_update_vm_references(
void *
objspace);
 
   80MODULAR_GC_FN 
void *rb_gc_get_objspace(
void);
 
   81MODULAR_GC_FN 
void rb_gc_run_obj_finalizer(
VALUE objid, 
long count, 
VALUE (*callback)(
long i, 
void *data), 
void *data);
 
   82MODULAR_GC_FN 
void rb_gc_set_pending_interrupt(
void);
 
   83MODULAR_GC_FN 
void rb_gc_unset_pending_interrupt(
void);
 
   84MODULAR_GC_FN 
void rb_gc_obj_free_vm_weak_references(
VALUE obj);
 
   86MODULAR_GC_FN 
void rb_gc_save_machine_context(
void);
 
   87MODULAR_GC_FN 
void rb_gc_mark_roots(
void *
objspace, 
const char **categoryp);
 
   88MODULAR_GC_FN 
void rb_gc_ractor_newobj_cache_foreach(
void (*func)(
void *cache, 
void *data), 
void *data);
 
   89MODULAR_GC_FN 
bool rb_gc_multi_ractor_p(
void);
 
   90MODULAR_GC_FN 
bool rb_gc_shutdown_call_finalizer_p(
VALUE obj);
 
   91MODULAR_GC_FN uint32_t rb_gc_get_shape(
VALUE obj);
 
   92MODULAR_GC_FN 
void rb_gc_set_shape(
VALUE obj, uint32_t shape_id);
 
   93MODULAR_GC_FN uint32_t rb_gc_rebuild_shape(
VALUE obj, 
size_t heap_id);
 
   94MODULAR_GC_FN 
void rb_gc_prepare_heap_process_object(
VALUE obj);
 
   95MODULAR_GC_FN 
bool rb_memerror_reentered(
void);
 
   96MODULAR_GC_FN 
bool rb_obj_id_p(
VALUE);
 
   97MODULAR_GC_FN 
void rb_gc_before_updating_jit_code(
void);
 
   98MODULAR_GC_FN 
void rb_gc_after_updating_jit_code(
void);
 
   99MODULAR_GC_FN 
bool rb_gc_obj_shareable_p(
VALUE);
 
  100MODULAR_GC_FN 
void rb_gc_rp(
VALUE);
 
  104MODULAR_GC_FN 
void *rb_gc_get_ractor_newobj_cache(
void);
 
  105MODULAR_GC_FN 
void rb_gc_initialize_vm_context(
struct rb_gc_vm_context *context);
 
  106MODULAR_GC_FN 
void rb_gc_worker_thread_set_vm_context(
struct rb_gc_vm_context *context);
 
  107MODULAR_GC_FN 
void rb_gc_worker_thread_unset_vm_context(
struct rb_gc_vm_context *context);
 
  111RUBY_SYMBOL_EXPORT_END
 
  114void rb_ractor_finish_marking(
void);
 
  119#ifdef BUILDING_MODULAR_GC 
  132#ifndef RGENGC_CHECK_MODE 
  133# define RGENGC_CHECK_MODE  0 
  137# define GC_ASSERT(expr, ...) RUBY_ASSERT_MESG_WHEN(RGENGC_CHECK_MODE > 0, expr, #expr RBIMPL_VA_OPT_ARGS(__VA_ARGS__)) 
  141hash_foreach_replace_value(st_data_t key, st_data_t value, st_data_t argp, 
int error)
 
  143    if (rb_gc_location((
VALUE)value) != (
VALUE)value) {
 
  150hash_replace_ref_value(st_data_t *key, st_data_t *value, st_data_t argp, 
int existing)
 
  152    *value = rb_gc_location((
VALUE)*value);
 
  158gc_ref_update_table_values_only(
st_table *tbl)
 
  160    if (!tbl || tbl->num_entries == 0) 
return;
 
  162    if (st_foreach_with_replace(tbl, hash_foreach_replace_value, hash_replace_ref_value, 0)) {
 
  168gc_mark_tbl_no_pin_i(st_data_t key, st_data_t value, st_data_t data)
 
  170    rb_gc_mark_movable((
VALUE)value);
 
  176hash_foreach_replace(st_data_t key, st_data_t value, st_data_t argp, 
int error)
 
  178    if (rb_gc_location((
VALUE)key) != (
VALUE)key) {
 
  182    if (rb_gc_location((
VALUE)value) != (
VALUE)value) {
 
  190hash_replace_ref(st_data_t *key, st_data_t *value, st_data_t argp, 
int existing)
 
  192    if (rb_gc_location((
VALUE)*key) != (
VALUE)*key) {
 
  193        *key = rb_gc_location((
VALUE)*key);
 
  196    if (rb_gc_location((
VALUE)*value) != (
VALUE)*value) {
 
  197        *value = rb_gc_location((
VALUE)*value);
 
  206    if (!tbl || tbl->num_entries == 0) 
return;
 
  208    if (st_foreach_with_replace(tbl, hash_foreach_replace, hash_replace_ref, 0)) {
 
  214xmalloc2_size(
const size_t count, 
const size_t elsize)
 
  216    return rb_size_mul_or_raise(count, elsize, rb_eArgError);
 
  223#define COUNT_TYPE(t) case (t): return ID2SYM(rb_intern(#t)); break; 
  256#ifdef BUILDING_MODULAR_GC 
uint32_t rb_event_flag_t
Represents event(s).
#define T_COMPLEX
Old name of RUBY_T_COMPLEX.
#define T_FILE
Old name of RUBY_T_FILE.
#define T_STRING
Old name of RUBY_T_STRING.
#define T_NIL
Old name of RUBY_T_NIL.
#define T_FLOAT
Old name of RUBY_T_FLOAT.
#define T_IMEMO
Old name of RUBY_T_IMEMO.
#define T_BIGNUM
Old name of RUBY_T_BIGNUM.
#define T_STRUCT
Old name of RUBY_T_STRUCT.
#define T_FIXNUM
Old name of RUBY_T_FIXNUM.
#define T_DATA
Old name of RUBY_T_DATA.
#define T_NONE
Old name of RUBY_T_NONE.
#define T_NODE
Old name of RUBY_T_NODE.
#define SIZET2NUM
Old name of RB_SIZE2NUM.
#define T_MODULE
Old name of RUBY_T_MODULE.
#define T_TRUE
Old name of RUBY_T_TRUE.
#define T_RATIONAL
Old name of RUBY_T_RATIONAL.
#define T_ICLASS
Old name of RUBY_T_ICLASS.
#define T_HASH
Old name of RUBY_T_HASH.
#define T_FALSE
Old name of RUBY_T_FALSE.
#define T_UNDEF
Old name of RUBY_T_UNDEF.
#define T_ZOMBIE
Old name of RUBY_T_ZOMBIE.
#define T_ARRAY
Old name of RUBY_T_ARRAY.
#define T_OBJECT
Old name of RUBY_T_OBJECT.
#define T_SYMBOL
Old name of RUBY_T_SYMBOL.
#define T_MATCH
Old name of RUBY_T_MATCH.
#define T_CLASS
Old name of RUBY_T_CLASS.
#define T_MOVED
Old name of RUBY_T_MOVED.
#define T_REGEXP
Old name of RUBY_T_REGEXP.
VALUE rb_eRuntimeError
RuntimeError exception.
VALUE type(ANYARGS)
ANYARGS-ed function type.
uintptr_t VALUE
Type that represents a Ruby object.
#define RBIMPL_WARNING_IGNORED(flag)
Suppresses a warning.
#define RBIMPL_WARNING_PUSH()
Pushes compiler warning state.
#define RBIMPL_WARNING_POP()
Pops compiler warning state.