Skip to content

Commit 9e4ecbf

Browse files
committed
Remove struct RData deprecated by struct RTypedData
1 parent 474faee commit 9e4ecbf

5 files changed

Lines changed: 50 additions & 381 deletions

File tree

gc.c

Lines changed: 22 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
10851061
static VALUE
10861062
typed_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
11331109
rb_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)
11541128
const char *
11551129
rb_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

11651134
static void
@@ -1178,22 +1147,17 @@ make_io_zombie(void *objspace, VALUE obj)
11781147
static bool
11791148
rb_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

Comments
 (0)