commit ae067dcddd837ca72c03998fd4d83b91dc872aa4
parent 5d60470508aad81eac145ab4e004fbf150130267
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Thu, 20 Mar 1997 17:35:59 -0300
BUG: lua_newtag can be called before luaI_IMtable is initialized.
Diffstat:
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/fallback.c b/fallback.c
@@ -3,7 +3,7 @@
** TecCGraf - PUC-Rio
*/
-char *rcs_fallback="$Id: fallback.c,v 1.29 1997/03/19 21:12:34 roberto Exp roberto $";
+char *rcs_fallback="$Id: fallback.c,v 1.30 1997/03/20 19:20:43 roberto Exp roberto $";
#include <stdio.h>
#include <string.h>
@@ -174,12 +174,14 @@ static void init_entry (int tag)
void luaI_initfallbacks (void)
{
- int i;
- IMtable_size = NUM_TYPES+10;
- luaI_IMtable = newvector(IMtable_size, struct IM);
- for (i=LUA_T_NIL; i<=LUA_T_USERDATA; i++) {
- luaI_IMtable[-i].tp = (lua_Type)i;
- init_entry(i);
+ if (luaI_IMtable == NULL) {
+ int i;
+ IMtable_size = NUM_TYPES+10;
+ luaI_IMtable = newvector(IMtable_size, struct IM);
+ for (i=LUA_T_NIL; i<=LUA_T_USERDATA; i++) {
+ luaI_IMtable[-i].tp = (lua_Type)i;
+ init_entry(i);
+ }
}
}
@@ -187,9 +189,11 @@ int lua_newtag (char *t)
{
int tp;
--last_tag;
- if ((-last_tag) >= IMtable_size)
+ if ((-last_tag) >= IMtable_size) {
+ luaI_initfallbacks();
IMtable_size = growvector(&luaI_IMtable, IMtable_size,
struct IM, memEM, MAX_INT);
+ }
tp = -findstring(t, typenames);
if (tp == LUA_T_ARRAY || tp == LUA_T_USERDATA)
luaI_IMtable[-last_tag].tp = tp;