diff options
author | Jean Boussier <byroot@ruby-lang.org> | 2023-11-21 12:03:17 +0100 |
---|---|---|
committer | Jean Boussier <jean.boussier@gmail.com> | 2023-11-21 16:54:24 +0100 |
commit | 751d4b9913d3bbdf6cf09f67b037c7809b95e1ae (patch) | |
tree | 28f327c0bd7312cadae624e1cf8285c056c71822 /process.c | |
parent | 95d4a52b3ae32abdb4912d3a65b96c056b5511de (diff) | |
download | ruby-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.c | 24 |
1 files changed, 13 insertions, 11 deletions
@@ -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; } |