@@ -1159,18 +1159,20 @@ check_target_class(mrb_state *mrb)
11591159 return target ;
11601160}
11611161
1162+ #define regs (mrb->c->ci->stack)
1163+
11621164static mrb_value
1163- hash_new_from_values (mrb_state * mrb , mrb_int argc , mrb_value * regs )
1165+ hash_new_from_regs (mrb_state * mrb , mrb_int argc , mrb_int idx )
11641166{
11651167 mrb_value hash = mrb_hash_new_capa (mrb , argc );
11661168 while (argc -- ) {
1167- mrb_hash_set (mrb , hash , regs [0 ], regs [1 ]);
1168- regs += 2 ;
1169+ mrb_hash_set (mrb , hash , regs [idx + 0 ], regs [idx + 1 ]);
1170+ idx += 2 ;
11691171 }
11701172 return hash ;
11711173}
11721174
1173- #define ARGUMENT_NORMALIZE (arg_base , arg_info , insn ) do { \
1175+ #define ARGUMENT_NORMALIZE (arg_base , arg_info , insn ) do { \
11741176 int n = *(arg_info)&0xf; \
11751177 int nk = (*(arg_info)>>4)&0xf; \
11761178 mrb_int bidx = (arg_base) + mrb_bidx(*(arg_info)); \
@@ -1179,7 +1181,7 @@ hash_new_from_values(mrb_state *mrb, mrb_int argc, mrb_value *regs)
11791181 } \
11801182 else if (nk > 0) { /* pack keyword arguments */ \
11811183 mrb_int kidx = (arg_base )+ (n == CALL_MAXARGS ?1 :n )+ 1 ; \
1182- mrb_value kdict = hash_new_from_values (mrb , nk , regs + kidx ); \
1184+ mrb_value kdict = hash_new_from_regs (mrb , nk , kidx ); \
11831185 regs [kidx ] = kdict ; \
11841186 nk = CALL_MAXARGS ; \
11851187 * (arg_info ) = n | (nk <<4 ); \
@@ -1242,7 +1244,6 @@ mrb_vm_exec(mrb_state *mrb, const struct RProc *proc, const mrb_code *pc)
12421244 mrb -> jmp = & c_jmp ;
12431245 mrb_vm_ci_proc_set (mrb -> c -> ci , proc );
12441246
1245- #define regs (mrb->c->ci->stack)
12461247 INIT_DISPATCH {
12471248 CASE (OP_NOP , Z ) {
12481249 /* do nothing */
0 commit comments