瀏覽代碼

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

Simplifies storing snapshots to stack.
Mike Pall 16 年之前
父節點
當前提交
34d84f8836
共有 3 個文件被更改,包括 5 次插入5 次删除
  1. 2 2
      src/lj_asm.c
  2. 1 1
      src/lj_record.c
  3. 2 2
      src/lj_snap.c

+ 2 - 2
src/lj_asm.c

@@ -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);
   }

+ 1 - 1
src/lj_record.c

@@ -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;
 }
 

+ 2 - 2
src/lj_snap.c

@@ -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;