Assign operands to local variables.

parent 31ce73dd
...@@ -2073,12 +2073,13 @@ RETRY_TRY_BLOCK: ...@@ -2073,12 +2073,13 @@ RETRY_TRY_BLOCK:
CASE(OP_TAILCALL) { CASE(OP_TAILCALL) {
/* A B C return call(R(A),Syms(B),R(A+1),... ,R(A+C+1)) */ /* A B C return call(R(A),Syms(B),R(A+1),... ,R(A+C+1)) */
int a = GETARG_A(i); int a = GETARG_A(i);
int b = GETARG_B(i);
int n = GETARG_C(i); int n = GETARG_C(i);
struct RProc *m; struct RProc *m;
struct RClass *c; struct RClass *c;
mrb_callinfo *ci; mrb_callinfo *ci;
mrb_value recv; mrb_value recv;
mrb_sym mid = syms[GETARG_B(i)]; mrb_sym mid = syms[b];
recv = regs[a]; recv = regs[a];
c = mrb_class(mrb, recv); c = mrb_class(mrb, recv);
...@@ -2679,15 +2680,21 @@ RETRY_TRY_BLOCK: ...@@ -2679,15 +2680,21 @@ RETRY_TRY_BLOCK:
CASE(OP_STRING) { CASE(OP_STRING) {
/* A Bx R(A) := str_new(Lit(Bx)) */ /* A Bx R(A) := str_new(Lit(Bx)) */
mrb_value str = mrb_str_dup(mrb, pool[GETARG_Bx(i)]); mrb_int a = GETARG_A(i);
regs[GETARG_A(i)] = str; mrb_int bx = GETARG_Bx(i);
mrb_value str = mrb_str_dup(mrb, pool[bx]);
regs[a] = str;
mrb_gc_arena_restore(mrb, ai); mrb_gc_arena_restore(mrb, ai);
NEXT; NEXT;
} }
CASE(OP_STRCAT) { CASE(OP_STRCAT) {
/* A B R(A).concat(R(B)) */ /* A B R(A).concat(R(B)) */
mrb_str_concat(mrb, regs[GETARG_A(i)], regs[GETARG_B(i)]); mrb_int a = GETARG_A(i);
mrb_int b = GETARG_B(i);
mrb_str_concat(mrb, regs[a], regs[b]);
NEXT; NEXT;
} }
......
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