diff options
Diffstat (limited to 'src/script/common')
-rw-r--r-- | src/script/common/c_internal.cpp | 34 | ||||
-rw-r--r-- | src/script/common/c_internal.h | 4 |
2 files changed, 5 insertions, 33 deletions
diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp index b349f9dd1..0b388e383 100644 --- a/src/script/common/c_internal.cpp +++ b/src/script/common/c_internal.cpp @@ -24,37 +24,9 @@ with this program; if not, write to the Free Software Foundation, Inc., std::string script_get_backtrace(lua_State *L) { - std::string s; - lua_getglobal(L, "debug"); - if(lua_istable(L, -1)){ - lua_getfield(L, -1, "traceback"); - if(lua_isfunction(L, -1)) { - lua_call(L, 0, 1); - if(lua_isstring(L, -1)){ - s = lua_tostring(L, -1); - } - } - lua_pop(L, 1); - } - lua_pop(L, 1); - return s; -} - -int script_error_handler(lua_State *L) { - lua_getglobal(L, "debug"); - if (!lua_istable(L, -1)) { - lua_pop(L, 1); - return 1; - } - lua_getfield(L, -1, "traceback"); - if (!lua_isfunction(L, -1)) { - lua_pop(L, 2); - return 1; - } - lua_pushvalue(L, 1); - lua_pushinteger(L, 2); - lua_call(L, 2, 1); - return 1; + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_BACKTRACE); + lua_call(L, 0, 1); + return luaL_checkstring(L, -1); } int script_exception_wrapper(lua_State *L, lua_CFunction f) diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h index fc59b0e2e..b77f0a7c3 100644 --- a/src/script/common/c_internal.h +++ b/src/script/common/c_internal.h @@ -53,11 +53,11 @@ extern "C" { #define CUSTOM_RIDX_SCRIPTAPI (CUSTOM_RIDX_BASE) #define CUSTOM_RIDX_GLOBALS_BACKUP (CUSTOM_RIDX_BASE + 1) #define CUSTOM_RIDX_CURRENT_MOD_NAME (CUSTOM_RIDX_BASE + 2) -#define CUSTOM_RIDX_ERROR_HANDLER (CUSTOM_RIDX_BASE + 3) +#define CUSTOM_RIDX_BACKTRACE (CUSTOM_RIDX_BASE + 3) // Pushes the error handler onto the stack and returns its index #define PUSH_ERROR_HANDLER(L) \ - (lua_rawgeti((L), LUA_REGISTRYINDEX, CUSTOM_RIDX_ERROR_HANDLER), lua_gettop((L))) + (lua_rawgeti((L), LUA_REGISTRYINDEX, CUSTOM_RIDX_BACKTRACE), lua_gettop((L))) #define PCALL_RESL(L, RES) do { \ int result_ = (RES); \ |