diff options
| author | Benoit Germain <benoit.germain@ubisoft.com> | 2024-05-20 17:11:20 +0200 |
|---|---|---|
| committer | Benoit Germain <benoit.germain@ubisoft.com> | 2024-05-20 17:11:20 +0200 |
| commit | eb090da027012292e8856dc01856cde8880d3467 (patch) | |
| tree | 7cd0480536ad52e76d9922a05f926ed4d7eb133f /src | |
| parent | ac8caa415b36c875578c2ad0490965b80be2f37e (diff) | |
| download | lanes-eb090da027012292e8856dc01856cde8880d3467.tar.gz lanes-eb090da027012292e8856dc01856cde8880d3467.tar.bz2 lanes-eb090da027012292e8856dc01856cde8880d3467.zip | |
Lane::debugName is a std::string_view
Diffstat (limited to 'src')
| -rw-r--r-- | src/compat.h | 13 | ||||
| -rw-r--r-- | src/deep.cpp | 18 | ||||
| -rw-r--r-- | src/deep.h | 2 | ||||
| -rw-r--r-- | src/intercopycontext.cpp | 8 | ||||
| -rw-r--r-- | src/lane.cpp | 18 | ||||
| -rw-r--r-- | src/lane.h | 2 | ||||
| -rw-r--r-- | src/lanes.cpp | 20 | ||||
| -rw-r--r-- | src/tracker.cpp | 2 | ||||
| -rw-r--r-- | src/universe.cpp | 2 |
9 files changed, 47 insertions, 38 deletions
diff --git a/src/compat.h b/src/compat.h index 3fb4e2d..b5afe17 100644 --- a/src/compat.h +++ b/src/compat.h | |||
| @@ -254,9 +254,20 @@ LuaType luaG_getmodule(lua_State* L_, char const* name_); | |||
| 254 | // ################################################################################################# | 254 | // ################################################################################################# |
| 255 | 255 | ||
| 256 | // a replacement of lua_tolstring | 256 | // a replacement of lua_tolstring |
| 257 | inline std::string_view lua_tostringview(lua_State* L_, int idx_) | 257 | [[nodiscard]] inline std::string_view lua_tostringview(lua_State* L_, int idx_) |
| 258 | { | 258 | { |
| 259 | size_t _len{ 0 }; | 259 | size_t _len{ 0 }; |
| 260 | char const* _str{ lua_tolstring(L_, idx_, &_len) }; | 260 | char const* _str{ lua_tolstring(L_, idx_, &_len) }; |
| 261 | return std::string_view{ _str, _len }; | 261 | return std::string_view{ _str, _len }; |
| 262 | } | 262 | } |
| 263 | |||
| 264 | [[nodiscard]] inline std::string_view lua_pushstringview(lua_State* L_, std::string_view const& str_) | ||
| 265 | { | ||
| 266 | #if LUA_VERSION_NUM == 501 | ||
| 267 | // lua_pushlstring doesn't return a value in Lua 5.1 | ||
| 268 | lua_pushlstring(L_, str_.data(), str_.size()); | ||
| 269 | return lua_tostringview(L_, -1); | ||
| 270 | #else | ||
| 271 | return std::string_view{ lua_pushlstring(L_, str_.data(), str_.size()), str_.size() }; | ||
| 272 | #endif // LUA_VERSION_NUM > 501 | ||
| 273 | } \ No newline at end of file | ||
diff --git a/src/deep.cpp b/src/deep.cpp index 1685ebb..51c9250 100644 --- a/src/deep.cpp +++ b/src/deep.cpp | |||
| @@ -184,7 +184,7 @@ void DeepFactory::DeleteDeepObject(lua_State* L_, DeepPrelude* o_) | |||
| 184 | * used in this Lua state (metatable, registring it). Otherwise, increments the | 184 | * used in this Lua state (metatable, registring it). Otherwise, increments the |
| 185 | * reference count. | 185 | * reference count. |
| 186 | */ | 186 | */ |
| 187 | char const* DeepFactory::PushDeepProxy(DestState L_, DeepPrelude* prelude_, int nuv_, LookupMode mode_) | 187 | std::string_view DeepFactory::PushDeepProxy(DestState L_, DeepPrelude* prelude_, int nuv_, LookupMode mode_) |
| 188 | { | 188 | { |
| 189 | // Check if a proxy already exists | 189 | // Check if a proxy already exists |
| 190 | kDeepProxyCacheRegKey.getSubTableMode(L_, "v"); // L_: DPC | 190 | kDeepProxyCacheRegKey.getSubTableMode(L_, "v"); // L_: DPC |
| @@ -192,7 +192,7 @@ char const* DeepFactory::PushDeepProxy(DestState L_, DeepPrelude* prelude_, int | |||
| 192 | lua_rawget(L_, -2); // L_: DPC proxy | 192 | lua_rawget(L_, -2); // L_: DPC proxy |
| 193 | if (!lua_isnil(L_, -1)) { | 193 | if (!lua_isnil(L_, -1)) { |
| 194 | lua_remove(L_, -2); // L_: proxy | 194 | lua_remove(L_, -2); // L_: proxy |
| 195 | return nullptr; | 195 | return std::string_view{}; |
| 196 | } else { | 196 | } else { |
| 197 | lua_pop(L_, 1); // L_: DPC | 197 | lua_pop(L_, 1); // L_: DPC |
| 198 | } | 198 | } |
| @@ -264,18 +264,18 @@ char const* DeepFactory::PushDeepProxy(DestState L_, DeepPrelude* prelude_, int | |||
| 264 | lua_pushfstring(L_, "error while requiring '%s' identified by DeepFactory::moduleName: ", _modname.data()); | 264 | lua_pushfstring(L_, "error while requiring '%s' identified by DeepFactory::moduleName: ", _modname.data()); |
| 265 | lua_insert(L_, -2); // L_: DPC proxy metatable prefix error | 265 | lua_insert(L_, -2); // L_: DPC proxy metatable prefix error |
| 266 | lua_concat(L_, 2); // L_: DPC proxy metatable error | 266 | lua_concat(L_, 2); // L_: DPC proxy metatable error |
| 267 | return lua_tostring(L_, -1); | 267 | return lua_tostringview(L_, -1); |
| 268 | } | 268 | } |
| 269 | } else { // already loaded, we are happy | 269 | } else { // already loaded, we are happy |
| 270 | lua_pop(L_, 4); // L_: DPC proxy metatable | 270 | lua_pop(L_, 4); // L_: DPC proxy metatable |
| 271 | } | 271 | } |
| 272 | } else { // no L.registry._LOADED; can this ever happen? | 272 | } else { // no L.registry._LOADED; can this ever happen? |
| 273 | lua_pop(L_, 6); // L_: | 273 | lua_pop(L_, 6); // L_: |
| 274 | return "unexpected error while requiring a module identified by DeepFactory::moduleName"; | 274 | return std::string_view{ "unexpected error while requiring a module identified by DeepFactory::moduleName" }; |
| 275 | } | 275 | } |
| 276 | } else { // a module name, but no require() function :-( | 276 | } else { // a module name, but no require() function :-( |
| 277 | lua_pop(L_, 4); // L_: | 277 | lua_pop(L_, 4); // L_: |
| 278 | return "lanes receiving deep userdata should register the 'package' library"; | 278 | return std::string_view{ "lanes receiving deep userdata should register the 'package' library" }; |
| 279 | } | 279 | } |
| 280 | } | 280 | } |
| 281 | } | 281 | } |
| @@ -291,7 +291,7 @@ char const* DeepFactory::PushDeepProxy(DestState L_, DeepPrelude* prelude_, int | |||
| 291 | lua_remove(L_, -2); // L_: proxy | 291 | lua_remove(L_, -2); // L_: proxy |
| 292 | LUA_ASSERT(L_, lua_type_as_enum(L_, -1) == LuaType::USERDATA); | 292 | LUA_ASSERT(L_, lua_type_as_enum(L_, -1) == LuaType::USERDATA); |
| 293 | STACK_CHECK(L_, 0); | 293 | STACK_CHECK(L_, 0); |
| 294 | return nullptr; | 294 | return std::string_view{}; |
| 295 | } | 295 | } |
| 296 | 296 | ||
| 297 | // ################################################################################################# | 297 | // ################################################################################################# |
| @@ -336,9 +336,9 @@ int DeepFactory::pushDeepUserdata(DestState L_, int nuv_) const | |||
| 336 | raise_luaL_error(L_, "Bad DeepFactory::newDeepObjectInternal overload: should not push anything on the stack"); | 336 | raise_luaL_error(L_, "Bad DeepFactory::newDeepObjectInternal overload: should not push anything on the stack"); |
| 337 | } | 337 | } |
| 338 | 338 | ||
| 339 | char const* const _err{ DeepFactory::PushDeepProxy(L_, _prelude, nuv_, LookupMode::LaneBody) }; // proxy | 339 | std::string_view const _err{ DeepFactory::PushDeepProxy(L_, _prelude, nuv_, LookupMode::LaneBody) }; // proxy |
| 340 | if (_err != nullptr) { | 340 | if (!_err.empty()) { |
| 341 | raise_luaL_error(L_, _err); | 341 | raise_luaL_error(L_, _err.data()); |
| 342 | } | 342 | } |
| 343 | STACK_CHECK(L_, 1); | 343 | STACK_CHECK(L_, 1); |
| 344 | return 1; | 344 | return 1; |
| @@ -75,7 +75,7 @@ class DeepFactory | |||
| 75 | [[nodiscard]] int pushDeepUserdata(DestState L_, int nuv_) const; | 75 | [[nodiscard]] int pushDeepUserdata(DestState L_, int nuv_) const; |
| 76 | [[nodiscard]] DeepPrelude* toDeep(lua_State* L_, int index_) const; | 76 | [[nodiscard]] DeepPrelude* toDeep(lua_State* L_, int index_) const; |
| 77 | static void DeleteDeepObject(lua_State* L_, DeepPrelude* o_); | 77 | static void DeleteDeepObject(lua_State* L_, DeepPrelude* o_); |
| 78 | [[nodiscard]] static char const* PushDeepProxy(DestState L_, DeepPrelude* o_, int nuv_, LookupMode mode_); | 78 | [[nodiscard]] static std::string_view PushDeepProxy(DestState L_, DeepPrelude* o_, int nuv_, LookupMode mode_); |
| 79 | }; | 79 | }; |
| 80 | 80 | ||
| 81 | // ################################################################################################# | 81 | // ################################################################################################# |
diff --git a/src/intercopycontext.cpp b/src/intercopycontext.cpp index 1487afd..08709e5 100644 --- a/src/intercopycontext.cpp +++ b/src/intercopycontext.cpp | |||
| @@ -751,9 +751,9 @@ void InterCopyContext::inter_copy_keyvaluepair() const | |||
| 751 | STACK_CHECK(L1, _nuv); | 751 | STACK_CHECK(L1, _nuv); |
| 752 | 752 | ||
| 753 | DeepPrelude* const u{ *lua_tofulluserdata<DeepPrelude*>(L1, L1_i) }; | 753 | DeepPrelude* const u{ *lua_tofulluserdata<DeepPrelude*>(L1, L1_i) }; |
| 754 | char const* errmsg{ DeepFactory::PushDeepProxy(L2, u, _nuv, mode) }; // L1: ... u [uv]* L2: u | 754 | std::string_view const errmsg{ DeepFactory::PushDeepProxy(L2, u, _nuv, mode) }; // L1: ... u [uv]* L2: u |
| 755 | if (errmsg != nullptr) { | 755 | if (!errmsg.empty()) { |
| 756 | raise_luaL_error(getErrL(), errmsg); | 756 | raise_luaL_error(getErrL(), errmsg.data()); |
| 757 | } | 757 | } |
| 758 | 758 | ||
| 759 | // transfer all uservalues of the source in the destination | 759 | // transfer all uservalues of the source in the destination |
| @@ -1142,7 +1142,7 @@ static char const* vt_names[] = { | |||
| 1142 | // transfers stuff from L1->_G["package"] to L2->_G["package"] | 1142 | // transfers stuff from L1->_G["package"] to L2->_G["package"] |
| 1143 | // returns InterCopyResult::Success if everything is fine | 1143 | // returns InterCopyResult::Success if everything is fine |
| 1144 | // returns InterCopyResult::Error if pushed an error message in L1 | 1144 | // returns InterCopyResult::Error if pushed an error message in L1 |
| 1145 | // else raise an error in L1 | 1145 | // else raise an error in whichever state is not a keeper |
| 1146 | [[nodiscard]] InterCopyResult InterCopyContext::inter_copy_package() const | 1146 | [[nodiscard]] InterCopyResult InterCopyContext::inter_copy_package() const |
| 1147 | { | 1147 | { |
| 1148 | DEBUGSPEW_CODE(fprintf(stderr, INDENT_BEGIN "InterCopyContext::inter_copy_package()\n" INDENT_END(U))); | 1148 | DEBUGSPEW_CODE(fprintf(stderr, INDENT_BEGIN "InterCopyContext::inter_copy_package()\n" INDENT_END(U))); |
diff --git a/src/lane.cpp b/src/lane.cpp index 3017806..e838b7d 100644 --- a/src/lane.cpp +++ b/src/lane.cpp | |||
| @@ -46,7 +46,7 @@ static LUAG_FUNC(get_debug_threadname) | |||
| 46 | { | 46 | { |
| 47 | Lane* const _lane{ ToLane(L_, 1) }; | 47 | Lane* const _lane{ ToLane(L_, 1) }; |
| 48 | luaL_argcheck(L_, lua_gettop(L_) == 1, 2, "too many arguments"); | 48 | luaL_argcheck(L_, lua_gettop(L_) == 1, 2, "too many arguments"); |
| 49 | lua_pushstring(L_, _lane->debugName); | 49 | std::ignore = lua_pushstringview(L_, _lane->debugName); |
| 50 | return 1; | 50 | return 1; |
| 51 | } | 51 | } |
| 52 | 52 | ||
| @@ -278,7 +278,7 @@ static int thread_index_number(lua_State* L_) | |||
| 278 | lua_replace(L_, -3); // L_: lane n error() "error" | 278 | lua_replace(L_, -3); // L_: lane n error() "error" |
| 279 | lua_pushinteger(L_, 3); // L_: lane n error() "error" 3 | 279 | lua_pushinteger(L_, 3); // L_: lane n error() "error" 3 |
| 280 | lua_call(L_, 2, 0); // error(tostring(errstring), 3) -> doesn't return // L_: lane n | 280 | lua_call(L_, 2, 0); // error(tostring(errstring), 3) -> doesn't return // L_: lane n |
| 281 | raise_luaL_error(L_, "%s: should not get here!", _lane->debugName); | 281 | raise_luaL_error(L_, "%s: should not get here!", _lane->debugName.data()); |
| 282 | } else { | 282 | } else { |
| 283 | lua_pop(L_, 1); // L_: lane n {uv} | 283 | lua_pop(L_, 1); // L_: lane n {uv} |
| 284 | } | 284 | } |
| @@ -345,7 +345,7 @@ static LUAG_FUNC(thread_index) | |||
| 345 | lua_pushvalue(L_, kKey); // L_: mt error "Unknown key: " k | 345 | lua_pushvalue(L_, kKey); // L_: mt error "Unknown key: " k |
| 346 | lua_concat(L_, 2); // L_: mt error "Unknown key: <k>" | 346 | lua_concat(L_, 2); // L_: mt error "Unknown key: <k>" |
| 347 | lua_call(L_, 1, 0); // error( "Unknown key: " .. key) -> doesn't return // L_: mt | 347 | lua_call(L_, 1, 0); // error( "Unknown key: " .. key) -> doesn't return // L_: mt |
| 348 | raise_luaL_error(L_, "%s[%s]: should not get here!", _lane->debugName, lua_typename(L_, lua_type(L_, kKey))); | 348 | raise_luaL_error(L_, "%s[%s]: should not get here!", _lane->debugName.data(), lua_typename(L_, lua_type(L_, kKey))); |
| 349 | } | 349 | } |
| 350 | } | 350 | } |
| 351 | 351 | ||
| @@ -739,7 +739,7 @@ static void lane_main(Lane* lane_) | |||
| 739 | lua_rawget(L_, -2); // L_: ud uservalue gc_cb|nil | 739 | lua_rawget(L_, -2); // L_: ud uservalue gc_cb|nil |
| 740 | if (!lua_isnil(L_, -1)) { | 740 | if (!lua_isnil(L_, -1)) { |
| 741 | lua_remove(L_, -2); // L_: ud gc_cb|nil | 741 | lua_remove(L_, -2); // L_: ud gc_cb|nil |
| 742 | lua_pushstring(L_, _lane->debugName); // L_: ud gc_cb name | 742 | std::ignore = lua_pushstringview(L_, _lane->debugName); // L_: ud gc_cb name |
| 743 | _have_gc_cb = true; | 743 | _have_gc_cb = true; |
| 744 | } else { | 744 | } else { |
| 745 | lua_pop(L_, 2); // L_: ud | 745 | lua_pop(L_, 2); // L_: ud |
| @@ -759,7 +759,7 @@ static void lane_main(Lane* lane_) | |||
| 759 | // no longer accessing the Lua VM: we can close right now | 759 | // no longer accessing the Lua VM: we can close right now |
| 760 | _lane->close(); | 760 | _lane->close(); |
| 761 | // just in case, but _lane will be freed soon so... | 761 | // just in case, but _lane will be freed soon so... |
| 762 | _lane->debugName = "<gc>"; | 762 | _lane->debugName = std::string_view{ "<gc>" }; |
| 763 | } | 763 | } |
| 764 | 764 | ||
| 765 | // Clean up after a (finished) thread | 765 | // Clean up after a (finished) thread |
| @@ -812,12 +812,12 @@ void Lane::changeDebugName(int nameIdx_) | |||
| 812 | // store a hidden reference in the registry to make sure the string is kept around even if a lane decides to manually change the "decoda_name" global... | 812 | // store a hidden reference in the registry to make sure the string is kept around even if a lane decides to manually change the "decoda_name" global... |
| 813 | kRegKey.setValue(L, [nameIdx = nameIdx_](lua_State* L_) { lua_pushvalue(L_, nameIdx); }); // L: ... "name" ... | 813 | kRegKey.setValue(L, [nameIdx = nameIdx_](lua_State* L_) { lua_pushvalue(L_, nameIdx); }); // L: ... "name" ... |
| 814 | // keep a direct pointer on the string | 814 | // keep a direct pointer on the string |
| 815 | debugName = lua_tostring(L, nameIdx_); | 815 | debugName = lua_tostringview(L, nameIdx_); |
| 816 | // to see VM name in Decoda debugger Virtual Machine window | 816 | // to see VM name in Decoda debugger Virtual Machine window |
| 817 | lua_pushvalue(L, nameIdx_); // L: ... "name" ... "name" | 817 | lua_pushvalue(L, nameIdx_); // L: ... "name" ... "name" |
| 818 | lua_setglobal(L, "decoda_name"); // L: ... "name" ... | 818 | lua_setglobal(L, "decoda_name"); // L: ... "name" ... |
| 819 | // and finally set the OS thread name | 819 | // and finally set the OS thread name |
| 820 | THREAD_SETNAME(debugName); | 820 | THREAD_SETNAME(debugName.data()); |
| 821 | STACK_CHECK(L, 0); | 821 | STACK_CHECK(L, 0); |
| 822 | } | 822 | } |
| 823 | 823 | ||
| @@ -920,9 +920,7 @@ void Lane::securizeDebugName(lua_State* L_) | |||
| 920 | LUA_ASSERT(L_, lua_istable(L_, -1)); | 920 | LUA_ASSERT(L_, lua_istable(L_, -1)); |
| 921 | // we don't care about the actual key, so long as it's unique and can't collide with anything. | 921 | // we don't care about the actual key, so long as it's unique and can't collide with anything. |
| 922 | lua_newtable(L_); // L_: lane ... {uv} {} | 922 | lua_newtable(L_); // L_: lane ... {uv} {} |
| 923 | // Lua 5.1 can't do 'lane_->debugName = lua_pushstring(L_, lane_->debugName);' | 923 | debugName = lua_pushstringview(L_, debugName); // L_: lane ... {uv} {} name |
| 924 | lua_pushstring(L_, debugName); // L_: lane ... {uv} {} name | ||
| 925 | debugName = lua_tostring(L_, -1); | ||
| 926 | lua_rawset(L_, -3); // L_: lane ... {uv} | 924 | lua_rawset(L_, -3); // L_: lane ... {uv} |
| 927 | lua_pop(L_, 1); // L_: lane | 925 | lua_pop(L_, 1); // L_: lane |
| 928 | STACK_CHECK(L_, 0); | 926 | STACK_CHECK(L_, 0); |
| @@ -81,7 +81,7 @@ class Lane | |||
| 81 | // M: sub-thread OS thread | 81 | // M: sub-thread OS thread |
| 82 | // S: not used | 82 | // S: not used |
| 83 | 83 | ||
| 84 | char const* debugName{ "<unnamed>" }; | 84 | std::string_view debugName{ "<unnamed>" }; |
| 85 | 85 | ||
| 86 | Universe* const U; | 86 | Universe* const U; |
| 87 | lua_State* L; | 87 | lua_State* L; |
diff --git a/src/lanes.cpp b/src/lanes.cpp index 74e2507..22391d5 100644 --- a/src/lanes.cpp +++ b/src/lanes.cpp | |||
| @@ -317,16 +317,16 @@ LUAG_FUNC(lane_new) | |||
| 317 | lua_State* _L2{ lane->L }; | 317 | lua_State* _L2{ lane->L }; |
| 318 | STACK_CHECK_START_REL(_L2, 0); | 318 | STACK_CHECK_START_REL(_L2, 0); |
| 319 | int const _name_idx{ lua_isnoneornil(L, kNameIdx) ? 0 : kNameIdx }; | 319 | int const _name_idx{ lua_isnoneornil(L, kNameIdx) ? 0 : kNameIdx }; |
| 320 | char const* const debugName{ (_name_idx > 0) ? lua_tostring(L, _name_idx) : nullptr }; | 320 | std::string_view const _debugName{ (_name_idx > 0) ? lua_tostringview(L, _name_idx) : std::string_view{} }; |
| 321 | if (debugName) | 321 | if (!_debugName.empty()) |
| 322 | { | 322 | { |
| 323 | if (strcmp(debugName, "auto") != 0) { | 323 | if (_debugName != "auto") { |
| 324 | lua_pushstring(_L2, debugName); // L: ... lane L2: "<name>" | 324 | std::ignore = lua_pushstringview(_L2, _debugName); // L: ... lane L2: "<name>" |
| 325 | } else { | 325 | } else { |
| 326 | lua_Debug ar; | 326 | lua_Debug _ar; |
| 327 | lua_pushvalue(L, 1); // L: ... lane func | 327 | lua_pushvalue(L, 1); // L: ... lane func |
| 328 | lua_getinfo(L, ">S", &ar); // L: ... lane | 328 | lua_getinfo(L, ">S", &_ar); // L: ... lane |
| 329 | lua_pushfstring(_L2, "%s:%d", ar.short_src, ar.linedefined); // L: ... lane L2: "<name>" | 329 | lua_pushfstring(_L2, "%s:%d", _ar.short_src, _ar.linedefined); // L: ... lane L2: "<name>" |
| 330 | } | 330 | } |
| 331 | lane->changeDebugName(-1); | 331 | lane->changeDebugName(-1); |
| 332 | lua_pop(_L2, 1); // L: ... lane L2: | 332 | lua_pop(_L2, 1); // L: ... lane L2: |
| @@ -701,11 +701,11 @@ LUAG_FUNC(configure) | |||
| 701 | STACK_CHECK(L_, 2); | 701 | STACK_CHECK(L_, 2); |
| 702 | 702 | ||
| 703 | { | 703 | { |
| 704 | char const* _errmsg{ | 704 | std::string_view const _errmsg{ |
| 705 | DeepFactory::PushDeepProxy(DestState{ L_ }, _U->timerLinda, 0, LookupMode::LaneBody) | 705 | DeepFactory::PushDeepProxy(DestState{ L_ }, _U->timerLinda, 0, LookupMode::LaneBody) |
| 706 | }; // L_: settings M timerLinda | 706 | }; // L_: settings M timerLinda |
| 707 | if (_errmsg != nullptr) { | 707 | if (!_errmsg.empty()) { |
| 708 | raise_luaL_error(L_, _errmsg); | 708 | raise_luaL_error(L_, _errmsg.data()); |
| 709 | } | 709 | } |
| 710 | lua_setfield(L_, -2, "timer_gateway"); // L_: settings M | 710 | lua_setfield(L_, -2, "timer_gateway"); // L_: settings M |
| 711 | } | 711 | } |
diff --git a/src/tracker.cpp b/src/tracker.cpp index 76b814d..3040154 100644 --- a/src/tracker.cpp +++ b/src/tracker.cpp | |||
| @@ -94,7 +94,7 @@ void LaneTracker::tracking_add(Lane* lane_) | |||
| 94 | while (_lane != TRACKING_END) { | 94 | while (_lane != TRACKING_END) { |
| 95 | // insert a { name='<name>', status='<status>' } tuple, so that several lanes with the same name can't clobber each other | 95 | // insert a { name='<name>', status='<status>' } tuple, so that several lanes with the same name can't clobber each other |
| 96 | lua_createtable(L_, 0, 2); // L_: {} {} | 96 | lua_createtable(L_, 0, 2); // L_: {} {} |
| 97 | lua_pushstring(L_, _lane->debugName); // L_: {} {} "name" | 97 | std::ignore = lua_pushstringview(L_, _lane->debugName); // L_: {} {} "name" |
| 98 | lua_setfield(L_, -2, "name"); // L_: {} {} | 98 | lua_setfield(L_, -2, "name"); // L_: {} {} |
| 99 | _lane->pushThreadStatus(L_); // L_: {} {} "status" | 99 | _lane->pushThreadStatus(L_); // L_: {} {} "status" |
| 100 | lua_setfield(L_, -2, "status"); // L_: {} {} | 100 | lua_setfield(L_, -2, "status"); // L_: {} {} |
diff --git a/src/universe.cpp b/src/universe.cpp index 52aa368..4f21306 100644 --- a/src/universe.cpp +++ b/src/universe.cpp | |||
| @@ -357,7 +357,7 @@ void Universe::terminateFreeRunningLanes(lua_State* L_, lua_Duration shutdownTim | |||
| 357 | Lane* _lane{ selfdestructFirst }; | 357 | Lane* _lane{ selfdestructFirst }; |
| 358 | if (_lane != SELFDESTRUCT_END) { | 358 | if (_lane != SELFDESTRUCT_END) { |
| 359 | // this causes a leak because we don't call U's destructor (which could be bad if the still running lanes are accessing it) | 359 | // this causes a leak because we don't call U's destructor (which could be bad if the still running lanes are accessing it) |
| 360 | raise_luaL_error(L_, "Zombie thread %s refuses to die!", _lane->debugName); | 360 | raise_luaL_error(L_, "Zombie thread %s refuses to die!", _lane->debugName.data()); |
| 361 | } | 361 | } |
| 362 | } | 362 | } |
| 363 | } | 363 | } |
