aboutsummaryrefslogtreecommitdiffstats
path: root/process.c
diff options
context:
space:
mode:
authorJean Boussier <byroot@ruby-lang.org>2023-11-21 12:03:17 +0100
committerJean Boussier <jean.boussier@gmail.com>2023-11-21 16:54:24 +0100
commit751d4b9913d3bbdf6cf09f67b037c7809b95e1ae (patch)
tree28f327c0bd7312cadae624e1cf8285c056c71822 /process.c
parent95d4a52b3ae32abdb4912d3a65b96c056b5511de (diff)
downloadruby-751d4b9913d3bbdf6cf09f67b037c7809b95e1ae.tar.gz
Make Process::Status embedded
These are not very common, but they're very easy to convert.
Diffstat (limited to 'process.c')
-rw-r--r--process.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/process.c b/process.c
index 4e6d67e127..aa213ba53c 100644
--- a/process.c
+++ b/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;
}