1414#include "mruby/hash.h"
1515#include "mruby/range.h"
1616
17- #define RSTRUCT_LEN (st ) RARRAY_LEN (st)
18- #define RSTRUCT_PTR (st ) RARRAY_PTR (st)
17+ #define RSTRUCT_LEN (st ) mrb_ary_ptr (st)->len
18+ #define RSTRUCT_PTR (st ) mrb_ary_ptr (st)->ptr
1919
2020static struct RClass *
2121struct_class (mrb_state * mrb )
@@ -72,15 +72,10 @@ static mrb_value
7272mrb_struct_s_members_m (mrb_state * mrb , mrb_value klass )
7373{
7474 mrb_value members , ary ;
75- mrb_value * p , * pend ;
7675
7776 members = mrb_struct_s_members (mrb , klass );
7877 ary = mrb_ary_new_capa (mrb , RARRAY_LEN (members ));
79- p = RARRAY_PTR (members ); pend = p + RARRAY_LEN (members );
80- while (p < pend ) {
81- mrb_ary_push (mrb , ary , * p );
82- p ++ ;
83- }
78+ mrb_ary_replace (mrb , ary , members );
8479 return ary ;
8580}
8681
@@ -106,7 +101,8 @@ mrb_struct_members_m(mrb_state *mrb, mrb_value obj)
106101static mrb_value
107102mrb_struct_getmember (mrb_state * mrb , mrb_value obj , mrb_sym id )
108103{
109- mrb_value members , slot , * ptr , * ptr_members ;
104+ mrb_value members , slot , * ptr ;
105+ const mrb_value * ptr_members ;
110106 mrb_int i , len ;
111107
112108 ptr = RSTRUCT_PTR (obj );
@@ -181,7 +177,8 @@ mrb_struct_set(mrb_state *mrb, mrb_value obj, mrb_value val)
181177 const char * name ;
182178 mrb_int i , len , slen ;
183179 mrb_sym mid ;
184- mrb_value members , slot , * ptr , * ptr_members ;
180+ mrb_value members , slot , * ptr ;
181+ const mrb_value * ptr_members ;
185182
186183 /* get base id */
187184 name = mrb_sym2name_len (mrb , mrb -> c -> ci -> mid , & slen );
@@ -227,7 +224,7 @@ is_const_id(mrb_state *mrb, const char *name)
227224static void
228225make_struct_define_accessors (mrb_state * mrb , mrb_value members , struct RClass * c )
229226{
230- mrb_value * ptr_members = RARRAY_PTR (members );
227+ const mrb_value * ptr_members = RARRAY_PTR (members );
231228 mrb_int i ;
232229 mrb_int len = RARRAY_LEN (members );
233230 int ai = mrb_gc_arena_save (mrb );
@@ -359,7 +356,7 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass)
359356 }
360357 for (i = 0 ; i < RARRAY_LEN (rest ); i ++ ) {
361358 id = mrb_obj_to_sym (mrb , RARRAY_PTR (rest )[i ]);
362- RARRAY_PTR ( rest )[ i ] = mrb_symbol_value (id );
359+ mrb_ary_set ( mrb , rest , i , mrb_symbol_value (id ) );
363360 }
364361 }
365362 st = make_struct (mrb , name , rest , struct_class (mrb ));
@@ -420,7 +417,8 @@ inspect_struct(mrb_state *mrb, mrb_value s, mrb_bool recur)
420417{
421418 const char * cn = mrb_class_name (mrb , mrb_obj_class (mrb , s ));
422419 mrb_value members , str = mrb_str_new_lit (mrb , "#<struct " );
423- mrb_value * ptr , * ptr_members ;
420+ mrb_value * ptr ;
421+ const mrb_value * ptr_members ;
424422 mrb_int i , len ;
425423
426424 if (cn ) {
@@ -506,7 +504,8 @@ mrb_struct_init_copy(mrb_state *mrb, mrb_value copy)
506504static mrb_value
507505struct_aref_sym (mrb_state * mrb , mrb_value s , mrb_sym id )
508506{
509- mrb_value * ptr , members , * ptr_members ;
507+ mrb_value * ptr , members ;
508+ const mrb_value * ptr_members ;
510509 mrb_int i , len ;
511510
512511 ptr = RSTRUCT_PTR (s );
@@ -579,7 +578,8 @@ mrb_struct_aref(mrb_state *mrb, mrb_value s)
579578static mrb_value
580579mrb_struct_aset_sym (mrb_state * mrb , mrb_value s , mrb_sym id , mrb_value val )
581580{
582- mrb_value members , * ptr , * ptr_members ;
581+ mrb_value members , * ptr ;
582+ const mrb_value * ptr_members ;
583583 mrb_int i , len ;
584584
585585 members = mrb_struct_members (mrb , s );
0 commit comments