From c3d533a72bedb469c42a3a8ee52830ac696a5533 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Sat, 28 Jan 2017 18:47:11 +0100 Subject: SWORD25: Use direct integer index into indexTbl This matches the behaviour of the Pluto rewrite Eris, and avoids casting the integer indices to void *. I verified this code by running this method in parallel with the current lightuserdata/void* approach and asserting the retrieved objects were identical when loading a savegame. --- engines/sword25/util/lua_unpersist.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) (limited to 'engines/sword25') diff --git a/engines/sword25/util/lua_unpersist.cpp b/engines/sword25/util/lua_unpersist.cpp index 678ddb52db..9c304503b9 100644 --- a/engines/sword25/util/lua_unpersist.cpp +++ b/engines/sword25/util/lua_unpersist.cpp @@ -116,16 +116,13 @@ static void registerObjectInIndexTable(UnSerializationInfo *info, int index) { // >>>>> permTbl indexTbl ...... obj // Make sure there is enough room on the stack - lua_checkstack(info->luaState, 2); - - lua_pushlightuserdata(info->luaState, (void *)index); - // >>>>> permTbl indexTbl ...... obj index + lua_checkstack(info->luaState, 1); - lua_pushvalue(info->luaState, -2); - // >>>>> permTbl indexTbl ...... obj index obj + lua_pushvalue(info->luaState, -1); + // >>>>> permTbl indexTbl ...... obj obj // Push the k/v pair into the indexTbl - lua_settable(info->luaState, 2); + lua_rawseti(info->luaState, 2, index); // >>>>> permTbl indexTbl ...... obj } @@ -198,10 +195,7 @@ static void unpersist(UnSerializationInfo *info) { } else { // Fetch the object from the indexTbl - lua_pushlightuserdata(info->luaState, (void *)index); - // >>>>> permTbl indexTbl ...... index - - lua_gettable(info->luaState, 2); + lua_rawgeti(info->luaState, 2, index); // >>>>> permTbl indexTbl ...... ?obj? assert(!lua_isnil(info->luaState, -1)); -- cgit v1.2.3