diff --git a/src/lj_dispatch.c b/src/lj_dispatch.c index f956aa1b..30137ab2 100644 --- a/src/lj_dispatch.c +++ b/src/lj_dispatch.c @@ -333,15 +333,13 @@ static void callhook(lua_State *L, int event, BCLine line) static BCReg cur_topslot(GCproto *pt, const BCIns *pc, uint32_t nres) { BCIns ins = pc[-1]; - for (;;) { - switch (bc_op(ins)) { - case BC_UCLO: ins = pc[bc_j(ins)]; break; - case BC_CALLM: - case BC_CALLMT: return bc_a(ins) + bc_c(ins) + nres-1+1; - case BC_RETM: return bc_a(ins) + bc_d(ins) + nres-1; - case BC_TSETM: return bc_a(ins) + nres-1; - default: return pt->framesize; - } + if (bc_op(ins) == BC_UCLO) + ins = pc[bc_j(ins)]; + switch (bc_op(ins)) { + case BC_CALLM: case BC_CALLMT: return bc_a(ins) + bc_c(ins) + nres-1+1; + case BC_RETM: return bc_a(ins) + bc_d(ins) + nres-1; + case BC_TSETM: return bc_a(ins) + nres-1; + default: return pt->framesize; } }