1
0
Fork 0
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:
kwolekr 2015-08-11 22:27:54 -04:00
parent 738fbc66d0
commit 2b04ab874d
19 changed files with 231 additions and 45 deletions

View file

@ -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!");

View file

@ -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);