diff options
| author | Benoit Germain <benoit.germain@ubisoft.com> | 2024-06-04 09:21:15 +0200 |
|---|---|---|
| committer | Benoit Germain <benoit.germain@ubisoft.com> | 2024-06-04 09:21:15 +0200 |
| commit | 3a86e1f2fde002199fff0ca4bb2ed4674b32ec8e (patch) | |
| tree | a2e2f10dff1b6659fdc69f4ac205bbae6f9da604 | |
| parent | 2baf7a6e001951d08098149d80d7ce79e7035a16 (diff) | |
| download | lanes-3a86e1f2fde002199fff0ca4bb2ed4674b32ec8e.tar.gz lanes-3a86e1f2fde002199fff0ca4bb2ed4674b32ec8e.tar.bz2 lanes-3a86e1f2fde002199fff0ca4bb2ed4674b32ec8e.zip | |
Remove some useless compatibility stuff
| -rw-r--r-- | src/compat.h | 37 | ||||
| -rw-r--r-- | src/linda.cpp | 5 | ||||
| -rw-r--r-- | src/tools.cpp | 10 |
3 files changed, 5 insertions, 47 deletions
diff --git a/src/compat.h b/src/compat.h index fb31cab..7ac864e 100644 --- a/src/compat.h +++ b/src/compat.h | |||
| @@ -61,7 +61,6 @@ inline char const* lua_typename(lua_State* L_, LuaType t_) | |||
| 61 | // add some Lua 5.3-style API when building for Lua 5.1 | 61 | // add some Lua 5.3-style API when building for Lua 5.1 |
| 62 | #if LUA_VERSION_NUM == 501 | 62 | #if LUA_VERSION_NUM == 501 |
| 63 | 63 | ||
| 64 | #define lua501_equal lua_equal | ||
| 65 | inline int lua_absindex(lua_State* L_, int idx_) | 64 | inline int lua_absindex(lua_State* L_, int idx_) |
| 66 | { | 65 | { |
| 67 | return (((idx_) >= 0 || (idx_) <= LUA_REGISTRYINDEX) ? (idx_) : lua_gettop(L_) + (idx_) + 1); | 66 | return (((idx_) >= 0 || (idx_) <= LUA_REGISTRYINDEX) ? (idx_) : lua_gettop(L_) + (idx_) + 1); |
| @@ -107,18 +106,6 @@ int luaL_getsubtable(lua_State* L_, int idx_, const char* fname_); | |||
| 107 | // wrap Lua 5.2 calls under Lua 5.1 API when it is simpler that way | 106 | // wrap Lua 5.2 calls under Lua 5.1 API when it is simpler that way |
| 108 | #if LUA_VERSION_NUM == 502 | 107 | #if LUA_VERSION_NUM == 502 |
| 109 | 108 | ||
| 110 | #ifndef lua501_equal // already defined when compatibility is active in luaconf.h | ||
| 111 | inline int lua501_equal(lua_State* L_, int a_, int b_) | ||
| 112 | { | ||
| 113 | return lua_compare(L_, a_, b_, LUA_OPEQ); | ||
| 114 | } | ||
| 115 | #endif // lua501_equal | ||
| 116 | #ifndef lua_lessthan // already defined when compatibility is active in luaconf.h | ||
| 117 | inline int lua_lessthan(lua_State* L_, int a_, int b_) | ||
| 118 | { | ||
| 119 | return lua_compare(L_, a_, b_, LUA_OPLT); | ||
| 120 | } | ||
| 121 | #endif // lua_lessthan | ||
| 122 | inline void luaG_registerlibfuncs(lua_State* L_, luaL_Reg const funcs_[]) | 109 | inline void luaG_registerlibfuncs(lua_State* L_, luaL_Reg const funcs_[]) |
| 123 | { | 110 | { |
| 124 | luaL_setfuncs(L_, funcs_, 0); | 111 | luaL_setfuncs(L_, funcs_, 0); |
| @@ -149,18 +136,6 @@ inline int lua504_dump(lua_State* L_, lua_Writer writer_, void* data_, [[maybe_u | |||
| 149 | // wrap Lua 5.3 calls under Lua 5.1 API when it is simpler that way | 136 | // wrap Lua 5.3 calls under Lua 5.1 API when it is simpler that way |
| 150 | #if LUA_VERSION_NUM == 503 | 137 | #if LUA_VERSION_NUM == 503 |
| 151 | 138 | ||
| 152 | #ifndef lua501_equal // already defined when compatibility is active in luaconf.h | ||
| 153 | inline int lua501_equal(lua_State* L_, int a_, int b_) | ||
| 154 | { | ||
| 155 | return lua_compare(L_, a_, b_, LUA_OPEQ); | ||
| 156 | } | ||
| 157 | #endif // lua501_equal | ||
| 158 | #ifndef lua_lessthan // already defined when compatibility is active in luaconf.h | ||
| 159 | inline int lua_lessthan(lua_State* L_, int a_, int b_) | ||
| 160 | { | ||
| 161 | return lua_compare(L_, a_, b_, LUA_OPLT); | ||
| 162 | } | ||
| 163 | #endif // lua_lessthan | ||
| 164 | inline void luaG_registerlibfuncs(lua_State* L_, luaL_Reg const funcs_[]) | 139 | inline void luaG_registerlibfuncs(lua_State* L_, luaL_Reg const funcs_[]) |
| 165 | { | 140 | { |
| 166 | luaL_setfuncs(L_, funcs_, 0); | 141 | luaL_setfuncs(L_, funcs_, 0); |
| @@ -193,18 +168,6 @@ int lua_setiuservalue(lua_State* L_, int idx_, int n_); | |||
| 193 | // wrap Lua 5.4 calls under Lua 5.1 API when it is simpler that way | 168 | // wrap Lua 5.4 calls under Lua 5.1 API when it is simpler that way |
| 194 | #if LUA_VERSION_NUM == 504 | 169 | #if LUA_VERSION_NUM == 504 |
| 195 | 170 | ||
| 196 | #ifndef lua501_equal // already defined when compatibility is active in luaconf.h | ||
| 197 | inline int lua501_equal(lua_State* L_, int a_, int b_) | ||
| 198 | { | ||
| 199 | return lua_compare(L_, a_, b_, LUA_OPEQ); | ||
| 200 | } | ||
| 201 | #endif // lua501_equal | ||
| 202 | #ifndef lua_lessthan // already defined when compatibility is active in luaconf.h | ||
| 203 | inline int lua_lessthan(lua_State* L_, int a_, int b_) | ||
| 204 | { | ||
| 205 | return lua_compare(L_, a_, b_, LUA_OPLT); | ||
| 206 | } | ||
| 207 | #endif // lua_lessthan | ||
| 208 | inline void luaG_registerlibfuncs(lua_State* L_, luaL_Reg const funcs_[]) | 171 | inline void luaG_registerlibfuncs(lua_State* L_, luaL_Reg const funcs_[]) |
| 209 | { | 172 | { |
| 210 | luaL_setfuncs(L_, funcs_, 0); | 173 | luaL_setfuncs(L_, funcs_, 0); |
diff --git a/src/linda.cpp b/src/linda.cpp index 2a31799..f1a99fd 100644 --- a/src/linda.cpp +++ b/src/linda.cpp | |||
| @@ -461,10 +461,7 @@ LUAG_FUNC(linda_receive) | |||
| 461 | keeper_api_t _selected_keeper_receive{ nullptr }; | 461 | keeper_api_t _selected_keeper_receive{ nullptr }; |
| 462 | int _expected_pushed_min{ 0 }, _expected_pushed_max{ 0 }; | 462 | int _expected_pushed_min{ 0 }, _expected_pushed_max{ 0 }; |
| 463 | // are we in batched mode? | 463 | // are we in batched mode? |
| 464 | kLindaBatched.pushKey(L_); | 464 | if (kLindaBatched.equals(L_, -1)) { |
| 465 | int const _is_batched{ lua501_equal(L_, _key_i, -1) }; | ||
| 466 | lua_pop(L_, 1); | ||
| 467 | if (_is_batched) { | ||
| 468 | // no need to pass linda.batched in the keeper state | 465 | // no need to pass linda.batched in the keeper state |
| 469 | ++_key_i; | 466 | ++_key_i; |
| 470 | // make sure the keys are of a valid type | 467 | // make sure the keys are of a valid type |
diff --git a/src/tools.cpp b/src/tools.cpp index 94e941d..e6dadd2 100644 --- a/src/tools.cpp +++ b/src/tools.cpp | |||
| @@ -151,14 +151,12 @@ static void update_lookup_entry(lua_State* L_, int ctxBase_, int depth_) | |||
| 151 | std::string_view const _newName{ tools::PushFQN(L_, _fqn, depth_) }; // L_: ... {bfc} k o name? "f.q.n" | 151 | std::string_view const _newName{ tools::PushFQN(L_, _fqn, depth_) }; // L_: ... {bfc} k o name? "f.q.n" |
| 152 | // Lua 5.2 introduced a hash randomizer seed which causes table iteration to yield a different key order | 152 | // Lua 5.2 introduced a hash randomizer seed which causes table iteration to yield a different key order |
| 153 | // on different VMs even when the tables are populated the exact same way. | 153 | // on different VMs even when the tables are populated the exact same way. |
| 154 | // When Lua is built with compatibility options (such as LUA_COMPAT_ALL), | 154 | // Also, when Lua is built with compatibility options (such as LUA_COMPAT_ALL), some base libraries register functions under multiple names. |
| 155 | // this causes several base libraries to register functions under multiple names. | 155 | // This, with the randomizer, can cause the first generated name of an object to be different on different VMs, which breaks function transfer. |
| 156 | // This, with the randomizer, can cause the first generated name of an object to be different on different VMs, | ||
| 157 | // which breaks function transfer. | ||
| 158 | // Also, nothing prevents any external module from exposing a given object under several names, so... | 156 | // Also, nothing prevents any external module from exposing a given object under several names, so... |
| 159 | // Therefore, when we encounter an object for which a name was previously registered, we need to select the names | 157 | // Therefore, when we encounter an object for which a name was previously registered, we need to select the a single name |
| 160 | // based on some sorting order so that we end up with the same name in all databases whatever order the table walk yielded | 158 | // based on some sorting order so that we end up with the same name in all databases whatever order the table walk yielded |
| 161 | if (!_prevName.empty() && (_prevName.size() < _newName.size() || lua_lessthan(L_, -2, -1))) { | 159 | if (!_prevName.empty() && ((_prevName.size() < _newName.size()) || (_prevName <= _newName))) { |
| 162 | DEBUGSPEW_CODE(DebugSpew(_U) << lua_typename(L_, lua_type(L_, -3)) << " '" << _newName << "' remains named '" << _prevName << "'" << std::endl); | 160 | DEBUGSPEW_CODE(DebugSpew(_U) << lua_typename(L_, lua_type(L_, -3)) << " '" << _newName << "' remains named '" << _prevName << "'" << std::endl); |
| 163 | // the previous name is 'smaller' than the one we just generated: keep it! | 161 | // the previous name is 'smaller' than the one we just generated: keep it! |
| 164 | lua_pop(L_, 3); // L_: ... {bfc} k | 162 | lua_pop(L_, 3); // L_: ... {bfc} k |
