[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: Event handling implementation
- From: "Jerome Vuarand" <jerome.vuarand@...>
- Date: Mon, 19 Nov 2007 13:59:33 -0500
John Dunn wrote:
> Jerome Vuarand wrote:
>> Just check if there's one in the add_handler, and if not create one.
>
> What's the best way to check to see if a table has been attached? It
> doesn't look like checking for nil works - it looks like calling
> getfenv returns a shared table if you haven't manually assigned one.
You can put a sentinel in your own environments. For example (not tested):
-- Lua
if getfenv(object).owner ~= object then
setfenv(object, {owner=object})
end
// C, assuming your object is at index 'index'
lua_getfenv(L, index);
lua_getfield(L, -1, "owner");
lua_replace(L, -2);
if (!lua_equal(L, index, -1))
{
lua_pop(L, 1);
lua_createtable(L, 0, 2); // 2 for owner+handler
lua_pushvalue(L, index);
lua_setfield(L, -2, "owner");
lua_setfenv(L, index);
}
else
lua_pop(L, 1);