From c657fb343f120b7462f7ca580852636ad98b8ae0 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 12 Feb 2020 19:17:04 +0100 Subject: [PATCH] Refactor Script API's log_deprecated --- src/gui/guiFormSpecMenu.cpp | 2 +- src/script/common/c_internal.cpp | 44 +++++++++++++++++--------------- src/script/common/c_internal.h | 3 ++- src/script/lua_api/l_util.cpp | 2 +- src/script/scripting_server.cpp | 5 ---- src/script/scripting_server.h | 2 -- 6 files changed, 27 insertions(+), 31 deletions(-) diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 3d473550c..40c3bbdae 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -2364,7 +2364,7 @@ bool GUIFormSpecMenu::parseSizeDirect(parserData* data, const std::string &eleme return false; if (type == "invsize") - log_deprecated("Deprecated formspec element \"invsize\" is used"); + warningstream << "Deprecated formspec element \"invsize\" is used" << std::endl; parseSize(data, description); diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp index f792b6218..a7dcf9b5f 100644 --- a/src/script/common/c_internal.cpp +++ b/src/script/common/c_internal.cpp @@ -135,7 +135,27 @@ void script_run_callbacks_f(lua_State *L, int nargs, lua_remove(L, error_handler); } -void log_deprecated(lua_State *L, const std::string &message) +static void script_log(lua_State *L, const std::string &message, + std::ostream &log_to, bool do_error, int stack_depth) +{ + lua_Debug ar; + + log_to << message << " "; + if (lua_getstack(L, stack_depth, &ar)) { + FATAL_ERROR_IF(!lua_getinfo(L, "Sl", &ar), "lua_getinfo() failed"); + log_to << "(at " << ar.short_src << ":" << ar.currentline << ")"; + } else { + log_to << "(at ?:?)"; + } + log_to << std::endl; + + if (do_error) + script_error(L, LUA_ERRRUN, NULL, NULL); + else + infostream << script_get_backtrace(L) << std::endl; +} + +void log_deprecated(lua_State *L, const std::string &message, int stack_depth) { static bool configured = false; static bool do_log = false; @@ -152,24 +172,6 @@ void log_deprecated(lua_State *L, const std::string &message) } } - if (do_log) { - warningstream << message; - if (L) { // L can be NULL if we get called from scripting_game.cpp - lua_Debug ar; - - if (!lua_getstack(L, 2, &ar)) - FATAL_ERROR_IF(!lua_getstack(L, 1, &ar), "lua_getstack() failed"); - FATAL_ERROR_IF(!lua_getinfo(L, "Sl", &ar), "lua_getinfo() failed"); - warningstream << " (at " << ar.short_src << ":" << ar.currentline << ")"; - } - warningstream << std::endl; - - if (L) { - if (do_error) - script_error(L, LUA_ERRRUN, NULL, NULL); - else - infostream << script_get_backtrace(L) << std::endl; - } - } + if (do_log) + script_log(L, message, warningstream, do_error, stack_depth); } - diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h index d2131d1ad..69b8a7fdc 100644 --- a/src/script/common/c_internal.h +++ b/src/script/common/c_internal.h @@ -103,4 +103,5 @@ int script_exception_wrapper(lua_State *L, lua_CFunction f); 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); +void log_deprecated(lua_State *L, const std::string &message, + int stack_depth=1); diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index a58c3a196..ae3e5df3d 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -59,7 +59,7 @@ int ModApiUtil::l_log(lua_State *L) std::string name = luaL_checkstring(L, 1); text = luaL_checkstring(L, 2); if (name == "deprecated") { - log_deprecated(L, text); + log_deprecated(L, text, 2); return 0; } level = Logger::stringToLevel(name); diff --git a/src/script/scripting_server.cpp b/src/script/scripting_server.cpp index 2204c6884..cbf229640 100644 --- a/src/script/scripting_server.cpp +++ b/src/script/scripting_server.cpp @@ -121,8 +121,3 @@ void ServerScripting::InitializeModApi(lua_State *L, int top) ModApiStorage::Initialize(L, top); ModApiChannels::Initialize(L, top); } - -void log_deprecated(const std::string &message) -{ - log_deprecated(NULL, message); -} diff --git a/src/script/scripting_server.h b/src/script/scripting_server.h index 88cea143c..bf06ab197 100644 --- a/src/script/scripting_server.h +++ b/src/script/scripting_server.h @@ -51,5 +51,3 @@ public: private: void InitializeModApi(lua_State *L, int top); }; - -void log_deprecated(const std::string &message);