[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Re: Lua 5 global state
- From: "D Burgess" <db@...>
- Date: Thu, 14 Aug 2003 22:37:58 +1000
I have done some reading and I guess my question is whether
the following scheme will work?
if (luaL_loadfile(L, my_script_file_name)) /* from lauxlib.h */
lua_error(L);
/* get a C function on the stack from the global env somehow */
<some code>
lua_getfenv(L, ,-1);
/* set it as the loaded chunk's environment
(it will act as the chunk's table of globals) */
lua_setfenv(L, -1);
/* run chunk */
lua_call(L, 0, 0);
/* set the global env back to what it was b4 the lua_call */
lua_setfenv(L, -1);
+++++++++++++++++++++++++++++++++
>D Burgess wrote:
>> Can someone explain to me how one saves/restores the state
>> of Lua Globals from within a C program (not via Lua script)?
>> Assume I have one Lua VM executing and I wish to save the
>> global state, execute a script then restore the state of
>> globals to what was prior to the script execution.
>
>In Lua 5 each closure maintains its own environment (globals.) In
>particular you can load a chunk, then set its environment to some prepared
>table before execution:
>
> if (luaL_loadfile(L, my_script_file_name)) /* from lauxlib.h */
> lua_error(L);
>
> /* prepare environment */
> lua_newtable(L);
> /* add some data here ... */
>
> /* set it as the loaded chunk's environment
> (it will act as the chunk's table of globals) */
> lua_setfenv(L, -2);
>
> /* run chunk */
> lua_call(L, 0, 0);
>
>Note that all closures that are created by the chunk will (by default)
>inherit this environment and _hold on to it_ even if you store them
>somewhere else. You can read some more about environments in the manual
>(see getfenv/setfenv and lua_getfenv/lua_setfenv.)
>
>--
>Wim