[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: C extension and stack cleanup on error
- From: David Welch <david.welch@...>
- Date: Tue, 10 Jul 2007 11:06:10 +0100
Hi,
I am trying to write a C extension to lua and I am wondering what the
rules are when it comes to stack cleanup.
Specifically I have a function which checks for a field in a table and
checks its metamethod:
static MyStruct ToStructIndirect(lua_State * L, int index, const char *
name)
{
void * p = NULL;
lua_getfield(L, index, name);
if (lua_isnil(L, index)) luaL_error(L, "Field `%s' does not exist",
name);
p = luaL_checkudata(L, -1, MYSTRUCT_METATABLE);
lua_pop(L, 1);
return *(MyStruct*)p;
}
So this function is effectively type checking a tables field and
returning its value. If the field doesn't exist then an error
is raised and a nil value is left on the stack. If the field is there
but checkudata fails, once again a value is left on the stack.
What actually happens to the value left on the stack? Can I basically
just forget about it?