DUALNUM: Fix missing type check for loop index slot.

This commit is contained in:
Mike Pall 2011-06-01 00:49:29 +02:00
parent 2d0b32500e
commit 8dd09d5041

View File

@ -388,7 +388,8 @@ static void rec_for_loop(jit_State *J, const BCIns *fori, ScEvEntry *scev,
rec_for_check(J, t, dir, stop, step); rec_for_check(J, t, dir, stop, step);
scev->start = tref_ref(find_kinit(J, fori, ra+FORL_IDX, IRT_INT)); scev->start = tref_ref(find_kinit(J, fori, ra+FORL_IDX, IRT_INT));
tc = (LJ_DUALNUM && tc = (LJ_DUALNUM &&
!(scev->start && irref_isk(scev->stop) && irref_isk(scev->step))) ? !(scev->start && irref_isk(scev->stop) && irref_isk(scev->step) &&
tvisint(&tv[FORL_IDX]) == (t == IRT_INT))) ?
IRSLOAD_TYPECHECK : 0; IRSLOAD_TYPECHECK : 0;
if (tc) { if (tc) {
J->base[ra+FORL_STOP] = stop; J->base[ra+FORL_STOP] = stop;