lua-users home
lua-l archive

RE: Event handling implementation

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


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);

AltStyle によって変換されたページ (->オリジナル) /