From 0a61a9a76f19f53dd7377a362c9d3e0f1e0cd768 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sun, 5 May 2024 18:55:42 +0900 Subject: [PATCH] mruby-struct: adjust local variable declarations --- mrbgems/mruby-struct/src/struct.c | 113 ++++++++++++------------------ 1 file changed, 44 insertions(+), 69 deletions(-) diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index a615607a0..b67bf4a3f 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -37,10 +37,10 @@ static mrb_value struct_s_members(mrb_state *mrb, struct RClass *c) { struct RClass* sclass = struct_class(mrb); - mrb_value members; for (;;) { - members = mrb_iv_get(mrb, mrb_obj_value(c), MRB_SYM(__members__)); + mrb_value members = mrb_iv_get(mrb, mrb_obj_value(c), MRB_SYM(__members__)); + if (!mrb_nil_p(members)) { if (!mrb_array_p(members)) { struct_corrupted(mrb); @@ -74,10 +74,8 @@ struct_members(mrb_state *mrb, mrb_value s) static mrb_value mrb_struct_s_members_m(mrb_state *mrb, mrb_value klass) { - mrb_value members, ary; - - members = struct_s_members(mrb, mrb_class_ptr(klass)); - ary = mrb_ary_new_capa(mrb, RARRAY_LEN(members)); + mrb_value members = struct_s_members(mrb, mrb_class_ptr(klass)); + mrb_value ary = mrb_ary_new_capa(mrb, RARRAY_LEN(members)); mrb_ary_replace(mrb, ary, members); return ary; } @@ -131,13 +129,11 @@ mrb_id_attrset(mrb_state *mrb, mrb_sym id) #define ONSTACK_ALLOC_MAX 32 #define ONSTACK_STRLEN_MAX (ONSTACK_ALLOC_MAX - 1) /* '=' character */ - const char *name; char *buf; mrb_int len; - mrb_sym mid; char onstack[ONSTACK_ALLOC_MAX]; - name = mrb_sym_name_len(mrb, id, &len); + const char *name = mrb_sym_name_len(mrb, id, &len); if (len > ONSTACK_STRLEN_MAX) { buf = (char*)mrb_malloc(mrb, (size_t)len+1); } @@ -147,7 +143,7 @@ mrb_id_attrset(mrb_state *mrb, mrb_sym id) memcpy(buf, name, (size_t)len); buf[len] = '='; - mid = mrb_intern(mrb, buf, len+1); + mrb_sym mid = mrb_intern(mrb, buf, len+1); if (buf != onstack) { mrb_free(mrb, buf); } @@ -168,11 +164,10 @@ static void make_struct_define_accessors(mrb_state *mrb, mrb_value members, struct RClass *c) { const mrb_value *ptr_members = RARRAY_PTR(members); - mrb_int i; mrb_int len = RARRAY_LEN(members); int ai = mrb_gc_arena_save(mrb); - for (i=0; i 0 && !mrb_symbol_p(argv[0])) { /* 1stArgument:!symbol -> name=argv[0] rest=argv[0..n] */ name = argv[0]; @@ -294,7 +288,8 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass) } } } - st = make_struct(mrb, name, members, mrb_class_ptr(klass)); + + mrb_value st = make_struct(mrb, name, members, mrb_class_ptr(klass)); if (!mrb_nil_p(b)) { mrb_yield_with_class(mrb, b, 1, &st, st, mrb_class_ptr(st)); } @@ -307,17 +302,16 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass) static mrb_value mrb_struct_initialize_withArg(mrb_state *mrb, mrb_int argc, const mrb_value *argv, mrb_value self) { - mrb_int i, n; + mrb_int n = num_members(mrb, self); - n = num_members(mrb, self); if (n < argc) { mrb_raise(mrb, E_ARGUMENT_ERROR, "struct size differs"); } - for (i = 0; i < argc; i++) { + for (mrb_int i = 0; i < argc; i++) { mrb_ary_set(mrb, self, i, argv[i]); } - for (i = argc; i < n; i++) { + for (mrb_int i = argc; i < n; i++) { mrb_ary_set(mrb, self, i, mrb_nil_value()); } return self; @@ -354,16 +348,12 @@ mrb_struct_init_copy(mrb_state *mrb, mrb_value copy) static mrb_value struct_aref_sym(mrb_state *mrb, mrb_value obj, mrb_sym id) { - mrb_value members, *ptr; - const mrb_value *ptr_members; - mrb_int i, len, plen; - - members = struct_members(mrb, obj); - ptr_members = RARRAY_PTR(members); - len = RARRAY_LEN(members); - ptr = RSTRUCT_PTR(obj); - plen = RARRAY_LEN(obj); - for (i=0; ic->ci->mid = MRB_SYM(inspect); - ret = mrb_str_new_lit(mrb, "#"); return ret; } - members = struct_members(mrb, self); - mlen = RARRAY_LEN(members); - mems = RARRAY_PTR(members); + mrb_value members = struct_members(mrb, self); + mrb_int mlen = RARRAY_LEN(members); + mrb_value *mems = RARRAY_PTR(members); for (mrb_int i=0; iobject_class); + struct RClass *st = mrb_define_class(mrb, "Struct", mrb->object_class); MRB_SET_INSTANCE_TT(st, MRB_TT_STRUCT); MRB_UNDEF_ALLOCATOR(st);