diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-04-09 15:31:17 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-04-09 15:31:17 +0900 |
| commit | 84acf4e3f38d01c72ae077db1234c880658c10aa (patch) | |
| tree | 729e3f6fee04f2cb716f2279ed7100a747cbdaa7 /src/vm.c | |
| parent | 5306e4716e6774db4170052eac711680b7d51aa4 (diff) | |
| download | mruby-84acf4e3f38d01c72ae077db1234c880658c10aa.tar.gz mruby-84acf4e3f38d01c72ae077db1234c880658c10aa.zip | |
preparation for tail call optimization (still has bugs)
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -1195,9 +1195,11 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) NEXT; } + L_RETURN: + i = MKOP_AB(OP_RETURN, GETARG_A(i), OP_R_NORMAL); + /* fall through */ CASE(OP_RETURN) { /* A return R(A) */ - L_RETURN: if (mrb->exc) { mrb_callinfo *ci; int eidx; @@ -1333,7 +1335,6 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) } } - /* replace callinfo */ ci = mrb->ci; ci->mid = mid; @@ -1658,7 +1659,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) } while (0) CASE(OP_EQ) { - /* A B C R(A) := R(A)<R(A+1) (Syms[B]=:<,C=1)*/ + /* A B C R(A) := R(A)<R(A+1) (Syms[B]=:==,C=1)*/ int a = GETARG_A(i); if (mrb_obj_eq(mrb, regs[a], regs[a+1])) { SET_TRUE_VALUE(regs[a]); @@ -1676,7 +1677,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) } CASE(OP_LE) { - /* A B C R(A) := R(A)<R(A+1) (Syms[B]=:<,C=1)*/ + /* A B C R(A) := R(A)<=R(A+1) (Syms[B]=:<=,C=1)*/ OP_CMP(<=); NEXT; } @@ -1688,7 +1689,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) } CASE(OP_GE) { - /* A B C R(A) := R(A)<R(A+1) (Syms[B]=:<,C=1)*/ + /* A B C R(A) := R(A)<=R(A+1) (Syms[B]=:<=,C=1)*/ OP_CMP(>=); NEXT; } |
