lua-users home
lua-l archive

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


Hello Thomas,

thanks for your mail. Just to make sure ..

lua_getglobal(L, LUA_LIBNAME); -- get the table of the library
lua_getfield(L, -1, "functionname"); -- get the old function
lua_pushcclosure(L, function, 1); -- push the overloaded function
                                  -- with upvalue to the old
lua_setfield(L, -2, "functionname); set it to the library table

So when your new function is called, you have the in an upvalue in the
closure so you can retrieve it at index lua_upvalueindex(1) in the
stack.
In this case I don't overwrite the old function but only make sure, that 
whenever the new function is called, the old is available vie the upvalue, isn't 
it? But I would need it the other way: When the old function is called, my 
function should also be called...
I need this actually to get notified of a certain event and put something into 
my own mainloop due to this. I strictly try to avoid to kludge the library code 
(with a hook) because of incompabilities to future library versions...
Eva

Hope this help you

Tom

On Wed, Sep 05, 2007 at 12:11:11PM +0200, Eva Schmidt wrote:
Hello,

I want to overload or extend an existing function (stored in the __index table) from a library. I want to do this from my C-program, NOT from Lua.
Maybe I don't see the woods for the trees, but how can I access this 
metatable and manipulate a function in it?
I want to extend a certain function at the time of initializing (after 
opening the libraries) to connect this function call in Lua with a call of 
one of my own functions...
I think it must be something like that:


	lua_getglobal (L, LUA_LIBNAME); -- get the table of the library
	lua_pushstring (L, "functionname") -- push the name
	lua_pushcfunction (L, function) -- push the overloaded function
	lua_settable (L, -3) -- set it to the library table

...

I think this should overwrite the whole function with my own code. But I really want to extend the old function. Probably I need to call the old function from my new?!
Maybe somebody has already done something like that and has some hints or 
ideas for me?
Thanks a lot!
Bye
Eva

--

--

  \ /           Sol-3 GmbH & Co. KG             Eva Schmidt
 --o-- Sol-3    Eltviller Straße 2              Phone: ++49 (0) 6123 7029 23
  / \           D-65399 Kiedrich                Fax:   ++49 (0) 6123 7029 29
                USt-ID:   DE 204978307          eMail: es@sol-3.de
                Register: WI HRA 6607
                Komplementär:    Sol-3 Verwaltungs GmbH
                Register:        WI HRB 117786
                Geschäftsführer: Norbert Geus, Dirk Zoller