[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: Is it possible to store lua function in a C struct?
- From: "Tezduyar Lindskog, Umut" <Umut.TezduyarLindskog@...>
- Date: Tue, 8 May 2012 12:22:56 +0200
Hi Rena, Rob, Kevin,
Thank you very much for the quick response. It worked like charm. I have further question. Does GC take into account the fact that we are holding a reference to a function?
Thanks
-----Original Message-----
From: lua-l-bounces@lists.lua.org [mailto:lua-l-bounces@lists.lua.org] On Behalf Of Rob Hoelz
Sent: Tuesday, May 08, 2012 10:10 AM
To: Lua mailing list
Subject: Re: Is it possible to store lua function in a C struct?
luaL_ref should handle your needs quite nicely:
/* with your function on the top of the stack */
int ref = luaL_ref(L, LUA_REGISTRYINDEX);
/* squirrel away ref in your struct */
/* later on... */
lua_rawgeti(L, LUA_REGISTRYINDEX, ref);
/* your function is once again on the top of the stack! */
-Rob
On Tue, May 08, 2012 at 10:02:28AM +0200, Tezduyar Lindskog, Umut wrote:
> Hi all,
>
> Is it possible to store lua function in a C struct and later call lua function from C using the stored information?
>
> I am looking for an implementation as following:
>
> void* myluafunc = luaL_checkluafunction (L, 1);
> lua_pushfunctionptr (L, myluafunc);
> lua_call (L,0,0);
>
> I have implemented a workaround where lua function's name is stored in a char array in C and then later on lua function is called using following APIs. This way is working fine but using function name as the identifier is using extra memory.
>
> char name[128];
> int button_lua_new (lua_State *L)
> {
> const char* myluafuncname = luaL_checkstring (L,1);
> strcpy (name, myluafuncname);
> }
> void call_button_event_handler ()
> {
> lua_getglobal(L, name);
> lua_call (L,0,0);
> }
>
> Thanks