[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Current state of 5.1, and the PS2.
- From: Rici Lake <lua@...>
- Date: Thu, 2 Nov 2006 21:03:05 -0500
On 2-Nov-06, at 8:49 PM, Glenn Maynard wrote:
(What is it that requires these functions to be called this way?)
Some libraries require the existence of a current function environment,
and may change it to some other table in order to facilitate setting
the environment of the functions (and possibly userdata) created by the
library.
If the luaopen_* function is not lua_call'ed, and is not in the context
of a lua_call, there will be no call frame to get the function
environment from.
Additionally, in accordance with the new module system, the luaopen_*
function may wish to know the name it was loaded as, which should be
provided as the first argument to the lua_call.
Since the luaopen_* function may change the function environment, it is
a good idea to give it a fresh one; linit.c uses the following idiom,
which I've been following:
lua_pushcfunction(L, luaopen_foo);
lua_pushstring(L, "foo");
lua_call(L, 1, 0);
I believe that's the same initialization which will be done by
require(), so the luaopen_* function doesn't need to know whether it's
been dynamically loaded or statically compiled.