1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Updated access to Process::Status attributes

pst_pid() no longer returns Qnil even if the receiver is not
initialized.
This commit is contained in:
Nobuyoshi Nakada 2020-12-24 19:47:35 +09:00
parent 9a7647d9eb
commit 81562f943e
No known key found for this signature in database
GPG key ID: 7CD2805BFA3770C6

View file

@ -668,6 +668,20 @@ rb_last_status_clear(void)
GET_THREAD()->last_status = Qnil; GET_THREAD()->last_status = Qnil;
} }
static rb_pid_t
pst_pid(VALUE pst)
{
struct rb_process_status *data = RTYPEDDATA_DATA(pst);
return data->pid;
}
static int
pst_status(VALUE pst)
{
struct rb_process_status *data = RTYPEDDATA_DATA(pst);
return data->status;
}
/* /*
* call-seq: * call-seq:
* stat.to_i -> integer * stat.to_i -> integer
@ -683,12 +697,11 @@ rb_last_status_clear(void)
static VALUE static VALUE
pst_to_i(VALUE self) pst_to_i(VALUE self)
{ {
struct rb_process_status *data = RTYPEDDATA_DATA(self); int status = pst_status(self);
return RB_INT2NUM(status);
return RB_INT2NUM(data->status);
} }
#define PST2INT(st) NUM2INT(pst_to_i(st)) #define PST2INT(st) pst_status(st)
/* /*
* call-seq: * call-seq:
@ -702,11 +715,10 @@ pst_to_i(VALUE self)
*/ */
static VALUE static VALUE
pst_pid(VALUE self) pst_pid_m(VALUE self)
{ {
struct rb_process_status *data = RTYPEDDATA_DATA(self); rb_pid_t pid = pst_pid(self);
return PIDT2NUM(pid);
return PIDT2NUM(data->pid);
} }
static VALUE pst_message_status(VALUE str, int status); static VALUE pst_message_status(VALUE str, int status);
@ -771,7 +783,7 @@ pst_to_s(VALUE st)
int status; int status;
VALUE str; VALUE str;
pid = NUM2PIDT(pst_pid(st)); pid = pst_pid(st);
status = PST2INT(st); status = PST2INT(st);
str = rb_str_buf_new(0); str = rb_str_buf_new(0);
@ -796,13 +808,12 @@ pst_inspect(VALUE st)
{ {
rb_pid_t pid; rb_pid_t pid;
int status; int status;
VALUE vpid, str; VALUE str;
vpid = pst_pid(st); pid = pst_pid(st);
if (NIL_P(vpid)) { if (!pid) {
return rb_sprintf("#<%s: uninitialized>", rb_class2name(CLASS_OF(st))); return rb_sprintf("#<%s: uninitialized>", rb_class2name(CLASS_OF(st)));
} }
pid = NUM2PIDT(vpid);
status = PST2INT(st); status = PST2INT(st);
str = rb_sprintf("#<%s: ", rb_class2name(CLASS_OF(st))); str = rb_sprintf("#<%s: ", rb_class2name(CLASS_OF(st)));
@ -8677,7 +8688,7 @@ InitVM_process(void)
rb_define_method(rb_cProcessStatus, "to_s", pst_to_s, 0); rb_define_method(rb_cProcessStatus, "to_s", pst_to_s, 0);
rb_define_method(rb_cProcessStatus, "inspect", pst_inspect, 0); rb_define_method(rb_cProcessStatus, "inspect", pst_inspect, 0);
rb_define_method(rb_cProcessStatus, "pid", pst_pid, 0); rb_define_method(rb_cProcessStatus, "pid", pst_pid_m, 0);
rb_define_method(rb_cProcessStatus, "stopped?", pst_wifstopped, 0); rb_define_method(rb_cProcessStatus, "stopped?", pst_wifstopped, 0);
rb_define_method(rb_cProcessStatus, "stopsig", pst_wstopsig, 0); rb_define_method(rb_cProcessStatus, "stopsig", pst_wstopsig, 0);