diff options
| author | Benoit Germain <benoit.germain@ubisoft.com> | 2024-05-27 10:34:57 +0200 |
|---|---|---|
| committer | Benoit Germain <benoit.germain@ubisoft.com> | 2024-05-27 10:34:57 +0200 |
| commit | a30ac3790edea8329c199c9c42ff4150cf20c8ba (patch) | |
| tree | aea060cc17ac6783389e2561e81b3b74c74ab6ad /src/intercopycontext.cpp | |
| parent | 96be015111e2d4b05ae8cb9496b752472e8578a9 (diff) | |
| download | lanes-a30ac3790edea8329c199c9c42ff4150cf20c8ba.tar.gz lanes-a30ac3790edea8329c199c9c42ff4150cf20c8ba.tar.bz2 lanes-a30ac3790edea8329c199c9c42ff4150cf20c8ba.zip | |
More string_view + improved DEBUGSPEW output
Diffstat (limited to 'src/intercopycontext.cpp')
| -rw-r--r-- | src/intercopycontext.cpp | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/intercopycontext.cpp b/src/intercopycontext.cpp index 6684f3f..67e4e03 100644 --- a/src/intercopycontext.cpp +++ b/src/intercopycontext.cpp | |||
| @@ -29,6 +29,7 @@ THE SOFTWARE. | |||
| 29 | #include "debugspew.h" | 29 | #include "debugspew.h" |
| 30 | #include "deep.h" | 30 | #include "deep.h" |
| 31 | #include "keeper.h" | 31 | #include "keeper.h" |
| 32 | #include "linda.h" | ||
| 32 | #include "universe.h" | 33 | #include "universe.h" |
| 33 | 34 | ||
| 34 | // ################################################################################################# | 35 | // ################################################################################################# |
| @@ -263,10 +264,10 @@ void InterCopyContext::copy_func() const | |||
| 263 | for (_n = 0; (_c.name = lua_getupvalue(L1, L1_i, 1 + _n)) != nullptr; ++_n) { // L1: ... _G up[n] | 264 | for (_n = 0; (_c.name = lua_getupvalue(L1, L1_i, 1 + _n)) != nullptr; ++_n) { // L1: ... _G up[n] |
| 264 | DEBUGSPEW_CODE(DebugSpew(U) << "UPNAME[" << _n << "]: " << _c.name << " -> "); | 265 | DEBUGSPEW_CODE(DebugSpew(U) << "UPNAME[" << _n << "]: " << _c.name << " -> "); |
| 265 | if (lua_rawequal(L1, -1, -2)) { // is the upvalue equal to the global table? | 266 | if (lua_rawequal(L1, -1, -2)) { // is the upvalue equal to the global table? |
| 266 | DEBUGSPEW_CODE(DebugSpew(U) << "pushing destination global scope" << std::endl); | 267 | DEBUGSPEW_CODE(DebugSpew(nullptr) << "pushing destination global scope" << std::endl); |
| 267 | lua_pushglobaltable(L2); // L2: ... {cache} ... function <upvalues> | 268 | lua_pushglobaltable(L2); // L2: ... {cache} ... function <upvalues> |
| 268 | } else { | 269 | } else { |
| 269 | DEBUGSPEW_CODE(DebugSpew(U) << "copying value" << std::endl); | 270 | DEBUGSPEW_CODE(DebugSpew(nullptr) << "copying value" << std::endl); |
| 270 | _c.L1_i = SourceIndex{ lua_gettop(L1) }; | 271 | _c.L1_i = SourceIndex{ lua_gettop(L1) }; |
| 271 | if (!_c.inter_copy_one()) { // L2: ... {cache} ... function <upvalues> | 272 | if (!_c.inter_copy_one()) { // L2: ... {cache} ... function <upvalues> |
| 272 | raise_luaL_error(getErrL(), "Cannot copy upvalue type '%s'", luaL_typename(L1, -1)); | 273 | raise_luaL_error(getErrL(), "Cannot copy upvalue type '%s'", luaL_typename(L1, -1)); |
| @@ -874,13 +875,28 @@ void InterCopyContext::inter_copy_keyvaluepair() const | |||
| 874 | [[nodiscard]] bool InterCopyContext::inter_copy_lightuserdata() const | 875 | [[nodiscard]] bool InterCopyContext::inter_copy_lightuserdata() const |
| 875 | { | 876 | { |
| 876 | void* const _p{ lua_touserdata(L1, L1_i) }; | 877 | void* const _p{ lua_touserdata(L1, L1_i) }; |
| 877 | // TODO: recognize and print known UniqueKey names here | 878 | // recognize and print known UniqueKey names here |
| 878 | DEBUGSPEW_CODE(DebugSpew(nullptr) << _p << std::endl); | 879 | if constexpr (USE_DEBUG_SPEW()) { |
| 880 | bool _found{ false }; | ||
| 881 | static constexpr std::array<std::reference_wrapper<UniqueKey const>, 3> kKeysToCheck{ kLindaBatched, kCancelError, kNilSentinel }; | ||
| 882 | for (UniqueKey const& _key : kKeysToCheck) { | ||
| 883 | if (_key.equals(L1, L1_i)) { | ||
| 884 | DEBUGSPEW_CODE(DebugSpew(nullptr) << _key.debugName); | ||
| 885 | _found = true; | ||
| 886 | break; | ||
| 887 | } | ||
| 888 | } | ||
| 889 | if (!_found) { | ||
| 890 | DEBUGSPEW_CODE(DebugSpew(nullptr) << _p); | ||
| 891 | } | ||
| 892 | } | ||
| 879 | // when copying a nil sentinel in a non-keeper, write a nil in the destination | 893 | // when copying a nil sentinel in a non-keeper, write a nil in the destination |
| 880 | if (mode != LookupMode::ToKeeper && kNilSentinel.equals(L1, L1_i)) { | 894 | if (mode != LookupMode::ToKeeper && kNilSentinel.equals(L1, L1_i)) { |
| 895 | DEBUGSPEW_CODE(DebugSpew(nullptr) << " as nil" << std::endl); | ||
| 881 | lua_pushnil(L2); | 896 | lua_pushnil(L2); |
| 882 | } else { | 897 | } else { |
| 883 | lua_pushlightuserdata(L2, _p); | 898 | lua_pushlightuserdata(L2, _p); |
| 899 | DEBUGSPEW_CODE(DebugSpew(nullptr) << std::endl); | ||
| 884 | } | 900 | } |
| 885 | return true; | 901 | return true; |
| 886 | } | 902 | } |
