Skip to content

Commit 776d17b

Browse files
committed
Deprecated struct RData by struct RTypedData
For the backward compatibility for some wrapper generator gems, keep only `RData` definition.
1 parent 015b7ca commit 776d17b

File tree

6 files changed

+55
-367
lines changed

6 files changed

+55
-367
lines changed

gc.c

Lines changed: 22 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -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
11611135
rb_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)
11821154
const char *
11831155
rb_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

11931160
void
@@ -1258,22 +1225,17 @@ make_io_zombie(void *objspace, VALUE obj)
12581225
static bool
12591226
rb_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

Comments
 (0)