From 5f3aed7413a13d484494787def6a0488d738f7d0 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 1 Dec 2022 15:38:06 +0900 Subject: [PATCH] mruby-data (mrb_data_new): Data#new to accept keyword arguments --- mrbgems/mruby-data/src/data.c | 104 ++++++++++++++++++++++++---------- 1 file changed, 74 insertions(+), 30 deletions(-) diff --git a/mrbgems/mruby-data/src/data.c b/mrbgems/mruby-data/src/data.c index d7ac3e53a..1e41e47d7 100644 --- a/mrbgems/mruby-data/src/data.c +++ b/mrbgems/mruby-data/src/data.c @@ -125,21 +125,70 @@ make_data_define_accessors(mrb_state *mrb, mrb_value members, struct RClass *c) } } +static mrb_value mrb_data_initialize(mrb_state *mrb, mrb_value self); + static mrb_value -make_data(mrb_state *mrb, mrb_value members, struct RClass *klass) +mrb_data_new(mrb_state *mrb, mrb_value self) +{ + struct RClass *c = mrb_class_ptr(self); + mrb_value members = data_s_members(mrb, c); + mrb_value *vals; + + mrb_int n = RARRAY_LEN(members); + mrb_value *mems = RARRAY_PTR(members); + if (mrb->c->ci->nk > 0) { + mrb_value tmp = mrb_str_new(mrb, NULL, sizeof(mrb_sym)*n); + mrb_sym *knames = (mrb_sym*)RSTRING_PTR(tmp); + mrb_value m = mrb_ary_new_capa(mrb, n); + vals = RARRAY_PTR(m); + for (mrb_int i=0; ibasic.c->super = c->c; */ + /* RSTRUCT(data)->basic.c->super = c->c; */ make_data_define_accessors(mrb, members, c); - return nstr; + return data; } /* @@ -164,8 +213,7 @@ static mrb_value mrb_data_s_def(mrb_state *mrb, mrb_value klass) { mrb_value rest; - mrb_int i; - mrb_value b, st; + mrb_value b, data; mrb_sym id; const mrb_value *argv; mrb_int argc; @@ -176,44 +224,40 @@ mrb_data_s_def(mrb_state *mrb, mrb_value klass) } else { rest = mrb_ary_new_from_values(mrb, argc, argv); - for (i=0; i