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