Skip to content

Commit eae7300

Browse files
committed
Typed data check for core data types
1 parent bd6fa7f commit eae7300

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

proc.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ proc_memsize(const void *ptr)
9898
return sizeof(rb_proc_t);
9999
}
100100

101-
static const rb_data_type_t proc_data_type = {
101+
const rb_data_type_t ruby_proc_data_type = {
102102
"proc",
103103
{
104104
proc_mark_and_move,
@@ -109,6 +109,8 @@ static const rb_data_type_t proc_data_type = {
109109
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
110110
};
111111

112+
#define proc_data_type ruby_proc_data_type
113+
112114
VALUE
113115
rb_proc_alloc(VALUE klass)
114116
{

vm.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3525,12 +3525,13 @@ vm_memsize(const void *ptr)
35253525
// struct rb_objspace *objspace;
35263526
}
35273527

3528-
static const rb_data_type_t vm_data_type = {
3528+
const rb_data_type_t ruby_vm_data_type = {
35293529
"VM",
35303530
{0, 0, vm_memsize,},
35313531
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
35323532
};
35333533

3534+
#define vm_data_type ruby_vm_data_type
35343535

35353536
static VALUE
35363537
vm_default_params(void)

vm_core.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -324,11 +324,10 @@ struct rb_calling_info {
324324
struct rb_execution_context_struct;
325325

326326
#if 1
327-
#define CoreDataFromValue(obj, type) (type*)DATA_PTR(obj)
327+
#define GetCoreDataFromValue(obj, type, data_type, ptr) ((ptr) = (type*)RTYPEDDATA_GET_DATA(obj))
328328
#else
329-
#define CoreDataFromValue(obj, type) (type*)rb_data_object_get(obj)
329+
#define GetCoreDataFromValue(obj, type, data_type, ptr) TypedData_Get_Struct(obj, type, data_type, ptr)
330330
#endif
331-
#define GetCoreDataFromValue(obj, type, ptr) ((ptr) = CoreDataFromValue((obj), type))
332331

333332
typedef struct rb_iseq_location_struct {
334333
VALUE pathobj; /* String (path) or Array [path, realpath]. Frozen. */
@@ -635,8 +634,10 @@ enum ruby_special_exceptions {
635634
ruby_special_error_count
636635
};
637636

637+
extern const rb_data_type_t ruby_vm_data_type;
638+
638639
#define GetVMPtr(obj, ptr) \
639-
GetCoreDataFromValue((obj), rb_vm_t, (ptr))
640+
GetCoreDataFromValue((obj), rb_vm_t, &ruby_vm_data_type, (ptr))
640641

641642
struct rb_vm_struct;
642643
typedef void rb_vm_at_exit_func(struct rb_vm_struct*);
@@ -1282,8 +1283,10 @@ RUBY_EXTERN VALUE rb_mRubyVMFrozenCore;
12821283
RUBY_EXTERN VALUE rb_block_param_proxy;
12831284
RUBY_SYMBOL_EXPORT_END
12841285

1286+
extern const rb_data_type_t ruby_proc_data_type;
1287+
12851288
#define GetProcPtr(obj, ptr) \
1286-
GetCoreDataFromValue((obj), rb_proc_t, (ptr))
1289+
GetCoreDataFromValue((obj), rb_proc_t, &ruby_proc_data_type, (ptr))
12871290

12881291
typedef struct {
12891292
const struct rb_block block;
@@ -1309,7 +1312,7 @@ typedef struct {
13091312
extern const rb_data_type_t ruby_binding_data_type;
13101313

13111314
#define GetBindingPtr(obj, ptr) \
1312-
GetCoreDataFromValue((obj), rb_binding_t, (ptr))
1315+
GetCoreDataFromValue((obj), rb_binding_t, &ruby_binding_data_type, (ptr))
13131316

13141317
typedef struct {
13151318
const struct rb_block block;

0 commit comments

Comments
 (0)