[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Replacement for luaL_openlib in Lua 5.1
- From: Rici Lake <lua@...>
- Date: Sat, 3 Dec 2005 00:00:35 -0500
On 2-Dec-05, at 9:46 PM, David Burgess wrote:
On 12/3/05, Rici Lake <lua@ricilake.net> wrote:
As far as I know, lua_replace will not work with the LUA_ENVIRONINDEX
pseudo-index, [...]
This can be done, as it is in loadlib.c and liolib.c. It requires that
the
C function that is doing the lua_replace has its own lua stack (i.e.
has
been lua_call()ed).
Right you are; there is a special check in lua_replace for that very
case. So I take it back, you can set your own environment with
LUA_ENVIRONINDEX
I do not understand why.
The io library uses an environment table for data shared between the
various io methods: specifically, the current input and output file
descriptors. I imagine that the package system has a similar need.
The 5.0.2 io library uses the "FILE" metatable for this purpose, but
that makes the data non-private:
Lua 5.0.2 Copyright (C) 1994-2004 Tecgraf, PUC-Rio
> f = io.open"/dev/null"
> =f._input
file (0x8072170)
> =f._output
file (0x80721d0)
> =f
file (0x8072b10)
> io.output(f)
> =f._output
file (0x8072b10)
--> contrast (note that the fenv wouldn't be visible without the debug
library, which is one of the reasons you shouldn't include the debug
library in production builds)
Lua 5.1 (beta) Copyright (C) 1994-2005 Lua.org, PUC-Rio
> for k, v in pairs(debug.getfenv(io.read)) do print(k,v) end
1 file (0x281eaf00)
2 file (0x281eaf58)
__close function: 0x8082900
> =io.stdin
file (0x281eaf00)
> =io.stdout
file (0x281eaf58)
>