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