summaryrefslogtreecommitdiffhomepage
path: root/src/vm.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-04-09 15:31:17 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-04-09 15:31:17 +0900
commit84acf4e3f38d01c72ae077db1234c880658c10aa (patch)
tree729e3f6fee04f2cb716f2279ed7100a747cbdaa7 /src/vm.c
parent5306e4716e6774db4170052eac711680b7d51aa4 (diff)
downloadmruby-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.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/vm.c b/src/vm.c
index 468396a51..13058fc28 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -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;
}