diff options
author | Mike Pall <mike> | 2010-01-26 00:45:30 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-01-26 00:45:30 +0100 |
commit | 34d84f88368953ac0bf1e535b792ab2dd144bc60 (patch) | |
tree | 190d9da9908f551b5861a3e6ea6c43b028ae308d /src | |
parent | 47f1bc80d829e472f898609e2c44022f838a3eb3 (diff) | |
download | luajit-34d84f88368953ac0bf1e535b792ab2dd144bc60.tar.gz luajit-34d84f88368953ac0bf1e535b792ab2dd144bc60.tar.bz2 luajit-34d84f88368953ac0bf1e535b792ab2dd144bc60.zip |
Fill gaps in frames (caused by metamethod calls) with nil.
Simplifies storing snapshots to stack.
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_asm.c | 4 | ||||
-rw-r--r-- | src/lj_record.c | 2 | ||||
-rw-r--r-- | src/lj_snap.c | 4 |
3 files changed, 5 insertions, 5 deletions
diff --git a/src/lj_asm.c b/src/lj_asm.c index a8cb3dd0..bff6c9bc 100644 --- a/src/lj_asm.c +++ b/src/lj_asm.c | |||
@@ -3045,8 +3045,8 @@ static void asm_tail_sync(ASMState *as) | |||
3045 | } | 3045 | } |
3046 | emit_movmroi(as, RID_BASE, ofs+4, irt_toitype(ir->t)); | 3046 | emit_movmroi(as, RID_BASE, ofs+4, irt_toitype(ir->t)); |
3047 | } | 3047 | } |
3048 | } else if (s > secondbase) { | 3048 | } else { |
3049 | emit_movmroi(as, RID_BASE, ofs+4, LJ_TNIL); | 3049 | lua_assert(!(s > secondbase)); |
3050 | } | 3050 | } |
3051 | checkmclim(as); | 3051 | checkmclim(as); |
3052 | } | 3052 | } |
diff --git a/src/lj_record.c b/src/lj_record.c index 329cbdc5..6af25ccb 100644 --- a/src/lj_record.c +++ b/src/lj_record.c | |||
@@ -426,7 +426,7 @@ static BCReg rec_mm_prep(jit_State *J, ASMFunction cont) | |||
426 | #endif | 426 | #endif |
427 | J->base[top] = emitir(IRTG(IR_FRAME, IRT_PTR), trcont, trcont); | 427 | J->base[top] = emitir(IRTG(IR_FRAME, IRT_PTR), trcont, trcont); |
428 | for (s = J->maxslot; s < top; s++) | 428 | for (s = J->maxslot; s < top; s++) |
429 | J->base[s] = 0; | 429 | J->base[s] = TREF_NIL; |
430 | return top+1; | 430 | return top+1; |
431 | } | 431 | } |
432 | 432 | ||
diff --git a/src/lj_snap.c b/src/lj_snap.c index c2aff3db..f262e1c9 100644 --- a/src/lj_snap.c +++ b/src/lj_snap.c | |||
@@ -259,8 +259,8 @@ void lj_snap_restore(jit_State *J, void *exptr) | |||
259 | } | 259 | } |
260 | } | 260 | } |
261 | } | 261 | } |
262 | } else if (newbase) { | 262 | } else { |
263 | setnilV(o); /* Clear unreferenced slots of newly added frames. */ | 263 | lua_assert(!newbase); |
264 | } | 264 | } |
265 | } | 265 | } |
266 | if (newbase) L->base = newbase; | 266 | if (newbase) L->base = newbase; |