Make Process::Status embedded
These are not very common, but they're very easy to convert.
This commit is contained in:
parent
95d4a52b3a
commit
751d4b9913
24
process.c
24
process.c
@ -594,17 +594,17 @@ struct rb_process_status {
|
||||
static const rb_data_type_t rb_process_status_type = {
|
||||
.wrap_struct_name = "Process::Status",
|
||||
.function = {
|
||||
.dmark = NULL,
|
||||
.dfree = RUBY_DEFAULT_FREE,
|
||||
.dsize = NULL,
|
||||
},
|
||||
.data = NULL,
|
||||
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
||||
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
|
||||
};
|
||||
|
||||
static VALUE
|
||||
rb_process_status_allocate(VALUE klass)
|
||||
{
|
||||
struct rb_process_status *data = NULL;
|
||||
|
||||
struct rb_process_status *data;
|
||||
return TypedData_Make_Struct(klass, struct rb_process_status, &rb_process_status_type, data);
|
||||
}
|
||||
|
||||
@ -646,8 +646,7 @@ VALUE
|
||||
rb_process_status_new(rb_pid_t pid, int status, int error)
|
||||
{
|
||||
VALUE last_status = rb_process_status_allocate(rb_cProcessStatus);
|
||||
|
||||
struct rb_process_status *data = RTYPEDDATA_DATA(last_status);
|
||||
struct rb_process_status *data = RTYPEDDATA_GET_DATA(last_status);
|
||||
data->pid = pid;
|
||||
data->status = status;
|
||||
data->error = error;
|
||||
@ -660,7 +659,8 @@ static VALUE
|
||||
process_status_dump(VALUE status)
|
||||
{
|
||||
VALUE dump = rb_class_new_instance(0, 0, rb_cObject);
|
||||
struct rb_process_status *data = RTYPEDDATA_DATA(status);
|
||||
struct rb_process_status *data;
|
||||
TypedData_Get_Struct(status, struct rb_process_status, &rb_process_status_type, data);
|
||||
if (data->pid) {
|
||||
rb_ivar_set(dump, id_status, INT2NUM(data->status));
|
||||
rb_ivar_set(dump, id_pid, PIDT2NUM(data->pid));
|
||||
@ -698,16 +698,18 @@ rb_last_status_clear(void)
|
||||
}
|
||||
|
||||
static rb_pid_t
|
||||
pst_pid(VALUE pst)
|
||||
pst_pid(VALUE status)
|
||||
{
|
||||
struct rb_process_status *data = RTYPEDDATA_DATA(pst);
|
||||
struct rb_process_status *data;
|
||||
TypedData_Get_Struct(status, struct rb_process_status, &rb_process_status_type, data);
|
||||
return data->pid;
|
||||
}
|
||||
|
||||
static int
|
||||
pst_status(VALUE pst)
|
||||
pst_status(VALUE status)
|
||||
{
|
||||
struct rb_process_status *data = RTYPEDDATA_DATA(pst);
|
||||
struct rb_process_status *data;
|
||||
TypedData_Get_Struct(status, struct rb_process_status, &rb_process_status_type, data);
|
||||
return data->status;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user