I would like to know what happens if I push the lightuserdata into the registry twice using the same key.
My Code:
MyData *x, *y; //let's say these are valid pointers
lua_pushstring(L, "my_data");
lua_pushlightuserdata(L, static_cast<void *>(x));
lua_settable(L, LUA_REGISTRYINDEX);
lua_pushstring(L, "my_data");
lua_pushlightuserdata(L, static_cast<void *>(y));
lua_settable(L, LUA_REGISTRYINDEX);
lua_pushstring(L, "my_data");
lua_gettable(L, LUA_REGISTRYINDEX);
MyData *data = static_cast<MyData *>(lua_touserdata(L, -1));
//would the data be x or y?
Would the previously pushed pointer (x
) be replaced with the new one (y
)?
ADDED: And is there a way to check the list of keys that are currently registered?
The Lua registry is an ordinary Lua table. Your code is equivalent to
So, yes, after these two lines the value of
registry.my_data
is the value ofy
.