@@ -336,7 +336,7 @@ rb_gc_shutdown_call_finalizer_p(VALUE obj)
336336{
337337 switch (BUILTIN_TYPE (obj )) {
338338 case T_DATA :
339- if (!ruby_free_at_exit_p () && (!DATA_PTR (obj ) || !RDATA (obj )-> dfree )) return false;
339+ if (!ruby_free_at_exit_p () && (!DATA_PTR (obj ) || !RDATA (obj )-> type )) return false;
340340 if (rb_obj_is_thread (obj )) return false;
341341 if (rb_obj_is_mutex (obj )) return false;
342342 if (rb_obj_is_fiber (obj )) return false;
@@ -384,7 +384,6 @@ void rb_vm_update_references(void *ptr);
384384
385385#define rb_setjmp (env ) RUBY_SETJMP(env)
386386#define rb_jmp_buf rb_jmpbuf_t
387- #undef rb_data_object_wrap
388387
389388#if !defined(MAP_ANONYMOUS ) && defined(MAP_ANON )
390389#define MAP_ANONYMOUS MAP_ANON
@@ -1059,36 +1058,13 @@ rb_data_object_check(VALUE klass)
10591058 }
10601059}
10611060
1062- VALUE
1063- rb_data_object_wrap (VALUE klass , void * datap , RUBY_DATA_FUNC dmark , RUBY_DATA_FUNC dfree )
1064- {
1065- RUBY_ASSERT_ALWAYS (dfree != (RUBY_DATA_FUNC )1 );
1066- if (klass ) rb_data_object_check (klass );
1067- VALUE obj = newobj_of (GET_RACTOR (), klass , T_DATA , ROOT_SHAPE_ID , !dmark , sizeof (struct RTypedData ));
1068-
1069- struct RData * data = (struct RData * )obj ;
1070- data -> dmark = dmark ;
1071- data -> dfree = dfree ;
1072- data -> data = datap ;
1073-
1074- return obj ;
1075- }
1076-
1077- VALUE
1078- rb_data_object_zalloc (VALUE klass , size_t size , RUBY_DATA_FUNC dmark , RUBY_DATA_FUNC dfree )
1079- {
1080- VALUE obj = rb_data_object_wrap (klass , 0 , dmark , dfree );
1081- DATA_PTR (obj ) = xcalloc (1 , size );
1082- return obj ;
1083- }
1084-
10851061static VALUE
10861062typed_data_alloc (VALUE klass , VALUE typed_flag , void * datap , const rb_data_type_t * type , size_t size )
10871063{
10881064 RBIMPL_NONNULL_ARG (type );
10891065 if (klass ) rb_data_object_check (klass );
10901066 bool wb_protected = (type -> flags & RUBY_FL_WB_PROTECTED ) || !type -> function .dmark ;
1091- VALUE obj = newobj_of (GET_RACTOR (), klass , T_DATA | RUBY_TYPED_FL_IS_TYPED_DATA , ROOT_SHAPE_ID , wb_protected , size );
1067+ VALUE obj = newobj_of (GET_RACTOR (), klass , T_DATA , ROOT_SHAPE_ID , wb_protected , size );
10921068
10931069 struct RTypedData * data = (struct RTypedData * )obj ;
10941070 data -> fields_obj = 0 ;
@@ -1133,19 +1109,17 @@ static size_t
11331109rb_objspace_data_type_memsize (VALUE obj )
11341110{
11351111 size_t size = 0 ;
1136- if (RTYPEDDATA_P (obj )) {
1137- const rb_data_type_t * type = RTYPEDDATA_TYPE (obj );
1138- const void * ptr = RTYPEDDATA_GET_DATA (obj );
1112+ const rb_data_type_t * type = RTYPEDDATA_TYPE (obj );
1113+ const void * ptr = RTYPEDDATA_GET_DATA (obj );
11391114
1140- if (RTYPEDDATA_TYPE (obj )-> flags & RUBY_TYPED_EMBEDDABLE && !RTYPEDDATA_EMBEDDED_P (obj )) {
1115+ if (RTYPEDDATA_TYPE (obj )-> flags & RUBY_TYPED_EMBEDDABLE && !RTYPEDDATA_EMBEDDED_P (obj )) {
11411116#ifdef HAVE_MALLOC_USABLE_SIZE
1142- size += malloc_usable_size ((void * )ptr );
1117+ size += malloc_usable_size ((void * )ptr );
11431118#endif
1144- }
1119+ }
11451120
1146- if (ptr && type -> function .dsize ) {
1147- size += type -> function .dsize (ptr );
1148- }
1121+ if (ptr && type -> function .dsize ) {
1122+ size += type -> function .dsize (ptr );
11491123 }
11501124
11511125 return size ;
@@ -1154,12 +1128,7 @@ rb_objspace_data_type_memsize(VALUE obj)
11541128const char *
11551129rb_objspace_data_type_name (VALUE obj )
11561130{
1157- if (RTYPEDDATA_P (obj )) {
1158- return RTYPEDDATA_TYPE (obj )-> wrap_struct_name ;
1159- }
1160- else {
1161- return 0 ;
1162- }
1131+ return RTYPEDDATA_TYPE (obj )-> wrap_struct_name ;
11631132}
11641133
11651134static void
@@ -1178,22 +1147,17 @@ make_io_zombie(void *objspace, VALUE obj)
11781147static bool
11791148rb_data_free (void * objspace , VALUE obj )
11801149{
1181- void * data = RTYPEDDATA_P ( obj ) ? RTYPEDDATA_GET_DATA ( obj ) : DATA_PTR (obj );
1150+ void * data = RTYPEDDATA_GET_DATA (obj );
11821151 if (data ) {
11831152 int free_immediately = false;
11841153 void (* dfree )(void * );
11851154
1186- if (RTYPEDDATA_P (obj )) {
1187- free_immediately = (RTYPEDDATA_TYPE (obj )-> flags & RUBY_TYPED_FREE_IMMEDIATELY ) != 0 ;
1188- dfree = RTYPEDDATA_TYPE (obj )-> function .dfree ;
1189- }
1190- else {
1191- dfree = RDATA (obj )-> dfree ;
1192- }
1155+ free_immediately = (RTYPEDDATA_TYPE (obj )-> flags & RUBY_TYPED_FREE_IMMEDIATELY ) != 0 ;
1156+ dfree = RTYPEDDATA_TYPE (obj )-> function .dfree ;
11931157
11941158 if (dfree ) {
11951159 if (dfree == RUBY_DEFAULT_FREE ) {
1196- if (!RTYPEDDATA_P ( obj ) || ! RTYPEDDATA_EMBEDDED_P (obj )) {
1160+ if (!RTYPEDDATA_EMBEDDED_P (obj )) {
11971161 xfree (data );
11981162 RB_DEBUG_COUNTER_INC (obj_data_xfree );
11991163 }
@@ -3207,25 +3171,20 @@ rb_gc_mark_children(void *objspace, VALUE obj)
32073171 break ;
32083172
32093173 case T_DATA : {
3210- bool typed_data = RTYPEDDATA_P (obj );
3211- void * const ptr = typed_data ? RTYPEDDATA_GET_DATA (obj ) : DATA_PTR (obj );
3174+ void * const ptr = RTYPEDDATA_GET_DATA (obj );
32123175
3213- if (typed_data ) {
3214- gc_mark_internal (RTYPEDDATA (obj )-> fields_obj );
3215- }
3176+ gc_mark_internal (RTYPEDDATA (obj )-> fields_obj );
32163177
32173178 if (ptr ) {
3218- if (typed_data && gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
3179+ if (gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
32193180 size_t * offset_list = TYPED_DATA_REFS_OFFSET_LIST (obj );
32203181
32213182 for (size_t offset = * offset_list ; offset != RUBY_REF_END ; offset = * offset_list ++ ) {
32223183 gc_mark_internal (* (VALUE * )((char * )ptr + offset ));
32233184 }
32243185 }
32253186 else {
3226- RUBY_DATA_FUNC mark_func = typed_data ?
3227- RTYPEDDATA_TYPE (obj )-> function .dmark :
3228- RDATA (obj )-> dmark ;
3187+ RUBY_DATA_FUNC mark_func = RTYPEDDATA_TYPE (obj )-> function .dmark ;
32293188 if (mark_func ) (* mark_func )(ptr );
32303189 }
32313190 }
@@ -4194,23 +4153,20 @@ rb_gc_update_object_references(void *objspace, VALUE obj)
41944153 case T_DATA :
41954154 /* Call the compaction callback, if it exists */
41964155 {
4197- bool typed_data = RTYPEDDATA_P (obj );
4198- void * const ptr = typed_data ? RTYPEDDATA_GET_DATA (obj ) : DATA_PTR (obj );
4156+ void * const ptr = RTYPEDDATA_GET_DATA (obj );
41994157
4200- if (typed_data ) {
4201- UPDATE_IF_MOVED (objspace , RTYPEDDATA (obj )-> fields_obj );
4202- }
4158+ UPDATE_IF_MOVED (objspace , RTYPEDDATA (obj )-> fields_obj );
42034159
42044160 if (ptr ) {
4205- if (typed_data && gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
4161+ if (gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
42064162 size_t * offset_list = TYPED_DATA_REFS_OFFSET_LIST (obj );
42074163
42084164 for (size_t offset = * offset_list ; offset != RUBY_REF_END ; offset = * offset_list ++ ) {
42094165 VALUE * ref = (VALUE * )((char * )ptr + offset );
42104166 * ref = gc_location_internal (objspace , * ref );
42114167 }
42124168 }
4213- else if ( typed_data ) {
4169+ else {
42144170 RUBY_DATA_FUNC compact_func = RTYPEDDATA_TYPE (obj )-> function .dcompact ;
42154171 if (compact_func ) (* compact_func )(ptr );
42164172 }
0 commit comments