Procházet zdrojové kódy

DUALNUM: Add extra assertions to interpreter.

Mike Pall před 14 roky
rodič
revize
0125ee8211
4 změnil soubory, kde provedl 1248 přidání a 1202 odebrání
  1. 406 397
      src/buildvm_x64.h
  2. 386 377
      src/buildvm_x64win.h
  3. 19 0
      src/buildvm_x86.dasc
  4. 437 428
      src/buildvm_x86.h

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 406 - 397
src/buildvm_x64.h


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 386 - 377
src/buildvm_x64win.h


+ 19 - 0
src/buildvm_x86.dasc

@@ -3753,6 +3753,16 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
 #endif
   |
   |//-----------------------------------------------------------------------
+  |//-- Assertions ---------------------------------------------------------
+  |//-----------------------------------------------------------------------
+  |
+  |->assert_bad_for_arg_type:
+#ifdef LUA_USE_ASSERT
+  |  int3
+#endif
+  |  int3
+  |
+  |//-----------------------------------------------------------------------
 }
 
 /* Generate the code for a single instruction. */
@@ -5534,6 +5544,10 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 	|  mov RB, dword FOR_IDX
 	|  cmp dword FOR_STEP, 0; jl >5
       } else {
+#ifdef LUA_USE_ASSERT
+	|  cmp FOR_TSTOP, LJ_TISNUM; jne ->assert_bad_for_arg_type
+	|  cmp FOR_TSTEP, LJ_TISNUM; jne ->assert_bad_for_arg_type
+#endif
 	|  mov RB, dword FOR_STEP
 	|  test RB, RB; js >5
 	|  add RB, dword FOR_IDX; jo >1
@@ -5593,6 +5607,11 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
     if (!vk) {
       |  jae ->vmeta_for
       |  cmp FOR_TSTOP, LJ_TISNUM; jae ->vmeta_for
+    } else {
+#ifdef LUA_USE_ASSERT
+      |  cmp FOR_TSTOP, LJ_TISNUM; jae ->assert_bad_for_arg_type
+      |  cmp FOR_TSTEP, LJ_TISNUM; jae ->assert_bad_for_arg_type
+#endif
     }
     |  mov RB, FOR_TSTEP		// Load type/hiword of for step.
     if (!vk) {

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 437 - 428
src/buildvm_x86.h


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů