@@ -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
@@ -1062,36 +1061,13 @@ rb_data_object_check(VALUE klass)
10621061 }
10631062}
10641063
1065- VALUE
1066- rb_data_object_wrap (VALUE klass , void * datap , RUBY_DATA_FUNC dmark , RUBY_DATA_FUNC dfree )
1067- {
1068- RUBY_ASSERT_ALWAYS (dfree != (RUBY_DATA_FUNC )1 );
1069- if (klass ) rb_data_object_check (klass );
1070- VALUE obj = newobj_of (GET_RACTOR (), klass , T_DATA , ROOT_SHAPE_ID , !dmark , sizeof (struct RTypedData ));
1071-
1072- struct RData * data = (struct RData * )obj ;
1073- data -> dmark = dmark ;
1074- data -> dfree = dfree ;
1075- data -> data = datap ;
1076-
1077- return obj ;
1078- }
1079-
1080- VALUE
1081- rb_data_object_zalloc (VALUE klass , size_t size , RUBY_DATA_FUNC dmark , RUBY_DATA_FUNC dfree )
1082- {
1083- VALUE obj = rb_data_object_wrap (klass , 0 , dmark , dfree );
1084- DATA_PTR (obj ) = xcalloc (1 , size );
1085- return obj ;
1086- }
1087-
10881064static VALUE
10891065typed_data_alloc (VALUE klass , VALUE typed_flag , void * datap , const rb_data_type_t * type , size_t size )
10901066{
10911067 RBIMPL_NONNULL_ARG (type );
10921068 if (klass ) rb_data_object_check (klass );
10931069 bool wb_protected = (type -> flags & RUBY_FL_WB_PROTECTED ) || !type -> function .dmark ;
1094- VALUE obj = newobj_of (GET_RACTOR (), klass , T_DATA | RUBY_TYPED_FL_IS_TYPED_DATA , ROOT_SHAPE_ID , wb_protected , size );
1070+ VALUE obj = newobj_of (GET_RACTOR (), klass , T_DATA , ROOT_SHAPE_ID , wb_protected , size );
10951071
10961072 struct RTypedData * data = (struct RTypedData * )obj ;
10971073 data -> fields_obj = 0 ;
@@ -1136,19 +1112,17 @@ static size_t
11361112rb_objspace_data_type_memsize (VALUE obj )
11371113{
11381114 size_t size = 0 ;
1139- if (RTYPEDDATA_P (obj )) {
1140- const rb_data_type_t * type = RTYPEDDATA_TYPE (obj );
1141- const void * ptr = RTYPEDDATA_GET_DATA (obj );
1115+ const rb_data_type_t * type = RTYPEDDATA_TYPE (obj );
1116+ const void * ptr = RTYPEDDATA_GET_DATA (obj );
11421117
1143- if (RTYPEDDATA_TYPE (obj )-> flags & RUBY_TYPED_EMBEDDABLE && !RTYPEDDATA_EMBEDDED_P (obj )) {
1118+ if (RTYPEDDATA_TYPE (obj )-> flags & RUBY_TYPED_EMBEDDABLE && !RTYPEDDATA_EMBEDDED_P (obj )) {
11441119#ifdef HAVE_MALLOC_USABLE_SIZE
1145- size += malloc_usable_size ((void * )ptr );
1120+ size += malloc_usable_size ((void * )ptr );
11461121#endif
1147- }
1122+ }
11481123
1149- if (ptr && type -> function .dsize ) {
1150- size += type -> function .dsize (ptr );
1151- }
1124+ if (ptr && type -> function .dsize ) {
1125+ size += type -> function .dsize (ptr );
11521126 }
11531127
11541128 return size ;
@@ -1157,12 +1131,7 @@ rb_objspace_data_type_memsize(VALUE obj)
11571131const char *
11581132rb_objspace_data_type_name (VALUE obj )
11591133{
1160- if (RTYPEDDATA_P (obj )) {
1161- return RTYPEDDATA_TYPE (obj )-> wrap_struct_name ;
1162- }
1163- else {
1164- return 0 ;
1165- }
1134+ return RTYPEDDATA_TYPE (obj )-> wrap_struct_name ;
11661135}
11671136
11681137void
@@ -1250,22 +1219,17 @@ make_io_zombie(void *objspace, VALUE obj)
12501219static bool
12511220rb_data_free (void * objspace , VALUE obj )
12521221{
1253- void * data = RTYPEDDATA_P ( obj ) ? RTYPEDDATA_GET_DATA ( obj ) : DATA_PTR (obj );
1222+ void * data = RTYPEDDATA_GET_DATA (obj );
12541223 if (data ) {
12551224 int free_immediately = false;
12561225 void (* dfree )(void * );
12571226
1258- if (RTYPEDDATA_P (obj )) {
1259- free_immediately = (RTYPEDDATA_TYPE (obj )-> flags & RUBY_TYPED_FREE_IMMEDIATELY ) != 0 ;
1260- dfree = RTYPEDDATA_TYPE (obj )-> function .dfree ;
1261- }
1262- else {
1263- dfree = RDATA (obj )-> dfree ;
1264- }
1227+ free_immediately = (RTYPEDDATA_TYPE (obj )-> flags & RUBY_TYPED_FREE_IMMEDIATELY ) != 0 ;
1228+ dfree = RTYPEDDATA_TYPE (obj )-> function .dfree ;
12651229
12661230 if (dfree ) {
12671231 if (dfree == RUBY_DEFAULT_FREE ) {
1268- if (!RTYPEDDATA_P ( obj ) || ! RTYPEDDATA_EMBEDDED_P (obj )) {
1232+ if (!RTYPEDDATA_EMBEDDED_P (obj )) {
12691233 xfree (data );
12701234 RB_DEBUG_COUNTER_INC (obj_data_xfree );
12711235 }
@@ -3256,25 +3220,20 @@ rb_gc_mark_children(void *objspace, VALUE obj)
32563220 break ;
32573221
32583222 case T_DATA : {
3259- bool typed_data = RTYPEDDATA_P (obj );
3260- void * const ptr = typed_data ? RTYPEDDATA_GET_DATA (obj ) : DATA_PTR (obj );
3223+ void * const ptr = RTYPEDDATA_GET_DATA (obj );
32613224
3262- if (typed_data ) {
3263- gc_mark_internal (RTYPEDDATA (obj )-> fields_obj );
3264- }
3225+ gc_mark_internal (RTYPEDDATA (obj )-> fields_obj );
32653226
32663227 if (ptr ) {
3267- if (typed_data && gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
3228+ if (gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
32683229 size_t * offset_list = TYPED_DATA_REFS_OFFSET_LIST (obj );
32693230
32703231 for (size_t offset = * offset_list ; offset != RUBY_REF_END ; offset = * offset_list ++ ) {
32713232 gc_mark_internal (* (VALUE * )((char * )ptr + offset ));
32723233 }
32733234 }
32743235 else {
3275- RUBY_DATA_FUNC mark_func = typed_data ?
3276- RTYPEDDATA_TYPE (obj )-> function .dmark :
3277- RDATA (obj )-> dmark ;
3236+ RUBY_DATA_FUNC mark_func = RTYPEDDATA_TYPE (obj )-> function .dmark ;
32783237 if (mark_func ) (* mark_func )(ptr );
32793238 }
32803239 }
@@ -4243,23 +4202,20 @@ rb_gc_update_object_references(void *objspace, VALUE obj)
42434202 case T_DATA :
42444203 /* Call the compaction callback, if it exists */
42454204 {
4246- bool typed_data = RTYPEDDATA_P (obj );
4247- void * const ptr = typed_data ? RTYPEDDATA_GET_DATA (obj ) : DATA_PTR (obj );
4205+ void * const ptr = RTYPEDDATA_GET_DATA (obj );
42484206
4249- if (typed_data ) {
4250- UPDATE_IF_MOVED (objspace , RTYPEDDATA (obj )-> fields_obj );
4251- }
4207+ UPDATE_IF_MOVED (objspace , RTYPEDDATA (obj )-> fields_obj );
42524208
42534209 if (ptr ) {
4254- if (typed_data && gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
4210+ if (gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
42554211 size_t * offset_list = TYPED_DATA_REFS_OFFSET_LIST (obj );
42564212
42574213 for (size_t offset = * offset_list ; offset != RUBY_REF_END ; offset = * offset_list ++ ) {
42584214 VALUE * ref = (VALUE * )((char * )ptr + offset );
42594215 * ref = gc_location_internal (objspace , * ref );
42604216 }
42614217 }
4262- else if ( typed_data ) {
4218+ else {
42634219 RUBY_DATA_FUNC compact_func = RTYPEDDATA_TYPE (obj )-> function .dcompact ;
42644220 if (compact_func ) (* compact_func )(ptr );
42654221 }
0 commit comments