diff options
| author | Mike Pall <mike> | 2012-11-26 11:01:59 +0100 |
|---|---|---|
| committer | Mike Pall <mike> | 2012-11-26 11:01:59 +0100 |
| commit | 405020c40504dcaff3371283c285eaa6bad50991 (patch) | |
| tree | 3eadb1969a7e97c122e000c36f46ecc84f47d1fd /src | |
| parent | 2ad9834df6fe47c7150d16a5d30782fb5696bec9 (diff) | |
| download | luajit-405020c40504dcaff3371283c285eaa6bad50991.tar.gz luajit-405020c40504dcaff3371283c285eaa6bad50991.tar.bz2 luajit-405020c40504dcaff3371283c285eaa6bad50991.zip | |
FFI: Add debug define to check for unanchored CTypes.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lj_ctype.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/lj_ctype.c b/src/lj_ctype.c index 80594ab5..666a5daf 100644 --- a/src/lj_ctype.c +++ b/src/lj_ctype.c | |||
| @@ -132,7 +132,11 @@ CTKWDEF(CTKWNAMEDEF) | |||
| 132 | ; | 132 | ; |
| 133 | 133 | ||
| 134 | #define CTTYPEINFO_NUM (sizeof(lj_ctype_typeinfo)/sizeof(CTInfo)-1) | 134 | #define CTTYPEINFO_NUM (sizeof(lj_ctype_typeinfo)/sizeof(CTInfo)-1) |
| 135 | #ifdef LUAJIT_CTYPE_CHECK_ANCHOR | ||
| 136 | #define CTTYPETAB_MIN CTTYPEINFO_NUM | ||
| 137 | #else | ||
| 135 | #define CTTYPETAB_MIN 128 | 138 | #define CTTYPETAB_MIN 128 |
| 139 | #endif | ||
| 136 | 140 | ||
| 137 | /* -- C type interning ---------------------------------------------------- */ | 141 | /* -- C type interning ---------------------------------------------------- */ |
| 138 | 142 | ||
| @@ -148,7 +152,16 @@ CTypeID lj_ctype_new(CTState *cts, CType **ctp) | |||
| 148 | lua_assert(cts->L); | 152 | lua_assert(cts->L); |
| 149 | if (LJ_UNLIKELY(id >= cts->sizetab)) { | 153 | if (LJ_UNLIKELY(id >= cts->sizetab)) { |
| 150 | if (id >= CTID_MAX) lj_err_msg(cts->L, LJ_ERR_TABOV); | 154 | if (id >= CTID_MAX) lj_err_msg(cts->L, LJ_ERR_TABOV); |
| 155 | #ifdef LUAJIT_CTYPE_CHECK_ANCHOR | ||
| 156 | ct = lj_mem_newvec(cts->L, id+1, CType); | ||
| 157 | memcpy(ct, cts->tab, id*sizeof(CType)); | ||
| 158 | memset(cts->tab, 0, id*sizeof(CType)); | ||
| 159 | lj_mem_freevec(cts->g, cts->tab, cts->sizetab, CType); | ||
| 160 | cts->tab = ct; | ||
| 161 | cts->sizetab = id+1; | ||
| 162 | #else | ||
| 151 | lj_mem_growvec(cts->L, cts->tab, cts->sizetab, CTID_MAX, CType); | 163 | lj_mem_growvec(cts->L, cts->tab, cts->sizetab, CTID_MAX, CType); |
| 164 | #endif | ||
| 152 | } | 165 | } |
| 153 | cts->top = id+1; | 166 | cts->top = id+1; |
| 154 | *ctp = ct = &cts->tab[id]; | 167 | *ctp = ct = &cts->tab[id]; |
