From 972181022a2fc1e9c3fc1826c9e756cc153c7ddf Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 8 Oct 2025 23:50:36 +0300 Subject: [PATCH] feat: pause on exception caused by 'error' function call --- res/scripts/stdmin.lua | 6 ++++++ src/logic/scripting/lua/lua_extensions.cpp | 12 ++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index b0410bc2..4487860f 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -8,6 +8,7 @@ local current_func_stack_size local _debug_getinfo = debug.getinfo local _debug_getlocal = debug.getlocal local __pause = debug.pause +local __error = error -- 'return' hook not called for some functions -- todo: speedup @@ -120,6 +121,11 @@ function debug.remove_breakpoint(source, line) bps[source] = nil end +function error(message, level) + __pause("paused on exception: " .. message) + __error(message, level) +end + -- Lua has no parallelizm, also _set_data does not call any lua functions so -- may be reused one global ffi buffer per lua_State local canvas_ffi_buffer diff --git a/src/logic/scripting/lua/lua_extensions.cpp b/src/logic/scripting/lua/lua_extensions.cpp index 88d8427f..f1b7638f 100644 --- a/src/logic/scripting/lua/lua_extensions.cpp +++ b/src/logic/scripting/lua/lua_extensions.cpp @@ -188,22 +188,26 @@ static std::string get_short_value(lua::State* L, int idx, int type) { return "{...}"; case LUA_TFUNCTION: { std::stringstream ss; - ss << "function: 0x" << std::hex << lua::topointer(L, idx); + ss << "function: 0x" << std::hex + << reinterpret_cast(lua::topointer(L, idx)); return ss.str(); } case LUA_TUSERDATA: { std::stringstream ss; - ss << "userdata: 0x" << std::hex << lua::topointer(L, idx); + ss << "userdata: 0x" << std::hex + << reinterpret_cast(lua::topointer(L, idx)); return ss.str(); } case LUA_TTHREAD: { std::stringstream ss; - ss << "thread: 0x" << std::hex << lua::topointer(L, idx); + ss << "thread: 0x" << std::hex + << reinterpret_cast(lua::topointer(L, idx)); return ss.str(); } default: { std::stringstream ss; - ss << "cdata: 0x" << std::hex << lua::topointer(L, idx); + ss << "cdata: 0x" << std::hex + << reinterpret_cast(lua::topointer(L, idx)); return ss.str(); } }