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