mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
SAPI: Track last executed mod and include in error messages
This commit is contained in:
parent
738fbc66d0
commit
2b04ab874d
19 changed files with 231 additions and 45 deletions
|
@ -79,7 +79,7 @@ int script_exception_wrapper(lua_State *L, lua_CFunction f)
|
|||
* to gather a coherent backtrace. Realistically, the best we can do here is
|
||||
* print which C function performed the failing pcall.
|
||||
*/
|
||||
void script_error(lua_State *L, int pcall_result, const char *fxn)
|
||||
void script_error(lua_State *L, int pcall_result, const char *mod, const char *fxn)
|
||||
{
|
||||
if (pcall_result == 0)
|
||||
return;
|
||||
|
@ -99,18 +99,21 @@ void script_error(lua_State *L, int pcall_result, const char *fxn)
|
|||
err_type = "Unknown";
|
||||
}
|
||||
|
||||
if (!mod)
|
||||
mod = "??";
|
||||
|
||||
if (!fxn)
|
||||
fxn = "??";
|
||||
|
||||
const char *err_descr = lua_tostring(L, -1);
|
||||
if (!err_descr)
|
||||
err_descr = "<no description>";
|
||||
|
||||
std::string err_msg(err_type);
|
||||
if (fxn) {
|
||||
err_msg += " error in ";
|
||||
err_msg += fxn;
|
||||
err_msg += "(): ";
|
||||
} else {
|
||||
err_msg += " error: ";
|
||||
}
|
||||
char buf[256];
|
||||
snprintf(buf, sizeof(buf), "%s error from mod '%s' in callback %s(): ",
|
||||
err_type, mod, fxn);
|
||||
|
||||
std::string err_msg(buf);
|
||||
err_msg += err_descr;
|
||||
|
||||
if (pcall_result == LUA_ERRMEM) {
|
||||
|
@ -152,7 +155,7 @@ void script_run_callbacks_f(lua_State *L, int nargs,
|
|||
|
||||
int result = lua_pcall(L, nargs + 2, 1, errorhandler);
|
||||
if (result != 0)
|
||||
script_error(L, result, fxn);
|
||||
script_error(L, result, NULL, fxn);
|
||||
|
||||
lua_remove(L, -2); // Remove error handler
|
||||
}
|
||||
|
@ -176,7 +179,7 @@ void log_deprecated(lua_State *L, const std::string &message)
|
|||
|
||||
if (doerror) {
|
||||
if (L != NULL) {
|
||||
script_error(L, LUA_ERRRUN, NULL);
|
||||
script_error(L, LUA_ERRRUN, NULL, NULL);
|
||||
} else {
|
||||
FATAL_ERROR("Can't do a scripterror for this deprecated message, "
|
||||
"so exit completely!");
|
||||
|
|
|
@ -34,11 +34,11 @@ extern "C" {
|
|||
|
||||
#include "common/c_types.h"
|
||||
|
||||
#define PCALL_RESL(L, RES) do { \
|
||||
int result_ = (RES); \
|
||||
if (result_ != 0) { \
|
||||
script_error((L), result_, __FUNCTION__); \
|
||||
} \
|
||||
#define PCALL_RESL(L, RES) do { \
|
||||
int result_ = (RES); \
|
||||
if (result_ != 0) { \
|
||||
script_error((L), result_, NULL, __FUNCTION__); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define script_run_callbacks(L, nargs, mode) \
|
||||
|
@ -77,7 +77,7 @@ enum RunCallbacksMode
|
|||
std::string script_get_backtrace(lua_State *L);
|
||||
int script_error_handler(lua_State *L);
|
||||
int script_exception_wrapper(lua_State *L, lua_CFunction f);
|
||||
void script_error(lua_State *L, int pcall_result, const char *fxn);
|
||||
void script_error(lua_State *L, int pcall_result, const char *mod, const char *fxn);
|
||||
void script_run_callbacks_f(lua_State *L, int nargs,
|
||||
RunCallbacksMode mode, const char *fxn);
|
||||
void log_deprecated(lua_State *L, const std::string &message);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue