# Trying to move to 5.2 - replacement for LUA_GLOBALSINDEX?

This topic is 2508 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

I haven't used Lua in about 8 months (or more), so I'm trying to refresh my mind, while at the same time migrating to 5.2 from 5.1.
In a function I wrote way back then, I iterate over a table recursively descending into sub-tables, starting at the global index.

I used the global 'LUA_GLOBALSINDEX' which is no longer available in 5.2. What can I use instead?

For example, if I want to call:
lua_type(luaState, LUA_GLOBALSINDEX);

...to get the type of the global table itself (LUA_TTABLE, right?), how can I do that with Lua 5.2?

Would:
lua_pushglobaltable(luaState); int globalIndex = lua_tointeger(luaState, -1); 

...get me the index of the globals table?

##### Share on other sites
I don't use Lua 5.2, but try lua_getglobal
It is my understanding that macro is still available and has been redefined to behave the same way as it did in 5.1

##### Share on other sites
Doesn't that get a specific global, like:
lua_getglobal(lua, "MyGlobalVariable")

I want to get the table that all the global variables are stored in. That is to say, I want to get the table that is the parent of "MyGlobalVariable", not "MyGlobalVariable" itself.How can I do that?

##### Share on other sites
'_G' is the global table that holds everything. lua_getglobal(lua, "_G") should do the trick.
Apparently Lua 5.2 introduces "environments", so you should check the variable '_ENV' as well.

Beware _G is recursive, therefore _G contains _G as well.

##### Share on other sites
What confused me about _G, is this comment:
[size=2]http://www.lua.org/m...ual.html#pdf-_G

### [color=#000000][font=Helvetica, Arial, sans-serif]A global variable (not a function) that holds the global environment (see [/font]§2.2[color=#000000][font=Helvetica, Arial, sans-serif]). Lua itself does not use this variable; changing its value does not affect any environment, nor vice-versa.[/font] [/quote] Does this mean when I add values to the global environment, _G is not updated to reflect the changes? Also, "LUA_RIDX_GLOBALS: At this index the registry has the global environment." Would that mean LUA_RIDX_GLOBALS functions the same as LUA_GLOBALSINDEX used to? I mean, does this hold true: ([size=2]I'm not capable of testing it at the moment) lua_pushglobaltable(luaState); int globalIndex = lua_tointeger(luaState, -1); (globalIndex == LUA_RIDX_GLOBALS) //<------ (?) 

##### Share on other sites
I think it means you have to treat it as read only (it's confusing for me as well).

To create new variables, I do (in 5.1):

lua_pushnumber( m_luaVM, 1 ); lua_setglobal( m_luaVM, "myVar" );
That is the same as declaring 'myVar = 1'

To create a simple bidimensional table (i.e. like myTable[1][7] = 3):
 std::vector<int> keyMessages[numElements]; lua_createtable( m_luaVM, numElements, 0 ); for( int i=0; i<numElements; i++ ) { lua_createtable( m_luaVM, (int)keyMessages.size(), 0 ); for( size_t j=0; j<keyMessages.size(); j++ ) { lua_pushinteger( m_luaVM, keyMessages[j] ); // value lua_rawseti( m_luaVM, -2, (int)(j+1) ); //set table at key 'j+1' } lua_rawseti( m_luaVM, -2, (int)(i+1) ); //set table at key 'i+1' } lua_setglobal( m_luaVM, "myTable" ); 
Note I do "i+1" & "j+1" because Lua uses the convention that indexes start at 1, not 0

1. 1
2. 2
3. 3
4. 4
Rutin
12
5. 5

• 26
• 10
• 9
• 9
• 11
• ### Forum Statistics

• Total Topics
633694
• Total Posts
3013378
×