Jump to content
  • Advertisement
Sign in to follow this  
Servant of the Lord

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.

If you intended to correct an error in the post then please contact us.

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 this post


Link to post
Share on other sites
Advertisement
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 this post


Link to post
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 this post


Link to post
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

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!