Commit 6f6e18ef authored by Yukihiro Matsumoto's avatar Yukihiro Matsumoto

struct.c refactoring

parent b8b22c1d
...@@ -367,7 +367,7 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass) ...@@ -367,7 +367,7 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass)
name = mrb_nil_value(); name = mrb_nil_value();
rest = mrb_nil_value(); rest = mrb_nil_value();
mrb_get_args(mrb, "&*", &b, &argv, &argc); mrb_get_args(mrb, "*&", &argv, &argc, &b);
if (argc > 0) name = argv[0]; if (argc > 0) name = argv[0];
if (argc > 1) rest = argv[1]; if (argc > 1) rest = argv[1];
if (mrb_type(rest) == MRB_TT_ARRAY) { if (mrb_type(rest) == MRB_TT_ARRAY) {
...@@ -400,7 +400,7 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass) ...@@ -400,7 +400,7 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass)
return st; return st;
} }
static long static int
num_members(mrb_state *mrb, struct RClass *klass) num_members(mrb_state *mrb, struct RClass *klass)
{ {
mrb_value members; mrb_value members;
...@@ -418,7 +418,7 @@ static mrb_value ...@@ -418,7 +418,7 @@ static mrb_value
mrb_struct_initialize_withArg(mrb_state *mrb, int argc, mrb_value *argv, mrb_value self) mrb_struct_initialize_withArg(mrb_state *mrb, int argc, mrb_value *argv, mrb_value self)
{ {
struct RClass *klass = mrb_obj_class(mrb, self); struct RClass *klass = mrb_obj_class(mrb, self);
long n; int n;
struct RStruct *st; struct RStruct *st;
mrb_struct_modify(self); mrb_struct_modify(self);
...@@ -447,34 +447,7 @@ mrb_struct_initialize_m(mrb_state *mrb, /*int argc, mrb_value *argv,*/ mrb_value ...@@ -447,34 +447,7 @@ mrb_struct_initialize_m(mrb_state *mrb, /*int argc, mrb_value *argv,*/ mrb_value
mrb_value mrb_value
mrb_struct_initialize(mrb_state *mrb, mrb_value self, mrb_value values) mrb_struct_initialize(mrb_state *mrb, mrb_value self, mrb_value values)
{ {
return mrb_struct_initialize_withArg(mrb, RARRAY_LEN/*INT*/(values), RARRAY_PTR(values), self); return mrb_struct_initialize_withArg(mrb, RARRAY_LEN(values), RARRAY_PTR(values), self);
}
mrb_value
mrb_struct_alloc(mrb_state *mrb, mrb_value klass, mrb_value values)
{
return mrb_class_new_instance(mrb, RARRAY_LEN(values), RARRAY_PTR(values), mrb_class(mrb, klass));
}
mrb_value
mrb_struct_new(mrb_state *mrb, struct RClass *klass, ...)
{
mrb_value tmpargs[N_REF_FUNC], *mem = tmpargs;
int size, i;
va_list args;
size = mrb_long2int(num_members(mrb, klass));
if (size > numberof(tmpargs)) {
tmpargs[0] = mrb_ary_new_capa(mrb, size);
mem = RARRAY_PTR(tmpargs[0]);
}
va_start(args, klass);
for (i=0; i<size; i++) {
mem[i] = va_arg(args, mrb_value);
}
va_end(args);
return mrb_class_new_instance(mrb, size, mem, klass);
} }
static mrb_value static mrb_value
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment