Fix for the fix for the trace flush logic.

This commit is contained in:
Mike Pall 2011-01-18 22:17:27 +01:00
parent 751eff9f97
commit 685dfc3172

View File

@ -187,12 +187,12 @@ static void trace_unpatch(jit_State *J, GCtrace *T)
if (op == BC_JMP) if (op == BC_JMP)
return; /* No need to unpatch branches in parent traces (yet). */ return; /* No need to unpatch branches in parent traces (yet). */
switch (bc_op(*pc)) { switch (bc_op(*pc)) {
case BC_JFORI: case BC_JFORL:
lua_assert(op == BC_FORL); lua_assert(traceref(J, bc_d(*pc)) == T);
setbc_op(pc, BC_FORI);
pc += bc_j(*pc);
lua_assert(bc_op(*pc) == BC_JFORL && traceref(J, bc_d(*pc)) == T);
*pc = T->startins; *pc = T->startins;
pc += bc_j(T->startins);
lua_assert(bc_op(*pc) == BC_JFORI);
setbc_op(pc, BC_FORI);
break; break;
case BC_JLOOP: case BC_JLOOP:
lua_assert(op == BC_LOOP || bc_isret(op)); lua_assert(op == BC_LOOP || bc_isret(op));