forked from Mirrorlandia_minetest/minetest
Add proper lua api deprecated handling
This commit is contained in:
parent
c03d7dc8a7
commit
b5acec0a3c
@ -85,6 +85,7 @@ function minetest.get_item_group(name, group)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function minetest.get_node_group(name, group)
|
function minetest.get_node_group(name, group)
|
||||||
|
minetest.log("deprecated", "Deprecated usage of get_node_group, use get_item_group instead")
|
||||||
return minetest.get_item_group(name, group)
|
return minetest.get_item_group(name, group)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -285,6 +285,11 @@
|
|||||||
#disable_anticheat = false
|
#disable_anticheat = false
|
||||||
# If true, actions are recorded for rollback
|
# If true, actions are recorded for rollback
|
||||||
#enable_rollback_recording = false
|
#enable_rollback_recording = false
|
||||||
|
# handling for deprecated lua api calls
|
||||||
|
# "legacy" = (try to) mimic old behaviour (default for release)
|
||||||
|
# "log" = mimic and log backtrace of deprecated call (default for debug)
|
||||||
|
# "error" = abort on usage of deprecated call (suggested for mod developers)
|
||||||
|
#deprecated_lua_api_handling = legacy
|
||||||
|
|
||||||
# Profiler data print interval. #0 = disable.
|
# Profiler data print interval. #0 = disable.
|
||||||
#profiler_print_interval = 0
|
#profiler_print_interval = 0
|
||||||
|
@ -201,6 +201,11 @@ void set_default_settings(Settings *settings)
|
|||||||
settings->setDefault("disallow_empty_password", "false");
|
settings->setDefault("disallow_empty_password", "false");
|
||||||
settings->setDefault("disable_anticheat", "false");
|
settings->setDefault("disable_anticheat", "false");
|
||||||
settings->setDefault("enable_rollback_recording", "false");
|
settings->setDefault("enable_rollback_recording", "false");
|
||||||
|
#ifdef NDEBUG
|
||||||
|
settings->setDefault("deprecated_lua_api_handling", "legacy");
|
||||||
|
#else
|
||||||
|
settings->setDefault("deprecated_lua_api_handling", "log");
|
||||||
|
#endif
|
||||||
|
|
||||||
settings->setDefault("profiler_print_interval", "0");
|
settings->setDefault("profiler_print_interval", "0");
|
||||||
settings->setDefault("enable_mapgen_debug_info", "false");
|
settings->setDefault("enable_mapgen_debug_info", "false");
|
||||||
|
@ -45,6 +45,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "filesys.h"
|
#include "filesys.h"
|
||||||
#include "gettime.h"
|
#include "gettime.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
|
#include "scripting_game.h"
|
||||||
|
|
||||||
#define MY_CHECKPOS(a,b) \
|
#define MY_CHECKPOS(a,b) \
|
||||||
if (v_pos.size() != 2) { \
|
if (v_pos.size() != 2) { \
|
||||||
@ -1478,7 +1479,13 @@ void GUIFormSpecMenu::parseElement(parserData* data,std::string element)
|
|||||||
std::string type = trim(parts[0]);
|
std::string type = trim(parts[0]);
|
||||||
std::string description = trim(parts[1]);
|
std::string description = trim(parts[1]);
|
||||||
|
|
||||||
if ((type == "size") || (type == "invsize")){
|
if (type == "size") {
|
||||||
|
parseSize(data,description);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == "invsize") {
|
||||||
|
log_deprecated("Deprecated formspec element \"invsize\" is used");
|
||||||
parseSize(data,description);
|
parseSize(data,description);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
|
|
||||||
#include "common/c_internal.h"
|
#include "common/c_internal.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "log.h"
|
||||||
|
#include "main.h"
|
||||||
|
#include "settings.h"
|
||||||
|
|
||||||
std::string script_get_backtrace(lua_State *L)
|
std::string script_get_backtrace(lua_State *L)
|
||||||
{
|
{
|
||||||
@ -109,4 +112,40 @@ void script_run_callbacks(lua_State *L, int nargs, RunCallbacksMode mode)
|
|||||||
lua_remove(L, -2); // Remove error handler
|
lua_remove(L, -2); // Remove error handler
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void log_deprecated(lua_State *L, std::string message)
|
||||||
|
{
|
||||||
|
static bool configured = false;
|
||||||
|
static bool dolog = false;
|
||||||
|
static bool doerror = false;
|
||||||
|
|
||||||
|
// performance optimization to not have to read and compare setting for every logline
|
||||||
|
if (!configured) {
|
||||||
|
std::string value = g_settings->get("deprecated_lua_api_handling");
|
||||||
|
if (value == "log") {
|
||||||
|
dolog = true;
|
||||||
|
}
|
||||||
|
if (value == "error") {
|
||||||
|
dolog = true;
|
||||||
|
doerror = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (doerror) {
|
||||||
|
if (L != NULL) {
|
||||||
|
script_error(L);
|
||||||
|
} else {
|
||||||
|
/* As of april 2014 assert is not optimized to nop in release builds
|
||||||
|
* therefore this is correct. */
|
||||||
|
assert("Can't do a scripterror for this deprecated message, so exit completely!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dolog) {
|
||||||
|
/* abusing actionstream because of lack of file-only-logged loglevel */
|
||||||
|
actionstream << message << std::endl;
|
||||||
|
if (L != NULL) {
|
||||||
|
actionstream << script_get_backtrace(L) << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ std::string script_get_backtrace(lua_State *L);
|
|||||||
int script_error_handler(lua_State *L);
|
int script_error_handler(lua_State *L);
|
||||||
int script_exception_wrapper(lua_State *L, lua_CFunction f);
|
int script_exception_wrapper(lua_State *L, lua_CFunction f);
|
||||||
void script_error(lua_State *L);
|
void script_error(lua_State *L);
|
||||||
void script_run_callbacks(lua_State *L, int nargs,
|
void script_run_callbacks(lua_State *L, int nargs, RunCallbacksMode mode);
|
||||||
RunCallbacksMode mode);
|
void log_deprecated(lua_State *L, std::string message);
|
||||||
|
|
||||||
#endif /* C_INTERNAL_H_ */
|
#endif /* C_INTERNAL_H_ */
|
||||||
|
@ -659,6 +659,7 @@ int ObjectRef::l_get_entity_name(lua_State *L)
|
|||||||
NO_MAP_LOCK_REQUIRED;
|
NO_MAP_LOCK_REQUIRED;
|
||||||
ObjectRef *ref = checkobject(L, 1);
|
ObjectRef *ref = checkobject(L, 1);
|
||||||
LuaEntitySAO *co = getluaobject(ref);
|
LuaEntitySAO *co = getluaobject(ref);
|
||||||
|
log_deprecated(L,"Deprecated call to \"get_entity_name");
|
||||||
if(co == NULL) return 0;
|
if(co == NULL) return 0;
|
||||||
// Do it
|
// Do it
|
||||||
std::string name = co->getName();
|
std::string name = co->getName();
|
||||||
|
@ -44,6 +44,7 @@ int ModApiParticles::l_add_particle(lua_State *L)
|
|||||||
|
|
||||||
if (lua_gettop(L) > 1) // deprecated
|
if (lua_gettop(L) > 1) // deprecated
|
||||||
{
|
{
|
||||||
|
log_deprecated(L,"Deprecated add_particle call with individual parameters instead of definition");
|
||||||
pos = check_v3f(L, 1);
|
pos = check_v3f(L, 1);
|
||||||
vel = check_v3f(L, 2);
|
vel = check_v3f(L, 2);
|
||||||
acc = check_v3f(L, 3);
|
acc = check_v3f(L, 3);
|
||||||
@ -128,6 +129,7 @@ int ModApiParticles::l_add_particlespawner(lua_State *L)
|
|||||||
|
|
||||||
if (lua_gettop(L) > 1) //deprecated
|
if (lua_gettop(L) > 1) //deprecated
|
||||||
{
|
{
|
||||||
|
log_deprecated(L,"Deprecated add_particlespawner call with individual parameters instead of definition");
|
||||||
amount = luaL_checknumber(L, 1);
|
amount = luaL_checknumber(L, 1);
|
||||||
time = luaL_checknumber(L, 2);
|
time = luaL_checknumber(L, 2);
|
||||||
minpos = check_v3f(L, 3);
|
minpos = check_v3f(L, 3);
|
||||||
|
@ -78,6 +78,11 @@ int ModApiUtil::l_log(lua_State *L)
|
|||||||
level = LMT_ACTION;
|
level = LMT_ACTION;
|
||||||
else if(levelname == "verbose")
|
else if(levelname == "verbose")
|
||||||
level = LMT_VERBOSE;
|
level = LMT_VERBOSE;
|
||||||
|
else if (levelname == "deprecated") {
|
||||||
|
log_deprecated(L,text);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
log_printline(level, text);
|
log_printline(level, text);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -98,3 +98,8 @@ void GameScripting::InitializeModApi(lua_State *L, int top)
|
|||||||
ObjectRef::Register(L);
|
ObjectRef::Register(L);
|
||||||
LuaSettings::Register(L);
|
LuaSettings::Register(L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void log_deprecated(std::string message)
|
||||||
|
{
|
||||||
|
log_deprecated(NULL,message);
|
||||||
|
}
|
||||||
|
@ -50,4 +50,6 @@ private:
|
|||||||
void InitializeModApi(lua_State *L, int top);
|
void InitializeModApi(lua_State *L, int top);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void log_deprecated(std::string message);
|
||||||
|
|
||||||
#endif /* SCRIPTING_GAME_H_ */
|
#endif /* SCRIPTING_GAME_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user