@@ -31,56 +31,74 @@ enum rb_gc_vm_weak_tables {
3131 RB_GC_VM_ID2REF_TABLE ,
3232 RB_GC_VM_GENERIC_FIELDS_TABLE ,
3333 RB_GC_VM_FROZEN_STRINGS_TABLE ,
34+ RB_GC_VM_CC_REFINEMENT_TABLE ,
3435 RB_GC_VM_WEAK_TABLE_COUNT
3536};
3637
38+ #if USE_MODULAR_GC
39+ # define MODULAR_GC_FN
40+ #else
41+ // This takes advantage of internal linkage winning when appearing first.
42+ // See C99 6.2.2p4.
43+ # define MODULAR_GC_FN static
44+ #endif
45+
46+ #if USE_MODULAR_GC
3747RUBY_SYMBOL_EXPORT_BEGIN
38- unsigned int rb_gc_vm_lock (void );
39- void rb_gc_vm_unlock (unsigned int lev );
40- unsigned int rb_gc_cr_lock (void );
41- void rb_gc_cr_unlock (unsigned int lev );
42- unsigned int rb_gc_vm_lock_no_barrier (void );
43- void rb_gc_vm_unlock_no_barrier (unsigned int lev );
44- void rb_gc_vm_barrier (void );
45- size_t rb_gc_obj_optimal_size (VALUE obj );
46- void rb_gc_mark_children (void * objspace , VALUE obj );
47- 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 );
48- void rb_gc_update_object_references (void * objspace , VALUE obj );
49- void rb_gc_update_vm_references (void * objspace );
50- void rb_gc_event_hook (VALUE obj , rb_event_flag_t event );
51- void * rb_gc_get_objspace (void );
48+ #endif
49+
50+ // These functions cannot be defined as static because they are used by other
51+ // files in Ruby.
5252size_t rb_size_mul_or_raise (size_t x , size_t y , VALUE exc );
53- void rb_gc_run_obj_finalizer (VALUE objid , long count , VALUE (* callback )(long i , void * data ), void * data );
54- void rb_gc_set_pending_interrupt (void );
55- void rb_gc_unset_pending_interrupt (void );
56- void rb_gc_obj_free_vm_weak_references (VALUE obj );
57- bool rb_gc_obj_free (void * objspace , VALUE obj );
58- void rb_gc_save_machine_context (void );
59- void rb_gc_mark_roots (void * objspace , const char * * categoryp );
60- void rb_gc_ractor_newobj_cache_foreach (void (* func )(void * cache , void * data ), void * data );
61- bool rb_gc_multi_ractor_p (void );
62- void rb_objspace_reachable_objects_from_root (void (func )(const char * category , VALUE , void * ), void * passing_data );
6353void rb_objspace_reachable_objects_from (VALUE obj , void (func )(VALUE , void * ), void * data );
6454void rb_obj_info_dump (VALUE obj );
6555const char * rb_obj_info (VALUE obj );
66- bool rb_gc_shutdown_call_finalizer_p (VALUE obj );
67- uint32_t rb_gc_get_shape (VALUE obj );
68- void rb_gc_set_shape (VALUE obj , uint32_t shape_id );
69- uint32_t rb_gc_rebuild_shape (VALUE obj , size_t heap_id );
7056size_t rb_obj_memsize_of (VALUE obj );
71- void rb_gc_prepare_heap_process_object (VALUE obj );
7257bool ruby_free_at_exit_p (void );
73- bool rb_memerror_reentered (void );
74- bool rb_obj_id_p (VALUE );
58+ void rb_objspace_reachable_objects_from_root (void (func )(const char * category , VALUE , void * ), void * passing_data );
59+
60+ MODULAR_GC_FN unsigned int rb_gc_vm_lock (void );
61+ MODULAR_GC_FN void rb_gc_vm_unlock (unsigned int lev );
62+ MODULAR_GC_FN unsigned int rb_gc_cr_lock (void );
63+ MODULAR_GC_FN void rb_gc_cr_unlock (unsigned int lev );
64+ MODULAR_GC_FN unsigned int rb_gc_vm_lock_no_barrier (void );
65+ MODULAR_GC_FN void rb_gc_vm_unlock_no_barrier (unsigned int lev );
66+ MODULAR_GC_FN void rb_gc_vm_barrier (void );
67+ MODULAR_GC_FN size_t rb_gc_obj_optimal_size (VALUE obj );
68+ MODULAR_GC_FN void rb_gc_mark_children (void * objspace , VALUE obj );
69+ MODULAR_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 );
70+ MODULAR_GC_FN void rb_gc_update_object_references (void * objspace , VALUE obj );
71+ MODULAR_GC_FN void rb_gc_update_vm_references (void * objspace );
72+ MODULAR_GC_FN void rb_gc_event_hook (VALUE obj , rb_event_flag_t event );
73+ MODULAR_GC_FN void * rb_gc_get_objspace (void );
74+ MODULAR_GC_FN void rb_gc_run_obj_finalizer (VALUE objid , long count , VALUE (* callback )(long i , void * data ), void * data );
75+ MODULAR_GC_FN void rb_gc_set_pending_interrupt (void );
76+ MODULAR_GC_FN void rb_gc_unset_pending_interrupt (void );
77+ MODULAR_GC_FN void rb_gc_obj_free_vm_weak_references (VALUE obj );
78+ MODULAR_GC_FN bool rb_gc_obj_free (void * objspace , VALUE obj );
79+ MODULAR_GC_FN void rb_gc_save_machine_context (void );
80+ MODULAR_GC_FN void rb_gc_mark_roots (void * objspace , const char * * categoryp );
81+ MODULAR_GC_FN void rb_gc_ractor_newobj_cache_foreach (void (* func )(void * cache , void * data ), void * data );
82+ MODULAR_GC_FN bool rb_gc_multi_ractor_p (void );
83+ MODULAR_GC_FN bool rb_gc_shutdown_call_finalizer_p (VALUE obj );
84+ MODULAR_GC_FN uint32_t rb_gc_get_shape (VALUE obj );
85+ MODULAR_GC_FN void rb_gc_set_shape (VALUE obj , uint32_t shape_id );
86+ MODULAR_GC_FN uint32_t rb_gc_rebuild_shape (VALUE obj , size_t heap_id );
87+ MODULAR_GC_FN void rb_gc_prepare_heap_process_object (VALUE obj );
88+ MODULAR_GC_FN bool rb_memerror_reentered (void );
89+ MODULAR_GC_FN bool rb_obj_id_p (VALUE );
7590
7691#if USE_MODULAR_GC
77- bool rb_gc_event_hook_required_p (rb_event_flag_t event );
78- void * rb_gc_get_ractor_newobj_cache (void );
79- void rb_gc_initialize_vm_context (struct rb_gc_vm_context * context );
80- void rb_gc_worker_thread_set_vm_context (struct rb_gc_vm_context * context );
81- void rb_gc_worker_thread_unset_vm_context (struct rb_gc_vm_context * context );
92+ MODULAR_GC_FN bool rb_gc_event_hook_required_p (rb_event_flag_t event );
93+ MODULAR_GC_FN void * rb_gc_get_ractor_newobj_cache (void );
94+ MODULAR_GC_FN void rb_gc_initialize_vm_context (struct rb_gc_vm_context * context );
95+ MODULAR_GC_FN void rb_gc_worker_thread_set_vm_context (struct rb_gc_vm_context * context );
96+ MODULAR_GC_FN void rb_gc_worker_thread_unset_vm_context (struct rb_gc_vm_context * context );
8297#endif
98+
99+ #if USE_MODULAR_GC
83100RUBY_SYMBOL_EXPORT_END
101+ #endif
84102
85103void rb_ractor_finish_marking (void );
86104
0 commit comments