Re: recursively traverse globals table from C API
[
Date Prev][
Date Next][
Thread Prev][
Thread Next]
[
Date Index]
[
Thread Index]
- Subject: Re: recursively traverse globals table from C API
- From: Rici Lake <lua@...>
- Date: 2007年1月19日 21:43:52 -0500
On 19-Jan-07, at 9:31 PM, Jérôme VUARAND wrote:
2007年1月19日, Raymond Jacobs <raymondj@gmail.com>:
int idx=LUA_GLOBALSINDEX;
lua_getfenv(l,idx);
while(lua_next(l,idx)!=0)
{
const char* key=lua_tostring(l,-2);
//get value at -1 index and check type of it
//do somthing with key and value based on type of
value
//if value is a table call this function again to
traverse it, then
continue here
lua_pop(l,1);
}
You forget to push an initial nil on the stack before entering you
while loop (see lua_next documentation example).
He did push a nil, although I suspect it was not by design:
int idx=LUA_GLOBALSINDEX;
lua_getfenv(l,idx);
Since tables don't have environments, lua_getfenv() will do the job.
By the way, be careful with recursively enumerating tables; if there's
a circular reference, you'll find yourself running off the end of the C
stack. (And, since _G._G == _G, there is such a circular reference in
the standard globals table.)