lua-users home
lua-l archive

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


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