@@ -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 }
@@ -3197,25 +3161,20 @@ rb_gc_mark_children(void *objspace, VALUE obj)
31973161 break ;
31983162
31993163 case T_DATA : {
3200- bool typed_data = RTYPEDDATA_P (obj );
3201- void * const ptr = typed_data ? RTYPEDDATA_GET_DATA (obj ) : DATA_PTR (obj );
3164+ void * const ptr = RTYPEDDATA_GET_DATA (obj );
32023165
3203- if (typed_data ) {
3204- gc_mark_internal (RTYPEDDATA (obj )-> fields_obj );
3205- }
3166+ gc_mark_internal (RTYPEDDATA (obj )-> fields_obj );
32063167
32073168 if (ptr ) {
3208- if (typed_data && gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
3169+ if (gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
32093170 size_t * offset_list = TYPED_DATA_REFS_OFFSET_LIST (obj );
32103171
32113172 for (size_t offset = * offset_list ; offset != RUBY_REF_END ; offset = * offset_list ++ ) {
32123173 gc_mark_internal (* (VALUE * )((char * )ptr + offset ));
32133174 }
32143175 }
32153176 else {
3216- RUBY_DATA_FUNC mark_func = typed_data ?
3217- RTYPEDDATA_TYPE (obj )-> function .dmark :
3218- RDATA (obj )-> dmark ;
3177+ RUBY_DATA_FUNC mark_func = RTYPEDDATA_TYPE (obj )-> function .dmark ;
32193178 if (mark_func ) (* mark_func )(ptr );
32203179 }
32213180 }
@@ -4184,23 +4143,20 @@ rb_gc_update_object_references(void *objspace, VALUE obj)
41844143 case T_DATA :
41854144 /* Call the compaction callback, if it exists */
41864145 {
4187- bool typed_data = RTYPEDDATA_P (obj );
4188- void * const ptr = typed_data ? RTYPEDDATA_GET_DATA (obj ) : DATA_PTR (obj );
4146+ void * const ptr = RTYPEDDATA_GET_DATA (obj );
41894147
4190- if (typed_data ) {
4191- UPDATE_IF_MOVED (objspace , RTYPEDDATA (obj )-> fields_obj );
4192- }
4148+ UPDATE_IF_MOVED (objspace , RTYPEDDATA (obj )-> fields_obj );
41934149
41944150 if (ptr ) {
4195- if (typed_data && gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
4151+ if (gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
41964152 size_t * offset_list = TYPED_DATA_REFS_OFFSET_LIST (obj );
41974153
41984154 for (size_t offset = * offset_list ; offset != RUBY_REF_END ; offset = * offset_list ++ ) {
41994155 VALUE * ref = (VALUE * )((char * )ptr + offset );
42004156 * ref = gc_location_internal (objspace , * ref );
42014157 }
42024158 }
4203- else if ( typed_data ) {
4159+ else {
42044160 RUBY_DATA_FUNC compact_func = RTYPEDDATA_TYPE (obj )-> function .dcompact ;
42054161 if (compact_func ) (* compact_func )(ptr );
42064162 }
0 commit comments