Hi,
I am traversing a table 2 times in my C function. 1st to validate whether all keys and values are of certain types and then the next time to act on them. In the next loop lua_next crashes. The sample table is just 1 element with a string key and a number value. Here is the code of the table traversal. The table is the second argument to the function hence it uses 2 in lua_next:
lua_pushnil(L); // first key
while (lua_next(L, 2) != 0)
{
// uses 'key' (at index -2) and 'value' (at index -1)
// Key must be a number or a string
// Value can be a number. string, or boolean
if(!lua_isnumber(L,-2) && !lua_isstring(L,-2))
{
lua_pushnil(L);
lua_pushstring(L,"Table key is not a number or a string");
return 2; // 2 results pushed on the stack
}
if(!lua_isnumber(L,-1) && !lua_isstring(L,-1) && !lua_isboolean(L,-1))
{
lua_pushnil(L);
lua_pushstring(L,"Table value is not a number, string, or boolean");
return 2; // 2 results pushed on the stack
}
lua_pop(L, 1);
}
lua_pop(L,1); // Pop the last key
lua_pushnil(L);
while(lua_next(L,2) != 0)
{
// uses 'key' (at index = -2) and 'value' (at index -1)
if(lua_isnumber(L,-2))
// Key is a number
lua_pushnumber(L2,lua_tonumber(L,-2));
else
// Key is a string
lua_pushstring(L2,lua_tostring(L,-2));
// Now push the value
if(lua_isnumber(L,-1))
// Value is a number
lua_pushnumber(L2,lua_tonumber(L,-1));
else if(lua_isstring(L,-1))
// Value is a string
lua_pushstring(L2,lua_tostring(L,-1));
else
// Value is boolean
lua_pushboolean(L2,lua_toboolean(L,-1));
lua_pop(L,1);
}
Any hints as to why it could be crashing would be really helpful.