@@ -4689,7 +4689,7 @@ class_fields_ivar_set(VALUE klass, VALUE fields_obj, ID id, VALUE val, bool conc
46894689{
46904690 bool existing = true;
46914691 const VALUE original_fields_obj = fields_obj ;
4692- fields_obj = original_fields_obj ? original_fields_obj : rb_imemo_fields_new (klass , 1 );
4692+ fields_obj = original_fields_obj ? original_fields_obj : rb_imemo_fields_new (rb_singleton_class ( klass ) , 1 );
46934693
46944694 shape_id_t current_shape_id = RBASIC_SHAPE_ID (fields_obj );
46954695 shape_id_t next_shape_id = current_shape_id ;
@@ -4710,7 +4710,7 @@ class_fields_ivar_set(VALUE klass, VALUE fields_obj, ID id, VALUE val, bool conc
47104710 next_shape_id = rb_shape_transition_add_ivar (fields_obj , id );
47114711 if (UNLIKELY (rb_shape_too_complex_p (next_shape_id ))) {
47124712 attr_index_t current_len = RSHAPE_LEN (current_shape_id );
4713- fields_obj = rb_imemo_fields_new_complex (klass , current_len + 1 );
4713+ fields_obj = rb_imemo_fields_new_complex (rb_singleton_class ( klass ) , current_len + 1 );
47144714 if (current_len ) {
47154715 rb_obj_copy_fields_to_hash_table (original_fields_obj , rb_imemo_fields_complex_tbl (fields_obj ));
47164716 RBASIC_SET_SHAPE_ID (fields_obj , next_shape_id );
@@ -4726,7 +4726,7 @@ class_fields_ivar_set(VALUE klass, VALUE fields_obj, ID id, VALUE val, bool conc
47264726
47274727 // We allocate a new fields_obj even when concurrency isn't a concern
47284728 // so that we're embedded as long as possible.
4729- fields_obj = rb_imemo_fields_new (klass , next_capacity );
4729+ fields_obj = rb_imemo_fields_new (rb_singleton_class ( klass ) , next_capacity );
47304730 if (original_fields_obj ) {
47314731 MEMCPY (rb_imemo_fields_ptr (fields_obj ), rb_imemo_fields_ptr (original_fields_obj ), VALUE , RSHAPE_LEN (current_shape_id ));
47324732 }
0 commit comments