lua 5.3 compatiblity

This commit is contained in:
Jeffrey Clark 2015-12-02 09:38:06 -06:00
parent 696148e298
commit 5d7a1c1020
14 changed files with 120 additions and 20 deletions

View File

@ -167,10 +167,20 @@ else()
message (STATUS "LuaJIT detection disabled! (ENABLE_LUAJIT=0)")
endif()
if(NOT USE_LUAJIT)
message(STATUS "LuaJIT not found, using bundled Lua.")
set(LUA_LIBRARY "lua")
set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
add_subdirectory(lua)
if(LUA_INCLUDE_DIR AND EXISTS "${LUA_INCLUDE_DIR}/lua.h")
if(NOT LUA_LIBRARY)
set(LUA_LIBRARY "lua")
endif()
FILE(STRINGS "${LUA_INCLUDE_DIR}/lua.h" lua_version_str REGEX "^#define[ \t]+LUA_VERSION_NUM[ \t]+[0-9]+.*")
STRING(REGEX REPLACE "^#define[ \t]+LUA_VERSION_NUM[ \t]+([0-9]+).*" "\\1" LUA_VERSION_STRING "${lua_version_str}")
UNSET(lua_version_str)
message(STATUS "Lua specified, using ${LUA_VERSION_STRING} ${LUA_LIBRARY}")
else()
message(STATUS "LuaJIT not found, using bundled Lua.")
set(LUA_LIBRARY "lua")
set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
add_subdirectory(lua)
endif()
endif()
find_package(GMP REQUIRED)

View File

@ -316,7 +316,7 @@ std::vector<aabb3f> read_aabb3f_vector(lua_State *L, int index, f32 scale)
{
std::vector<aabb3f> boxes;
if(lua_istable(L, index)){
int n = lua_objlen(L, index);
int n = LUA_LENGTH(L, index);
// Check if it's a single box or a list of boxes
bool possibly_single_box = (n == 6);
for(int i = 1; i <= n && possibly_single_box; i++){

View File

@ -32,3 +32,19 @@ struct EnumString es_ItemType[] =
{ITEM_TOOL, "tool"},
{0, NULL},
};
#if LUA_VERSION_NUM >= 502
LUALIB_API int luaL_pushtype (lua_State *L, int narg) {
if (!luaL_callmeta(L, narg, "__type"))
lua_pushstring(L, luaL_typename(L, narg));
return 1;
}
LUALIB_API int luaL_typerror (lua_State *L, int narg, const char *tname) {
const char *msg;
luaL_pushtype(L, narg);
msg = lua_pushfstring(L, "%s expected, got %s",
tname, lua_tostring(L, -1));
return luaL_argerror(L, narg, msg);
}
#endif

View File

@ -21,9 +21,19 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define C_TYPES_H_
extern "C" {
#include "lua.h"
#include <lua.h>
#include <lauxlib.h>
}
#if LUA_VERSION_NUM >= 502
#define luaL_reg luaL_Reg
#define LUA_LENGTH(L, I) lua_rawlen((L), (I))
LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname);
LUALIB_API int (luaL_pushtype) (lua_State *L, int idx);
#else
#define LUA_LENGTH(L, I) lua_objlen((L), (I))
#endif
#include <iostream>
#include "exceptions.h"

View File

@ -378,7 +378,12 @@ void LuaAreaStore::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1); // drop methodtable
// Can be created from Lua (AreaStore())

View File

@ -676,8 +676,8 @@ int ModApiEnvMod::l_get_perlin(lua_State *L)
if (lua_istable(L, 1)) {
read_noiseparams(L, 1, &params);
} else {
params.seed = luaL_checkint(L, 1);
params.octaves = luaL_checkint(L, 2);
params.seed = luaL_checkinteger(L, 1);
params.octaves = luaL_checkinteger(L, 2);
params.persist = luaL_checknumber(L, 3);
params.spread = v3f(1, 1, 1) * luaL_checknumber(L, 4);
}
@ -849,9 +849,9 @@ int ModApiEnvMod::l_find_path(lua_State *L)
v3s16 pos1 = read_v3s16(L, 1);
v3s16 pos2 = read_v3s16(L, 2);
unsigned int searchdistance = luaL_checkint(L, 3);
unsigned int max_jump = luaL_checkint(L, 4);
unsigned int max_drop = luaL_checkint(L, 5);
unsigned int searchdistance = luaL_checkinteger(L, 3);
unsigned int max_jump = luaL_checkinteger(L, 4);
unsigned int max_drop = luaL_checkinteger(L, 5);
algorithm algo = A_PLAIN_NP;
if (!lua_isnil(L, 6)) {
std::string algorithm = luaL_checkstring(L,6);

View File

@ -455,7 +455,12 @@ void InvRef::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1); // drop methodtable
// Cannot be created from Lua

