aboutsummaryrefslogtreecommitdiff
path: root/engines/sword25/util/lua_unpersist.cpp
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2017-01-28 18:47:11 +0100
committerWillem Jan Palenstijn2017-01-28 18:47:11 +0100
commitc3d533a72bedb469c42a3a8ee52830ac696a5533 (patch)
treec6d74354a57751935cf694ce21231dd9858618a3 /engines/sword25/util/lua_unpersist.cpp
parent0a5e36d689d19d11129a5ecd243342be0a8a8b81 (diff)
downloadscummvm-rg350-c3d533a72bedb469c42a3a8ee52830ac696a5533.tar.gz
scummvm-rg350-c3d533a72bedb469c42a3a8ee52830ac696a5533.tar.bz2
scummvm-rg350-c3d533a72bedb469c42a3a8ee52830ac696a5533.zip
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.
Diffstat (limited to 'engines/sword25/util/lua_unpersist.cpp')
-rw-r--r--engines/sword25/util/lua_unpersist.cpp16
1 files changed, 5 insertions, 11 deletions
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));