1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Fix ObjectRef errors due to lua_isnil() (#10564)

Treat 'none' values as 'nil'
This commit is contained in:
Zughy 2020-11-04 21:43:18 +01:00 committed by GitHub
parent 39213bd00a
commit 72b93ec0d7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 43 deletions

View file

@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <cmath>
#include <sstream>
#include <irr_v2d.h>
#include <irr_v3d.h>
#include "c_types.h"
#include "c_internal.h"
@ -54,19 +55,16 @@ template <> bool LuaHelper::readParam(lua_State *L, int index)
return lua_toboolean(L, index) != 0;
}
template <> bool LuaHelper::readParam(lua_State *L, int index, const bool &default_value)
{
if (lua_isnil(L, index))
return default_value;
return lua_toboolean(L, index) != 0;
}
template <> s16 LuaHelper::readParam(lua_State *L, int index)
{
return lua_tonumber(L, index);
}
template <> int LuaHelper::readParam(lua_State *L, int index)
{
return luaL_checkint(L, index);
}
template <> float LuaHelper::readParam(lua_State *L, int index)
{
if (isNaN(L, index))
@ -105,6 +103,25 @@ template <> v2f LuaHelper::readParam(lua_State *L, int index)
return p;
}
template <> v3f LuaHelper::readParam(lua_State *L, int index)
{
v3f p;
CHECK_POS_TAB(index);
lua_getfield(L, index, "x");
CHECK_POS_COORD("x");
p.X = readParam<float>(L, -1);
lua_pop(L, 1);
lua_getfield(L, index, "y");
CHECK_POS_COORD("y");
p.Y = readParam<float>(L, -1);
lua_pop(L, 1);
lua_getfield(L, index, "z");
CHECK_POS_COORD("z");
p.Z = readParam<float>(L, -1);
lua_pop(L, 1);
return p;
}
template <> std::string LuaHelper::readParam(lua_State *L, int index)
{
size_t length;
@ -113,16 +130,3 @@ template <> std::string LuaHelper::readParam(lua_State *L, int index)
result.assign(str, length);
return result;
}
template <>
std::string LuaHelper::readParam(
lua_State *L, int index, const std::string &default_value)
{
std::string result;
const char *str = lua_tostring(L, index);
if (str)
result.append(str);
else
result = default_value;
return result;
}