瀏覽代碼

FFI: Add debug define to check for unanchored CTypes.

Mike Pall 12 年之前
父節點
當前提交
405020c405
共有 1 個文件被更改,包括 13 次插入0 次删除
  1. 13 0
      src/lj_ctype.c

+ 13 - 0
src/lj_ctype.c

@@ -132,7 +132,11 @@ CTKWDEF(CTKWNAMEDEF)
 ;
 
 #define CTTYPEINFO_NUM		(sizeof(lj_ctype_typeinfo)/sizeof(CTInfo)-1)
+#ifdef LUAJIT_CTYPE_CHECK_ANCHOR
+#define CTTYPETAB_MIN		CTTYPEINFO_NUM
+#else
 #define CTTYPETAB_MIN		128
+#endif
 
 /* -- C type interning ---------------------------------------------------- */
 
@@ -148,7 +152,16 @@ CTypeID lj_ctype_new(CTState *cts, CType **ctp)
   lua_assert(cts->L);
   if (LJ_UNLIKELY(id >= cts->sizetab)) {
     if (id >= CTID_MAX) lj_err_msg(cts->L, LJ_ERR_TABOV);
+#ifdef LUAJIT_CTYPE_CHECK_ANCHOR
+    ct = lj_mem_newvec(cts->L, id+1, CType);
+    memcpy(ct, cts->tab, id*sizeof(CType));
+    memset(cts->tab, 0, id*sizeof(CType));
+    lj_mem_freevec(cts->g, cts->tab, cts->sizetab, CType);
+    cts->tab = ct;
+    cts->sizetab = id+1;
+#else
     lj_mem_growvec(cts->L, cts->tab, cts->sizetab, CTID_MAX, CType);
+#endif
   }
   cts->top = id+1;
   *ctp = ct = &cts->tab[id];