Fill gaps in frames (caused by metamethod calls) with nil.

Simplifies storing snapshots to stack.
master
Mike Pall 2010-01-26 00:45:30 +01:00
parent 47f1bc80d8
commit 34d84f8836
3 changed files with 5 additions and 5 deletions

View File

@ -3045,8 +3045,8 @@ static void asm_tail_sync(ASMState *as)
}
emit_movmroi(as, RID_BASE, ofs+4, irt_toitype(ir->t));
}
} else if (s > secondbase) {
emit_movmroi(as, RID_BASE, ofs+4, LJ_TNIL);
} else {
lua_assert(!(s > secondbase));
}
checkmclim(as);
}

View File

@ -426,7 +426,7 @@ static BCReg rec_mm_prep(jit_State *J, ASMFunction cont)
#endif
J->base[top] = emitir(IRTG(IR_FRAME, IRT_PTR), trcont, trcont);
for (s = J->maxslot; s < top; s++)
J->base[s] = 0;
J->base[s] = TREF_NIL;
return top+1;
}

View File

@ -259,8 +259,8 @@ void lj_snap_restore(jit_State *J, void *exptr)
}
}
}
} else if (newbase) {
setnilV(o); /* Clear unreferenced slots of newly added frames. */
} else {
lua_assert(!newbase);
}
}
if (newbase) L->base = newbase;