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 = {
|
static const rb_data_type_t rb_process_status_type = {
|
||||||
.wrap_struct_name = "Process::Status",
|
.wrap_struct_name = "Process::Status",
|
||||||
.function = {
|
.function = {
|
||||||
|
.dmark = NULL,
|
||||||
.dfree = RUBY_DEFAULT_FREE,
|
.dfree = RUBY_DEFAULT_FREE,
|
||||||
|
.dsize = NULL,
|
||||||
},
|
},
|
||||||
.data = NULL,
|
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
|
||||||
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
rb_process_status_allocate(VALUE klass)
|
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);
|
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)
|
rb_process_status_new(rb_pid_t pid, int status, int error)
|
||||||
{
|
{
|
||||||
VALUE last_status = rb_process_status_allocate(rb_cProcessStatus);
|
VALUE last_status = rb_process_status_allocate(rb_cProcessStatus);
|
||||||
|
struct rb_process_status *data = RTYPEDDATA_GET_DATA(last_status);
|
||||||
struct rb_process_status *data = RTYPEDDATA_DATA(last_status);
|
|
||||||
data->pid = pid;
|
data->pid = pid;
|
||||||
data->status = status;
|
data->status = status;
|
||||||
data->error = error;
|
data->error = error;
|
||||||
@ -660,7 +659,8 @@ static VALUE
|
|||||||
process_status_dump(VALUE status)
|
process_status_dump(VALUE status)
|
||||||
{
|
{
|
||||||
VALUE dump = rb_class_new_instance(0, 0, rb_cObject);
|
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) {
|
if (data->pid) {
|
||||||
rb_ivar_set(dump, id_status, INT2NUM(data->status));
|
rb_ivar_set(dump, id_status, INT2NUM(data->status));
|
||||||
rb_ivar_set(dump, id_pid, PIDT2NUM(data->pid));
|
rb_ivar_set(dump, id_pid, PIDT2NUM(data->pid));
|
||||||
@ -698,16 +698,18 @@ rb_last_status_clear(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static rb_pid_t
|
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;
|
return data->pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
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;
|
return data->status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user