From 1e61a875ed301dd23d8ce58f154eea5dc2ddba2d Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sun, 5 May 2024 18:56:20 +0900 Subject: [PATCH] mruby-data: adjust local variable declarations --- mrbgems/mruby-data/src/data.c | 63 +++++++++++++++-------------------- 1 file changed, 26 insertions(+), 37 deletions(-) diff --git a/mrbgems/mruby-data/src/data.c b/mrbgems/mruby-data/src/data.c index 46f3c0255f..cb32e0ded2 100644 --- a/mrbgems/mruby-data/src/data.c +++ b/mrbgems/mruby-data/src/data.c @@ -36,10 +36,10 @@ static mrb_value data_s_members(mrb_state *mrb, struct RClass *c) { struct RClass* sclass = data_class(mrb); - mrb_value mem; for (;;) { - mem = mrb_iv_get(mrb, mrb_obj_value(c), MRB_SYM(__members__)); + mrb_value mem = mrb_iv_get(mrb, mrb_obj_value(c), MRB_SYM(__members__)); + if (!mrb_nil_p(mem)) { if (!mrb_array_p(mem)) { data_corrupted(mrb); @@ -59,6 +59,7 @@ data_members(mrb_state *mrb, mrb_value obj) if (!data_p(obj) || RDATA_LEN(obj) == 0) { data_corrupted(mrb); } + mrb_value members = data_s_members(mrb, mrb_obj_class(mrb, obj)); if (RDATA_LEN(obj) != RARRAY_LEN(members)) { mrb_raisef(mrb, E_TYPE_ERROR, @@ -229,14 +230,15 @@ make_data_class(mrb_state *mrb, mrb_value members, struct RClass *klass) struct RClass *c = mrb_class_new(mrb, klass); MRB_SET_INSTANCE_TT(c, MRB_TT_STRUCT); MRB_DEFINE_ALLOCATOR(c); - mrb_value data = mrb_obj_value(c); - mrb_iv_set(mrb, data, MRB_SYM(__members__), members); mrb_undef_class_method(mrb, c, "define"); mrb_define_class_method_id(mrb, c, MRB_SYM(new), mrb_data_new, MRB_ARGS_ANY()); mrb_define_class_method_id(mrb, c, MRB_SYM(members), mrb_data_s_members, MRB_ARGS_NONE()); /* RSTRUCT(data)->basic.c->super = c->c; */ make_data_define_accessors(mrb, members, c); + + mrb_value data = mrb_obj_value(c); + mrb_iv_set(mrb, data, MRB_SYM(__members__), members); return data; } @@ -261,16 +263,14 @@ make_data_class(mrb_state *mrb, mrb_value members, struct RClass *klass) static mrb_value mrb_data_s_def(mrb_state *mrb, mrb_value klass) { - mrb_value rest; - mrb_value b, data; - mrb_sym id; const mrb_value *argv; mrb_int argc; + mrb_value b; mrb_get_args(mrb, "*&", &argv, &argc, &b); - rest = mrb_ary_new_from_values(mrb, argc, argv); + mrb_value rest = mrb_ary_new_from_values(mrb, argc, argv); for (mrb_int i=0; iobject_class); + struct RClass *d = mrb_define_class(mrb, "Data", mrb->object_class); MRB_SET_INSTANCE_TT(d, MRB_TT_STRUCT); MRB_UNDEF_ALLOCATOR(d);