@@ -344,7 +344,7 @@ rb_gc_shutdown_call_finalizer_p(VALUE obj)
344344{
345345 switch (BUILTIN_TYPE (obj )) {
346346 case T_DATA :
347- if (!ruby_free_at_exit_p () && (!DATA_PTR (obj ) || !RDATA (obj )-> dfree )) return false;
347+ if (!ruby_free_at_exit_p () && (!DATA_PTR (obj ) || !RDATA (obj )-> type )) return false;
348348 if (rb_obj_is_thread (obj )) return false;
349349 if (rb_obj_is_mutex (obj )) return false;
350350 if (rb_obj_is_fiber (obj )) return false;
@@ -392,7 +392,6 @@ void rb_vm_update_references(void *ptr);
392392
393393#define rb_setjmp (env ) RUBY_SETJMP(env)
394394#define rb_jmp_buf rb_jmpbuf_t
395- #undef rb_data_object_wrap
396395
397396#if !defined(MAP_ANONYMOUS ) && defined(MAP_ANON )
398397#define MAP_ANONYMOUS MAP_ANON
@@ -1079,31 +1078,6 @@ rb_data_object_check(VALUE klass)
10791078 }
10801079}
10811080
1082- VALUE
1083- rb_data_object_wrap (VALUE klass , void * datap , RUBY_DATA_FUNC dmark , RUBY_DATA_FUNC dfree )
1084- {
1085- RUBY_ASSERT_ALWAYS (dfree != (RUBY_DATA_FUNC )1 );
1086- if (klass ) rb_data_object_check (klass );
1087- VALUE obj = newobj_of (GET_RACTOR (), klass , T_DATA , ROOT_SHAPE_ID , !dmark , sizeof (struct RTypedData ));
1088-
1089- rb_gc_register_pinning_obj (obj );
1090-
1091- struct RData * data = (struct RData * )obj ;
1092- data -> dmark = dmark ;
1093- data -> dfree = dfree ;
1094- data -> data = datap ;
1095-
1096- return obj ;
1097- }
1098-
1099- VALUE
1100- rb_data_object_zalloc (VALUE klass , size_t size , RUBY_DATA_FUNC dmark , RUBY_DATA_FUNC dfree )
1101- {
1102- VALUE obj = rb_data_object_wrap (klass , 0 , dmark , dfree );
1103- DATA_PTR (obj ) = xcalloc (1 , size );
1104- return obj ;
1105- }
1106-
11071081#define RTYPEDDATA_EMBEDDED_P rbimpl_typeddata_embedded_p
11081082#define RB_DATA_TYPE_EMBEDDABLE_P (type ) ((type)->flags & RUBY_TYPED_EMBEDDABLE)
11091083#define RTYPEDDATA_EMBEDDABLE_P (obj ) RB_DATA_TYPE_EMBEDDABLE_P(RTYPEDDATA_TYPE(obj))
@@ -1114,7 +1088,7 @@ typed_data_alloc(VALUE klass, VALUE typed_flag, void *datap, const rb_data_type_
11141088 RBIMPL_NONNULL_ARG (type );
11151089 if (klass ) rb_data_object_check (klass );
11161090 bool wb_protected = (type -> flags & RUBY_FL_WB_PROTECTED ) || !type -> function .dmark ;
1117- VALUE obj = newobj_of (GET_RACTOR (), klass , T_DATA | RUBY_TYPED_FL_IS_TYPED_DATA , ROOT_SHAPE_ID , wb_protected , size );
1091+ VALUE obj = newobj_of (GET_RACTOR (), klass , T_DATA , ROOT_SHAPE_ID , wb_protected , size );
11181092
11191093 rb_gc_register_pinning_obj (obj );
11201094
@@ -1161,19 +1135,17 @@ static size_t
11611135rb_objspace_data_type_memsize (VALUE obj )
11621136{
11631137 size_t size = 0 ;
1164- if (RTYPEDDATA_P (obj )) {
1165- const rb_data_type_t * type = RTYPEDDATA_TYPE (obj );
1166- const void * ptr = RTYPEDDATA_GET_DATA (obj );
1138+ const rb_data_type_t * type = RTYPEDDATA_TYPE (obj );
1139+ const void * ptr = RTYPEDDATA_GET_DATA (obj );
11671140
1168- if (RTYPEDDATA_EMBEDDABLE_P (obj ) && !RTYPEDDATA_EMBEDDED_P (obj )) {
1141+ if (RTYPEDDATA_EMBEDDABLE_P (obj ) && !RTYPEDDATA_EMBEDDED_P (obj )) {
11691142#ifdef HAVE_MALLOC_USABLE_SIZE
1170- size += malloc_usable_size ((void * )ptr );
1143+ size += malloc_usable_size ((void * )ptr );
11711144#endif
1172- }
1145+ }
11731146
1174- if (ptr && type -> function .dsize ) {
1175- size += type -> function .dsize (ptr );
1176- }
1147+ if (ptr && type -> function .dsize ) {
1148+ size += type -> function .dsize (ptr );
11771149 }
11781150
11791151 return size ;
@@ -1182,12 +1154,7 @@ rb_objspace_data_type_memsize(VALUE obj)
11821154const char *
11831155rb_objspace_data_type_name (VALUE obj )
11841156{
1185- if (RTYPEDDATA_P (obj )) {
1186- return RTYPEDDATA_TYPE (obj )-> wrap_struct_name ;
1187- }
1188- else {
1189- return 0 ;
1190- }
1157+ return RTYPEDDATA_TYPE (obj )-> wrap_struct_name ;
11911158}
11921159
11931160void
@@ -1258,22 +1225,17 @@ make_io_zombie(void *objspace, VALUE obj)
12581225static bool
12591226rb_data_free (void * objspace , VALUE obj )
12601227{
1261- void * data = RTYPEDDATA_P ( obj ) ? RTYPEDDATA_GET_DATA ( obj ) : DATA_PTR (obj );
1228+ void * data = RTYPEDDATA_GET_DATA (obj );
12621229 if (data ) {
12631230 int free_immediately = false;
12641231 void (* dfree )(void * );
12651232
1266- if (RTYPEDDATA_P (obj )) {
1267- free_immediately = (RTYPEDDATA_TYPE (obj )-> flags & RUBY_TYPED_FREE_IMMEDIATELY ) != 0 ;
1268- dfree = RTYPEDDATA_TYPE (obj )-> function .dfree ;
1269- }
1270- else {
1271- dfree = RDATA (obj )-> dfree ;
1272- }
1233+ free_immediately = (RTYPEDDATA_TYPE (obj )-> flags & RUBY_TYPED_FREE_IMMEDIATELY ) != 0 ;
1234+ dfree = RTYPEDDATA_TYPE (obj )-> function .dfree ;
12731235
12741236 if (dfree ) {
12751237 if (dfree == RUBY_DEFAULT_FREE ) {
1276- if (!RTYPEDDATA_P ( obj ) || ! RTYPEDDATA_EMBEDDED_P (obj )) {
1238+ if (!RTYPEDDATA_EMBEDDED_P (obj )) {
12771239 xfree (data );
12781240 RB_DEBUG_COUNTER_INC (obj_data_xfree );
12791241 }
@@ -3272,25 +3234,20 @@ rb_gc_mark_children(void *objspace, VALUE obj)
32723234 break ;
32733235
32743236 case T_DATA : {
3275- bool typed_data = RTYPEDDATA_P (obj );
3276- void * const ptr = typed_data ? RTYPEDDATA_GET_DATA (obj ) : DATA_PTR (obj );
3237+ void * const ptr = RTYPEDDATA_GET_DATA (obj );
32773238
3278- if (typed_data ) {
3279- gc_mark_internal (RTYPEDDATA (obj )-> fields_obj );
3280- }
3239+ gc_mark_internal (RTYPEDDATA (obj )-> fields_obj );
32813240
32823241 if (ptr ) {
3283- if (typed_data && gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
3242+ if (gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
32843243 size_t * offset_list = TYPED_DATA_REFS_OFFSET_LIST (obj );
32853244
32863245 for (size_t offset = * offset_list ; offset != RUBY_REF_END ; offset = * offset_list ++ ) {
32873246 gc_mark_internal (* (VALUE * )((char * )ptr + offset ));
32883247 }
32893248 }
32903249 else {
3291- RUBY_DATA_FUNC mark_func = typed_data ?
3292- RTYPEDDATA_TYPE (obj )-> function .dmark :
3293- RDATA (obj )-> dmark ;
3250+ RUBY_DATA_FUNC mark_func = RTYPEDDATA_TYPE (obj )-> function .dmark ;
32943251 if (mark_func ) (* mark_func )(ptr );
32953252 }
32963253 }
@@ -4259,23 +4216,20 @@ rb_gc_update_object_references(void *objspace, VALUE obj)
42594216 case T_DATA :
42604217 /* Call the compaction callback, if it exists */
42614218 {
4262- bool typed_data = RTYPEDDATA_P (obj );
4263- void * const ptr = typed_data ? RTYPEDDATA_GET_DATA (obj ) : DATA_PTR (obj );
4219+ void * const ptr = RTYPEDDATA_GET_DATA (obj );
42644220
4265- if (typed_data ) {
4266- UPDATE_IF_MOVED (objspace , RTYPEDDATA (obj )-> fields_obj );
4267- }
4221+ UPDATE_IF_MOVED (objspace , RTYPEDDATA (obj )-> fields_obj );
42684222
42694223 if (ptr ) {
4270- if (typed_data && gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
4224+ if (gc_declarative_marking_p (RTYPEDDATA_TYPE (obj ))) {
42714225 size_t * offset_list = TYPED_DATA_REFS_OFFSET_LIST (obj );
42724226
42734227 for (size_t offset = * offset_list ; offset != RUBY_REF_END ; offset = * offset_list ++ ) {
42744228 VALUE * ref = (VALUE * )((char * )ptr + offset );
42754229 * ref = gc_location_internal (objspace , * ref );
42764230 }
42774231 }
4278- else if ( typed_data ) {
4232+ else {
42794233 RUBY_DATA_FUNC compact_func = RTYPEDDATA_TYPE (obj )-> function .dcompact ;
42804234 if (compact_func ) (* compact_func )(ptr );
42814235 }
0 commit comments