diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/script.cpp | 9 | ||||
-rw-r--r-- | src/script.h | 1 | ||||
-rw-r--r-- | src/scriptapi.cpp | 16 |
3 files changed, 24 insertions, 2 deletions
diff --git a/src/script.cpp b/src/script.cpp index 8b1b7013e..14c23e009 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -35,13 +35,19 @@ LuaError::LuaError(lua_State *L, const std::string &s) { m_s = "LuaError: "; m_s += s + "\n"; + m_s += script_get_backtrace(L); +} + +std::string script_get_backtrace(lua_State *L) +{ + std::string s; lua_getfield(L, LUA_GLOBALSINDEX, "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)){ - m_s += lua_tostring(L, -1); + s += lua_tostring(L, -1); } lua_pop(L, 1); } @@ -50,6 +56,7 @@ LuaError::LuaError(lua_State *L, const std::string &s) } } lua_pop(L, 1); + return s; } void script_error(lua_State *L, const char *fmt, ...) diff --git a/src/script.h b/src/script.h index 3c056ae35..3bf5342f5 100644 --- a/src/script.h +++ b/src/script.h @@ -41,6 +41,7 @@ public: lua_State* script_init(); void script_deinit(lua_State *L); +std::string script_get_backtrace(lua_State *L); void script_error(lua_State *L, const char *fmt, ...); bool script_load(lua_State *L, const char *path); diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index d7382b98b..ffbce9167 100644 --- a/src/scriptapi.cpp +++ b/src/scriptapi.cpp @@ -455,6 +455,18 @@ static void setfloatfield(lua_State *L, int table, lua_setfield(L, table, fieldname); } +static void warn_if_field_exists(lua_State *L, int table, + const char *fieldname, const std::string &message) +{ + lua_getfield(L, table, fieldname); + if(!lua_isnil(L, -1)){ + infostream<<script_get_backtrace(L)<<std::endl; + infostream<<"WARNING: field \""<<fieldname<<"\": " + <<message<<std::endl; + } + lua_pop(L, 1); +} + /* Inventory stuff */ @@ -1019,7 +1031,9 @@ static int l_register_node(lua_State *L) // True for all ground-like things like stone and mud, false for eg. trees getboolfield(L, nodedef_table, "is_ground_content", f.is_ground_content); - getboolfield(L, nodedef_table, "light_propagates", f.light_propagates); + f.light_propagates = (f.param_type == CPT_LIGHT); + warn_if_field_exists(L, nodedef_table, "light_propagates", + "deprecated: determined from paramtype"); getboolfield(L, nodedef_table, "sunlight_propagates", f.sunlight_propagates); // This is used for collision detection. // Also for general solidness queries. |