@@ -1208,7 +1208,6 @@ classext_free(rb_classext_t *ext, bool is_prime, VALUE namespace, void *arg)
12081208 struct classext_foreach_args * args = (struct classext_foreach_args * )arg ;
12091209
12101210 rb_id_table_free (RCLASSEXT_M_TBL (ext ));
1211- rb_cc_tbl_free (RCLASSEXT_CC_TBL (ext ), args -> klass );
12121211
12131212 if (!RCLASSEXT_SHARED_CONST_TBL (ext ) && (tbl = RCLASSEXT_CONST_TBL (ext )) != NULL ) {
12141213 rb_free_const_table (tbl );
@@ -1239,7 +1238,6 @@ classext_iclass_free(rb_classext_t *ext, bool is_prime, VALUE namespace, void *a
12391238 if (RCLASSEXT_CALLABLE_M_TBL (ext ) != NULL ) {
12401239 rb_id_table_free (RCLASSEXT_CALLABLE_M_TBL (ext ));
12411240 }
1242- rb_cc_tbl_free (RCLASSEXT_CC_TBL (ext ), args -> klass );
12431241
12441242 rb_class_classext_free_subclasses (ext , args -> klass );
12451243
@@ -2266,24 +2264,6 @@ rb_gc_after_updating_jit_code(void)
22662264#endif
22672265}
22682266
2269- static enum rb_id_table_iterator_result
2270- cc_table_memsize_i (VALUE ccs_ptr , void * data_ptr )
2271- {
2272- size_t * total_size = data_ptr ;
2273- struct rb_class_cc_entries * ccs = (struct rb_class_cc_entries * )ccs_ptr ;
2274- * total_size += sizeof (* ccs );
2275- * total_size += sizeof (ccs -> entries [0 ]) * ccs -> capa ;
2276- return ID_TABLE_CONTINUE ;
2277- }
2278-
2279- static size_t
2280- cc_table_memsize (struct rb_id_table * cc_table )
2281- {
2282- size_t total = rb_id_table_memsize (cc_table );
2283- rb_id_table_foreach_values (cc_table , cc_table_memsize_i , & total );
2284- return total ;
2285- }
2286-
22872267static void
22882268classext_memsize (rb_classext_t * ext , bool prime , VALUE namespace , void * arg )
22892269{
@@ -2299,9 +2279,6 @@ classext_memsize(rb_classext_t *ext, bool prime, VALUE namespace, void *arg)
22992279 if (RCLASSEXT_CONST_TBL (ext )) {
23002280 s += rb_id_table_memsize (RCLASSEXT_CONST_TBL (ext ));
23012281 }
2302- if (RCLASSEXT_CC_TBL (ext )) {
2303- s += cc_table_memsize (RCLASSEXT_CC_TBL (ext ));
2304- }
23052282 if (RCLASSEXT_SUPERCLASSES_WITH_SELF (ext )) {
23062283 s += (RCLASSEXT_SUPERCLASS_DEPTH (ext ) + 1 ) * sizeof (VALUE );
23072284 }
@@ -2352,9 +2329,6 @@ rb_obj_memsize_of(VALUE obj)
23522329 size += rb_id_table_memsize (RCLASS_M_TBL (obj ));
23532330 }
23542331 }
2355- if (RCLASS_WRITABLE_CC_TBL (obj )) {
2356- size += cc_table_memsize (RCLASS_WRITABLE_CC_TBL (obj ));
2357- }
23582332 break ;
23592333 case T_STRING :
23602334 size += rb_str_memsize (obj );
@@ -2839,47 +2813,6 @@ mark_const_tbl(rb_objspace_t *objspace, struct rb_id_table *tbl)
28392813 rb_id_table_foreach_values (tbl , mark_const_entry_i , objspace );
28402814}
28412815
2842- struct mark_cc_entry_args {
2843- rb_objspace_t * objspace ;
2844- VALUE klass ;
2845- };
2846-
2847- static enum rb_id_table_iterator_result
2848- mark_cc_entry_i (VALUE ccs_ptr , void * data )
2849- {
2850- struct rb_class_cc_entries * ccs = (struct rb_class_cc_entries * )ccs_ptr ;
2851-
2852- VM_ASSERT (vm_ccs_p (ccs ));
2853-
2854- if (METHOD_ENTRY_INVALIDATED (ccs -> cme )) {
2855- rb_vm_ccs_free (ccs );
2856- return ID_TABLE_DELETE ;
2857- }
2858- else {
2859- gc_mark_internal ((VALUE )ccs -> cme );
2860-
2861- for (int i = 0 ; i < ccs -> len ; i ++ ) {
2862- VM_ASSERT (((struct mark_cc_entry_args * )data )-> klass == ccs -> entries [i ].cc -> klass );
2863- VM_ASSERT (vm_cc_check_cme (ccs -> entries [i ].cc , ccs -> cme ));
2864-
2865- gc_mark_internal ((VALUE )ccs -> entries [i ].cc );
2866- }
2867- return ID_TABLE_CONTINUE ;
2868- }
2869- }
2870-
2871- static void
2872- mark_cc_tbl (rb_objspace_t * objspace , struct rb_id_table * tbl , VALUE klass )
2873- {
2874- struct mark_cc_entry_args args ;
2875-
2876- if (!tbl ) return ;
2877-
2878- args .objspace = objspace ;
2879- args .klass = klass ;
2880- rb_id_table_foreach_values (tbl , mark_cc_entry_i , (void * )& args );
2881- }
2882-
28832816static enum rb_id_table_iterator_result
28842817mark_cvc_tbl_i (VALUE cvc_entry , void * objspace )
28852818{
@@ -3117,7 +3050,6 @@ gc_mark_classext_module(rb_classext_t *ext, bool prime, VALUE namespace, void *a
31173050{
31183051 struct gc_mark_classext_foreach_arg * foreach_arg = (struct gc_mark_classext_foreach_arg * )arg ;
31193052 rb_objspace_t * objspace = foreach_arg -> objspace ;
3120- VALUE obj = foreach_arg -> obj ;
31213053
31223054 if (RCLASSEXT_SUPER (ext )) {
31233055 gc_mark_internal (RCLASSEXT_SUPER (ext ));
@@ -3128,7 +3060,7 @@ gc_mark_classext_module(rb_classext_t *ext, bool prime, VALUE namespace, void *a
31283060 mark_const_tbl (objspace , RCLASSEXT_CONST_TBL (ext ));
31293061 }
31303062 mark_m_tbl (objspace , RCLASSEXT_CALLABLE_M_TBL (ext ));
3131- mark_cc_tbl ( objspace , RCLASSEXT_CC_TBL (ext ), obj );
3063+ gc_mark_internal ( RCLASSEXT_CC_TBL (ext ));
31323064 mark_cvc_tbl (objspace , RCLASSEXT_CVC_TBL (ext ));
31333065 gc_mark_internal (RCLASSEXT_CLASSPATH (ext ));
31343066}
@@ -3138,7 +3070,6 @@ gc_mark_classext_iclass(rb_classext_t *ext, bool prime, VALUE namespace, void *a
31383070{
31393071 struct gc_mark_classext_foreach_arg * foreach_arg = (struct gc_mark_classext_foreach_arg * )arg ;
31403072 rb_objspace_t * objspace = foreach_arg -> objspace ;
3141- VALUE iclass = foreach_arg -> obj ;
31423073
31433074 if (RCLASSEXT_SUPER (ext )) {
31443075 gc_mark_internal (RCLASSEXT_SUPER (ext ));
@@ -3150,7 +3081,7 @@ gc_mark_classext_iclass(rb_classext_t *ext, bool prime, VALUE namespace, void *a
31503081 gc_mark_internal (RCLASSEXT_INCLUDER (ext ));
31513082 }
31523083 mark_m_tbl (objspace , RCLASSEXT_CALLABLE_M_TBL (ext ));
3153- mark_cc_tbl ( objspace , RCLASSEXT_CC_TBL (ext ), iclass );
3084+ gc_mark_internal ( RCLASSEXT_CC_TBL (ext ));
31543085}
31553086
31563087#define TYPED_DATA_REFS_OFFSET_LIST (d ) (size_t *)(uintptr_t)RTYPEDDATA_TYPE(d)->function.dmark
@@ -3714,33 +3645,6 @@ update_m_tbl(void *objspace, struct rb_id_table *tbl)
37143645 }
37153646}
37163647
3717- static enum rb_id_table_iterator_result
3718- update_cc_tbl_i (VALUE ccs_ptr , void * objspace )
3719- {
3720- struct rb_class_cc_entries * ccs = (struct rb_class_cc_entries * )ccs_ptr ;
3721- VM_ASSERT (vm_ccs_p (ccs ));
3722-
3723- if (rb_gc_impl_object_moved_p (objspace , (VALUE )ccs -> cme )) {
3724- ccs -> cme = (const rb_callable_method_entry_t * )gc_location_internal (objspace , (VALUE )ccs -> cme );
3725- }
3726-
3727- for (int i = 0 ; i < ccs -> len ; i ++ ) {
3728- if (rb_gc_impl_object_moved_p (objspace , (VALUE )ccs -> entries [i ].cc )) {
3729- ccs -> entries [i ].cc = (struct rb_callcache * )gc_location_internal (objspace , (VALUE )ccs -> entries [i ].cc );
3730- }
3731- }
3732-
3733- // do not replace
3734- return ID_TABLE_CONTINUE ;
3735- }
3736-
3737- static void
3738- update_cc_tbl (void * objspace , struct rb_id_table * tbl )
3739- {
3740- if (!tbl ) return ;
3741- rb_id_table_foreach_values (tbl , update_cc_tbl_i , objspace );
3742- }
3743-
37443648static enum rb_id_table_iterator_result
37453649update_cvc_tbl_i (VALUE cvc_entry , void * objspace )
37463650{
@@ -3839,7 +3743,7 @@ update_classext(rb_classext_t *ext, bool is_prime, VALUE namespace, void *arg)
38393743 if (!RCLASSEXT_SHARED_CONST_TBL (ext )) {
38403744 update_const_tbl (objspace , RCLASSEXT_CONST_TBL (ext ));
38413745 }
3842- update_cc_tbl (objspace , RCLASSEXT_CC_TBL (ext ));
3746+ UPDATE_IF_MOVED (objspace , RCLASSEXT_CC_TBL (ext ));
38433747 update_cvc_tbl (objspace , RCLASSEXT_CVC_TBL (ext ));
38443748 update_superclasses (objspace , ext );
38453749 update_subclasses (objspace , ext );
@@ -3858,7 +3762,7 @@ update_iclass_classext(rb_classext_t *ext, bool is_prime, VALUE namespace, void
38583762 }
38593763 update_m_tbl (objspace , RCLASSEXT_M_TBL (ext ));
38603764 update_m_tbl (objspace , RCLASSEXT_CALLABLE_M_TBL (ext ));
3861- update_cc_tbl (objspace , RCLASSEXT_CC_TBL (ext ));
3765+ UPDATE_IF_MOVED (objspace , RCLASSEXT_CC_TBL (ext ));
38623766 update_subclasses (objspace , ext );
38633767
38643768 update_classext_values (objspace , ext , true);
0 commit comments