Skip to content

Commit e0aa034

Browse files
committed
Deprecated struct RData by struct RTypedData
For the backward compatibility for some wrapper generator gems, keep only `RData` definition.
1 parent 71226f2 commit e0aa034

File tree

6 files changed

+52
-372
lines changed

6 files changed

+52
-372
lines changed

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
@@ -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-
10881064
static VALUE
10891065
typed_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
11361112
rb_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)
11571131
const char *
11581132
rb_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

11681137
void
@@ -1250,22 +1219,17 @@ make_io_zombie(void *objspace, VALUE obj)
12501219
static bool
12511220
rb_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

Comments
 (0)