Skip to content

Commit 68be4af

Browse files
committed
Remove struct RData deprecated by struct RTypedData
1 parent 6336bc3 commit 68be4af

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
}
@@ -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

Comments
 (0)