[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Overloading Library Functions in the Registry
- From: Eva Schmidt <es@...>
- Date: Wed, 05 Sep 2007 16:44:21 +0200
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