lua-users home
lua-l archive

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


On Tue, May 8, 2012 at 4:22 AM, Tezduyar Lindskog, Umut
<Umut.TezduyarLindskog@sonymobile.com> wrote:
> 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
>
>

Yes. It won't be deleted until you use luaL_unref to free the reference.

-- 
Sent from my Game Boy.