View File

@ -427,7 +427,12 @@ void LuaItemStack::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1); // drop methodtable
// Can be created from Lua (LuaItemStack(itemstack or itemstring or table or nil))
@ -558,7 +563,7 @@ int ModApiItemMod::l_get_content_id(lua_State *L)
int ModApiItemMod::l_get_name_from_content_id(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
content_t c = luaL_checkint(L, 1);
content_t c = luaL_checkinteger(L, 1);
INodeDefManager *ndef = getServer(L)->getNodeDefManager();
const char *name = ndef->get(c).name.c_str();

View File

@ -338,7 +338,12 @@ void NodeMetaRef::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1); // drop methodtable
// Cannot be created from Lua

View File

@ -154,7 +154,12 @@ void NodeTimerRef::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1); // drop methodtable
// Cannot be created from Lua

View File

@ -72,8 +72,8 @@ int LuaPerlinNoise::create_object(lua_State *L)
if (lua_istable(L, 1)) {
read_noiseparams(L, 1, &params);
} else {
params.seed = luaL_checkint(L, 1);
params.octaves = luaL_checkint(L, 2);
params.seed = luaL_checkinteger(L, 1);
params.octaves = luaL_checkinteger(L, 2);
params.persist = luaL_checknumber(L, 3);
params.spread = v3f(1, 1, 1) * luaL_checknumber(L, 4);
}
@ -127,7 +127,12 @@ void LuaPerlinNoise::Register(lua_State *L)
lua_pop(L, 1);
luaL_openlib(L, 0, methods, 0);
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1);
lua_register(L, className, create_object);
@ -359,7 +364,6 @@ LuaPerlinNoiseMap *LuaPerlinNoiseMap::checkobject(lua_State *L, int narg)
void *ud = luaL_checkudata(L, narg, className);
if (!ud)
luaL_typerror(L, narg, className);
return *(LuaPerlinNoiseMap **)ud;
}
@ -385,7 +389,12 @@ void LuaPerlinNoiseMap::Register(lua_State *L)
lua_pop(L, 1);
luaL_openlib(L, 0, methods, 0);
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1);
lua_register(L, className, create_object);
@ -490,7 +499,12 @@ void LuaPseudoRandom::Register(lua_State *L)
lua_pop(L, 1);
luaL_openlib(L, 0, methods, 0);
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1);
lua_register(L, className, create_object);
@ -589,7 +603,12 @@ void LuaPcgRandom::Register(lua_State *L)
lua_pop(L, 1);
luaL_openlib(L, 0, methods, 0);
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1);
lua_register(L, className, create_object);
@ -704,7 +723,12 @@ void LuaSecureRandom::Register(lua_State *L)
lua_pop(L, 1);
luaL_openlib(L, 0, methods, 0);
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1);
lua_register(L, className, create_object);

View File

@ -1685,7 +1685,12 @@ void ObjectRef::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1); // drop methodtable
// Cannot be created from Lua

View File

@ -176,7 +176,12 @@ void LuaSettings::Register(lua_State* L)
lua_pop(L, 1); // drop metatable
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1); // drop methodtable
// Can be created from Lua (Settings(filename))

View File

@ -450,7 +450,12 @@ void LuaVoxelManip::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
#if LUA_VERSION_NUM < 502
luaL_openlib(L, 0, methods, 0); // fill methodtable
#else
lua_newtable(L);
luaL_setfuncs(L, methods, 0);
#endif
lua_pop(L, 1); // drop methodtable
// Can be created from Lua (VoxelManip())