@@ -1211,7 +1211,6 @@ classext_free(rb_classext_t *ext, bool is_prime, VALUE namespace, void *arg)
12111211 struct classext_foreach_args * args = (struct classext_foreach_args * )arg ;
12121212
12131213 rb_id_table_free (RCLASSEXT_M_TBL (ext ));
1214- rb_cc_tbl_free (RCLASSEXT_CC_TBL (ext ), args -> klass );
12151214 if (!RCLASSEXT_SHARED_CONST_TBL (ext ) && (tbl = RCLASSEXT_CONST_TBL (ext )) != NULL ) {
12161215 rb_free_const_table (tbl );
12171216 }
@@ -1241,7 +1240,6 @@ classext_iclass_free(rb_classext_t *ext, bool is_prime, VALUE namespace, void *a
12411240 if (RCLASSEXT_CALLABLE_M_TBL (ext ) != NULL ) {
12421241 rb_id_table_free (RCLASSEXT_CALLABLE_M_TBL (ext ));
12431242 }
1244- rb_cc_tbl_free (RCLASSEXT_CC_TBL (ext ), args -> klass );
12451243
12461244 rb_class_classext_free_subclasses (ext , args -> klass );
12471245
@@ -2238,24 +2236,6 @@ rb_obj_id_p(VALUE obj)
22382236 return !RB_TYPE_P (obj , T_IMEMO ) && rb_shape_obj_has_id (obj );
22392237}
22402238
2241- static enum rb_id_table_iterator_result
2242- cc_table_memsize_i (VALUE ccs_ptr , void * data_ptr )
2243- {
2244- size_t * total_size = data_ptr ;
2245- struct rb_class_cc_entries * ccs = (struct rb_class_cc_entries * )ccs_ptr ;
2246- * total_size += sizeof (* ccs );
2247- * total_size += sizeof (ccs -> entries [0 ]) * ccs -> capa ;
2248- return ID_TABLE_CONTINUE ;
2249- }
2250-
2251- static size_t
2252- cc_table_memsize (struct rb_id_table * cc_table )
2253- {
2254- size_t total = rb_id_table_memsize (cc_table );
2255- rb_id_table_foreach_values (cc_table , cc_table_memsize_i , & total );
2256- return total ;
2257- }
2258-
22592239static void
22602240classext_memsize (rb_classext_t * ext , bool prime , VALUE namespace , void * arg )
22612241{
@@ -2271,9 +2251,6 @@ classext_memsize(rb_classext_t *ext, bool prime, VALUE namespace, void *arg)
22712251 if (RCLASSEXT_CONST_TBL (ext )) {
22722252 s += rb_id_table_memsize (RCLASSEXT_CONST_TBL (ext ));
22732253 }
2274- if (RCLASSEXT_CC_TBL (ext )) {
2275- s += cc_table_memsize (RCLASSEXT_CC_TBL (ext ));
2276- }
22772254 if (RCLASSEXT_SUPERCLASSES_WITH_SELF (ext )) {
22782255 s += (RCLASSEXT_SUPERCLASS_DEPTH (ext ) + 1 ) * sizeof (VALUE );
22792256 }
@@ -2324,9 +2301,6 @@ rb_obj_memsize_of(VALUE obj)
23242301 size += rb_id_table_memsize (RCLASS_M_TBL (obj ));
23252302 }
23262303 }
2327- if (RCLASS_WRITABLE_CC_TBL (obj )) {
2328- size += cc_table_memsize (RCLASS_WRITABLE_CC_TBL (obj ));
2329- }
23302304 break ;
23312305 case T_STRING :
23322306 size += rb_str_memsize (obj );
@@ -2808,42 +2782,6 @@ struct mark_cc_entry_args {
28082782 VALUE klass ;
28092783};
28102784
2811- static enum rb_id_table_iterator_result
2812- mark_cc_entry_i (VALUE ccs_ptr , void * data )
2813- {
2814- struct rb_class_cc_entries * ccs = (struct rb_class_cc_entries * )ccs_ptr ;
2815-
2816- VM_ASSERT (vm_ccs_p (ccs ));
2817-
2818- if (METHOD_ENTRY_INVALIDATED (ccs -> cme )) {
2819- rb_vm_ccs_free (ccs );
2820- return ID_TABLE_DELETE ;
2821- }
2822- else {
2823- gc_mark_internal ((VALUE )ccs -> cme );
2824-
2825- for (int i = 0 ; i < ccs -> len ; i ++ ) {
2826- VM_ASSERT (((struct mark_cc_entry_args * )data )-> klass == ccs -> entries [i ].cc -> klass );
2827- VM_ASSERT (vm_cc_check_cme (ccs -> entries [i ].cc , ccs -> cme ));
2828-
2829- gc_mark_internal ((VALUE )ccs -> entries [i ].cc );
2830- }
2831- return ID_TABLE_CONTINUE ;
2832- }
2833- }
2834-
2835- static void
2836- mark_cc_tbl (rb_objspace_t * objspace , struct rb_id_table * tbl , VALUE klass )
2837- {
2838- struct mark_cc_entry_args args ;
2839-
2840- if (!tbl ) return ;
2841-
2842- args .objspace = objspace ;
2843- args .klass = klass ;
2844- rb_id_table_foreach_values (tbl , mark_cc_entry_i , (void * )& args );
2845- }
2846-
28472785static enum rb_id_table_iterator_result
28482786mark_cvc_tbl_i (VALUE cvc_entry , void * objspace )
28492787{
@@ -3081,7 +3019,6 @@ gc_mark_classext_module(rb_classext_t *ext, bool prime, VALUE namespace, void *a
30813019{
30823020 struct gc_mark_classext_foreach_arg * foreach_arg = (struct gc_mark_classext_foreach_arg * )arg ;
30833021 rb_objspace_t * objspace = foreach_arg -> objspace ;
3084- VALUE obj = foreach_arg -> obj ;
30853022
30863023 if (RCLASSEXT_SUPER (ext )) {
30873024 gc_mark_internal (RCLASSEXT_SUPER (ext ));
@@ -3092,7 +3029,7 @@ gc_mark_classext_module(rb_classext_t *ext, bool prime, VALUE namespace, void *a
30923029 mark_const_tbl (objspace , RCLASSEXT_CONST_TBL (ext ));
30933030 }
30943031 mark_m_tbl (objspace , RCLASSEXT_CALLABLE_M_TBL (ext ));
3095- mark_cc_tbl ( objspace , RCLASSEXT_CC_TBL (ext ), obj );
3032+ gc_mark_internal ( RCLASSEXT_CC_TBL (ext ));
30963033 mark_cvc_tbl (objspace , RCLASSEXT_CVC_TBL (ext ));
30973034 gc_mark_internal (RCLASSEXT_CLASSPATH (ext ));
30983035}
@@ -3102,7 +3039,6 @@ gc_mark_classext_iclass(rb_classext_t *ext, bool prime, VALUE namespace, void *a
31023039{
31033040 struct gc_mark_classext_foreach_arg * foreach_arg = (struct gc_mark_classext_foreach_arg * )arg ;
31043041 rb_objspace_t * objspace = foreach_arg -> objspace ;
3105- VALUE iclass = foreach_arg -> obj ;
31063042
31073043 if (RCLASSEXT_SUPER (ext )) {
31083044 gc_mark_internal (RCLASSEXT_SUPER (ext ));
@@ -3114,7 +3050,7 @@ gc_mark_classext_iclass(rb_classext_t *ext, bool prime, VALUE namespace, void *a
31143050 gc_mark_internal (RCLASSEXT_INCLUDER (ext ));
31153051 }
31163052 mark_m_tbl (objspace , RCLASSEXT_CALLABLE_M_TBL (ext ));
3117- mark_cc_tbl ( objspace , RCLASSEXT_CC_TBL (ext ), iclass );
3053+ gc_mark_internal ( RCLASSEXT_CC_TBL (ext ));
31183054}
31193055
31203056#define TYPED_DATA_REFS_OFFSET_LIST (d ) (size_t *)(uintptr_t)RTYPEDDATA_TYPE(d)->function.dmark
@@ -3679,33 +3615,6 @@ update_m_tbl(void *objspace, struct rb_id_table *tbl)
36793615 }
36803616}
36813617
3682- static enum rb_id_table_iterator_result
3683- update_cc_tbl_i (VALUE ccs_ptr , void * objspace )
3684- {
3685- struct rb_class_cc_entries * ccs = (struct rb_class_cc_entries * )ccs_ptr ;
3686- VM_ASSERT (vm_ccs_p (ccs ));
3687-
3688- if (rb_gc_impl_object_moved_p (objspace , (VALUE )ccs -> cme )) {
3689- ccs -> cme = (const rb_callable_method_entry_t * )gc_location_internal (objspace , (VALUE )ccs -> cme );
3690- }
3691-
3692- for (int i = 0 ; i < ccs -> len ; i ++ ) {
3693- if (rb_gc_impl_object_moved_p (objspace , (VALUE )ccs -> entries [i ].cc )) {
3694- ccs -> entries [i ].cc = (struct rb_callcache * )gc_location_internal (objspace , (VALUE )ccs -> entries [i ].cc );
3695- }
3696- }
3697-
3698- // do not replace
3699- return ID_TABLE_CONTINUE ;
3700- }
3701-
3702- static void
3703- update_cc_tbl (void * objspace , struct rb_id_table * tbl )
3704- {
3705- if (!tbl ) return ;
3706- rb_id_table_foreach_values (tbl , update_cc_tbl_i , objspace );
3707- }
3708-
37093618static enum rb_id_table_iterator_result
37103619update_cvc_tbl_i (VALUE cvc_entry , void * objspace )
37113620{
@@ -3804,7 +3713,7 @@ update_classext(rb_classext_t *ext, bool is_prime, VALUE namespace, void *arg)
38043713 if (!RCLASSEXT_SHARED_CONST_TBL (ext )) {
38053714 update_const_tbl (objspace , RCLASSEXT_CONST_TBL (ext ));
38063715 }
3807- update_cc_tbl (objspace , RCLASSEXT_CC_TBL (ext ));
3716+ UPDATE_IF_MOVED (objspace , RCLASSEXT_CC_TBL (ext ));
38083717 update_cvc_tbl (objspace , RCLASSEXT_CVC_TBL (ext ));
38093718 update_superclasses (objspace , ext );
38103719 update_subclasses (objspace , ext );
@@ -3823,7 +3732,7 @@ update_iclass_classext(rb_classext_t *ext, bool is_prime, VALUE namespace, void
38233732 }
38243733 update_m_tbl (objspace , RCLASSEXT_M_TBL (ext ));
38253734 update_m_tbl (objspace , RCLASSEXT_CALLABLE_M_TBL (ext ));
3826- update_cc_tbl (objspace , RCLASSEXT_CC_TBL (ext ));
3735+ UPDATE_IF_MOVED (objspace , RCLASSEXT_CC_TBL (ext ));
38273736 update_subclasses (objspace , ext );
38283737
38293738 update_classext_values (objspace , ext , true);
0 commit comments