@@ -1213,7 +1213,6 @@ classext_free(rb_classext_t *ext, bool is_prime, VALUE namespace, void *arg)
12131213 struct classext_foreach_args * args = (struct classext_foreach_args * )arg ;
12141214
12151215 rb_id_table_free (RCLASSEXT_M_TBL (ext ));
1216- rb_cc_tbl_free (RCLASSEXT_CC_TBL (ext ), args -> klass );
12171216
12181217 if (!RCLASSEXT_SHARED_CONST_TBL (ext ) && (tbl = RCLASSEXT_CONST_TBL (ext )) != NULL ) {
12191218 rb_free_const_table (tbl );
@@ -1244,7 +1243,6 @@ classext_iclass_free(rb_classext_t *ext, bool is_prime, VALUE namespace, void *a
12441243 if (RCLASSEXT_CALLABLE_M_TBL (ext ) != NULL ) {
12451244 rb_id_table_free (RCLASSEXT_CALLABLE_M_TBL (ext ));
12461245 }
1247- rb_cc_tbl_free (RCLASSEXT_CC_TBL (ext ), args -> klass );
12481246
12491247 rb_class_classext_free_subclasses (ext , args -> klass );
12501248
@@ -2271,24 +2269,6 @@ rb_gc_after_updating_jit_code(void)
22712269#endif
22722270}
22732271
2274- static enum rb_id_table_iterator_result
2275- cc_table_memsize_i (VALUE ccs_ptr , void * data_ptr )
2276- {
2277- size_t * total_size = data_ptr ;
2278- struct rb_class_cc_entries * ccs = (struct rb_class_cc_entries * )ccs_ptr ;
2279- * total_size += sizeof (* ccs );
2280- * total_size += sizeof (ccs -> entries [0 ]) * ccs -> capa ;
2281- return ID_TABLE_CONTINUE ;
2282- }
2283-
2284- static size_t
2285- cc_table_memsize (struct rb_id_table * cc_table )
2286- {
2287- size_t total = rb_id_table_memsize (cc_table );
2288- rb_id_table_foreach_values (cc_table , cc_table_memsize_i , & total );
2289- return total ;
2290- }
2291-
22922272static void
22932273classext_memsize (rb_classext_t * ext , bool prime , VALUE namespace , void * arg )
22942274{
@@ -2304,9 +2284,6 @@ classext_memsize(rb_classext_t *ext, bool prime, VALUE namespace, void *arg)
23042284 if (RCLASSEXT_CONST_TBL (ext )) {
23052285 s += rb_id_table_memsize (RCLASSEXT_CONST_TBL (ext ));
23062286 }
2307- if (RCLASSEXT_CC_TBL (ext )) {
2308- s += cc_table_memsize (RCLASSEXT_CC_TBL (ext ));
2309- }
23102287 if (RCLASSEXT_SUPERCLASSES_WITH_SELF (ext )) {
23112288 s += (RCLASSEXT_SUPERCLASS_DEPTH (ext ) + 1 ) * sizeof (VALUE );
23122289 }
@@ -2357,9 +2334,6 @@ rb_obj_memsize_of(VALUE obj)
23572334 size += rb_id_table_memsize (RCLASS_M_TBL (obj ));
23582335 }
23592336 }
2360- if (RCLASS_WRITABLE_CC_TBL (obj )) {
2361- size += cc_table_memsize (RCLASS_WRITABLE_CC_TBL (obj ));
2362- }
23632337 break ;
23642338 case T_STRING :
23652339 size += rb_str_memsize (obj );
@@ -2844,47 +2818,6 @@ mark_const_tbl(rb_objspace_t *objspace, struct rb_id_table *tbl)
28442818 rb_id_table_foreach_values (tbl , mark_const_entry_i , objspace );
28452819}
28462820
2847- struct mark_cc_entry_args {
2848- rb_objspace_t * objspace ;
2849- VALUE klass ;
2850- };
2851-
2852- static enum rb_id_table_iterator_result
2853- mark_cc_entry_i (VALUE ccs_ptr , void * data )
2854- {
2855- struct rb_class_cc_entries * ccs = (struct rb_class_cc_entries * )ccs_ptr ;
2856-
2857- VM_ASSERT (vm_ccs_p (ccs ));
2858-
2859- if (METHOD_ENTRY_INVALIDATED (ccs -> cme )) {
2860- rb_vm_ccs_free (ccs );
2861- return ID_TABLE_DELETE ;
2862- }
2863- else {
2864- gc_mark_internal ((VALUE )ccs -> cme );
2865-
2866- for (int i = 0 ; i < ccs -> len ; i ++ ) {
2867- VM_ASSERT (((struct mark_cc_entry_args * )data )-> klass == ccs -> entries [i ].cc -> klass );
2868- VM_ASSERT (vm_cc_check_cme (ccs -> entries [i ].cc , ccs -> cme ));
2869-
2870- gc_mark_internal ((VALUE )ccs -> entries [i ].cc );
2871- }
2872- return ID_TABLE_CONTINUE ;
2873- }
2874- }
2875-
2876- static void
2877- mark_cc_tbl (rb_objspace_t * objspace , struct rb_id_table * tbl , VALUE klass )
2878- {
2879- struct mark_cc_entry_args args ;
2880-
2881- if (!tbl ) return ;
2882-
2883- args .objspace = objspace ;
2884- args .klass = klass ;
2885- rb_id_table_foreach_values (tbl , mark_cc_entry_i , (void * )& args );
2886- }
2887-
28882821static enum rb_id_table_iterator_result
28892822mark_cvc_tbl_i (VALUE cvc_entry , void * objspace )
28902823{
@@ -3122,7 +3055,6 @@ gc_mark_classext_module(rb_classext_t *ext, bool prime, VALUE namespace, void *a
31223055{
31233056 struct gc_mark_classext_foreach_arg * foreach_arg = (struct gc_mark_classext_foreach_arg * )arg ;
31243057 rb_objspace_t * objspace = foreach_arg -> objspace ;
3125- VALUE obj = foreach_arg -> obj ;
31263058
31273059 if (RCLASSEXT_SUPER (ext )) {
31283060 gc_mark_internal (RCLASSEXT_SUPER (ext ));
@@ -3133,7 +3065,7 @@ gc_mark_classext_module(rb_classext_t *ext, bool prime, VALUE namespace, void *a
31333065 mark_const_tbl (objspace , RCLASSEXT_CONST_TBL (ext ));
31343066 }
31353067 mark_m_tbl (objspace , RCLASSEXT_CALLABLE_M_TBL (ext ));
3136- mark_cc_tbl ( objspace , RCLASSEXT_CC_TBL (ext ), obj );
3068+ gc_mark_internal ( RCLASSEXT_CC_TBL (ext ));
31373069 mark_cvc_tbl (objspace , RCLASSEXT_CVC_TBL (ext ));
31383070 gc_mark_internal (RCLASSEXT_CLASSPATH (ext ));
31393071}
@@ -3143,7 +3075,6 @@ gc_mark_classext_iclass(rb_classext_t *ext, bool prime, VALUE namespace, void *a
31433075{
31443076 struct gc_mark_classext_foreach_arg * foreach_arg = (struct gc_mark_classext_foreach_arg * )arg ;
31453077 rb_objspace_t * objspace = foreach_arg -> objspace ;
3146- VALUE iclass = foreach_arg -> obj ;
31473078
31483079 if (RCLASSEXT_SUPER (ext )) {
31493080 gc_mark_internal (RCLASSEXT_SUPER (ext ));
@@ -3155,7 +3086,7 @@ gc_mark_classext_iclass(rb_classext_t *ext, bool prime, VALUE namespace, void *a
31553086 gc_mark_internal (RCLASSEXT_INCLUDER (ext ));
31563087 }
31573088 mark_m_tbl (objspace , RCLASSEXT_CALLABLE_M_TBL (ext ));
3158- mark_cc_tbl ( objspace , RCLASSEXT_CC_TBL (ext ), iclass );
3089+ gc_mark_internal ( RCLASSEXT_CC_TBL (ext ));
31593090}
31603091
31613092#define TYPED_DATA_REFS_OFFSET_LIST (d ) (size_t *)(uintptr_t)RTYPEDDATA_TYPE(d)->function.dmark
@@ -3719,33 +3650,6 @@ update_m_tbl(void *objspace, struct rb_id_table *tbl)
37193650 }
37203651}
37213652
3722- static enum rb_id_table_iterator_result
3723- update_cc_tbl_i (VALUE ccs_ptr , void * objspace )
3724- {
3725- struct rb_class_cc_entries * ccs = (struct rb_class_cc_entries * )ccs_ptr ;
3726- VM_ASSERT (vm_ccs_p (ccs ));
3727-
3728- if (rb_gc_impl_object_moved_p (objspace , (VALUE )ccs -> cme )) {
3729- ccs -> cme = (const rb_callable_method_entry_t * )gc_location_internal (objspace , (VALUE )ccs -> cme );
3730- }
3731-
3732- for (int i = 0 ; i < ccs -> len ; i ++ ) {
3733- if (rb_gc_impl_object_moved_p (objspace , (VALUE )ccs -> entries [i ].cc )) {
3734- ccs -> entries [i ].cc = (struct rb_callcache * )gc_location_internal (objspace , (VALUE )ccs -> entries [i ].cc );
3735- }
3736- }
3737-
3738- // do not replace
3739- return ID_TABLE_CONTINUE ;
3740- }
3741-
3742- static void
3743- update_cc_tbl (void * objspace , struct rb_id_table * tbl )
3744- {
3745- if (!tbl ) return ;
3746- rb_id_table_foreach_values (tbl , update_cc_tbl_i , objspace );
3747- }
3748-
37493653static enum rb_id_table_iterator_result
37503654update_cvc_tbl_i (VALUE cvc_entry , void * objspace )
37513655{
@@ -3844,7 +3748,7 @@ update_classext(rb_classext_t *ext, bool is_prime, VALUE namespace, void *arg)
38443748 if (!RCLASSEXT_SHARED_CONST_TBL (ext )) {
38453749 update_const_tbl (objspace , RCLASSEXT_CONST_TBL (ext ));
38463750 }
3847- update_cc_tbl (objspace , RCLASSEXT_CC_TBL (ext ));
3751+ UPDATE_IF_MOVED (objspace , RCLASSEXT_CC_TBL (ext ));
38483752 update_cvc_tbl (objspace , RCLASSEXT_CVC_TBL (ext ));
38493753 update_superclasses (objspace , ext );
38503754 update_subclasses (objspace , ext );
@@ -3863,7 +3767,7 @@ update_iclass_classext(rb_classext_t *ext, bool is_prime, VALUE namespace, void
38633767 }
38643768 update_m_tbl (objspace , RCLASSEXT_M_TBL (ext ));
38653769 update_m_tbl (objspace , RCLASSEXT_CALLABLE_M_TBL (ext ));
3866- update_cc_tbl (objspace , RCLASSEXT_CC_TBL (ext ));
3770+ UPDATE_IF_MOVED (objspace , RCLASSEXT_CC_TBL (ext ));
38673771 update_subclasses (objspace , ext );
38683772
38693773 update_classext_values (objspace , ext , true);
0 commit comments