mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-17 03:08:26 +00:00
Luabind updated to be able to be compiled with Lua 5.2. Didn't really test it with 5.2 though since I'm still on 5.1. In theory it should work now though.
This commit is contained in:
@@ -146,11 +146,10 @@ int luabind::detail::class_rep::constructor_dispatcher(lua_State* L)
|
||||
&& cls->get_class_type() == class_rep::lua_class
|
||||
&& !cls->bases().empty())
|
||||
{
|
||||
lua_pushstring(L, "super");
|
||||
lua_pushvalue(L, 1);
|
||||
lua_pushvalue(L, -3);
|
||||
lua_pushvalue(L, -2);
|
||||
lua_pushcclosure(L, super_callback, 2);
|
||||
lua_settable(L, LUA_GLOBALSINDEX);
|
||||
lua_setglobal(L, "super");
|
||||
}
|
||||
|
||||
lua_pushvalue(L, -1);
|
||||
@@ -169,9 +168,8 @@ int luabind::detail::class_rep::constructor_dispatcher(lua_State* L)
|
||||
|
||||
if (super_deprecation_disabled)
|
||||
{
|
||||
lua_pushstring(L, "super");
|
||||
lua_pushnil(L);
|
||||
lua_settable(L, LUA_GLOBALSINDEX);
|
||||
lua_setglobal(L, "super");
|
||||
}
|
||||
|
||||
return 1;
|
||||
@@ -214,17 +212,15 @@ int luabind::detail::class_rep::super_callback(lua_State* L)
|
||||
|
||||
if (base->bases().empty())
|
||||
{
|
||||
lua_pushstring(L, "super");
|
||||
lua_pushnil(L);
|
||||
lua_settable(L, LUA_GLOBALSINDEX);
|
||||
lua_setglobal(L, "super");
|
||||
}
|
||||
else
|
||||
{
|
||||
lua_pushstring(L, "super");
|
||||
lua_pushlightuserdata(L, base);
|
||||
lua_pushvalue(L, lua_upvalueindex(2));
|
||||
lua_pushcclosure(L, super_callback, 2);
|
||||
lua_settable(L, LUA_GLOBALSINDEX);
|
||||
lua_setglobal(L, "super");
|
||||
}
|
||||
|
||||
base->get_table(L);
|
||||
@@ -241,9 +237,8 @@ int luabind::detail::class_rep::super_callback(lua_State* L)
|
||||
// TODO: instead of clearing the global variable "super"
|
||||
// store it temporarily in the registry. maybe we should
|
||||
// have some kind of warning if the super global is used?
|
||||
lua_pushstring(L, "super");
|
||||
lua_pushnil(L);
|
||||
lua_settable(L, LUA_GLOBALSINDEX);
|
||||
lua_setglobal(L, "super");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -126,9 +126,8 @@ namespace luabind { namespace detail
|
||||
new(c) class_rep(L, name);
|
||||
|
||||
// make the class globally available
|
||||
lua_pushstring(L, name);
|
||||
lua_pushvalue(L, -2);
|
||||
lua_settable(L, LUA_GLOBALSINDEX);
|
||||
lua_pushvalue(L, -1);
|
||||
lua_setglobal(L, name);
|
||||
|
||||
// also add it to the closure as return value
|
||||
lua_pushcclosure(L, &stage2, 1);
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#include <luabind/detail/object_rep.hpp>
|
||||
#include <luabind/detail/class_rep.hpp>
|
||||
#include <luabind/lua502.hpp>
|
||||
|
||||
namespace luabind { namespace detail
|
||||
{
|
||||
|
||||
@@ -178,21 +178,18 @@ namespace
|
||||
lua_settable(L, LUA_REGISTRYINDEX);
|
||||
|
||||
// add functions (class, cast etc...)
|
||||
lua_pushstring(L, "class");
|
||||
lua_pushcclosure(L, detail::create_class::stage1, 0);
|
||||
lua_settable(L, LUA_GLOBALSINDEX);
|
||||
lua_setglobal(L, "class");
|
||||
|
||||
lua_pushstring(L, "property");
|
||||
lua_pushcclosure(L, &make_property, 0);
|
||||
lua_settable(L, LUA_GLOBALSINDEX);
|
||||
lua_setglobal(L, "property");
|
||||
|
||||
lua_pushlightuserdata(L, &main_thread_tag);
|
||||
lua_pushlightuserdata(L, L);
|
||||
lua_rawset(L, LUA_REGISTRYINDEX);
|
||||
|
||||
lua_pushstring(L, "super");
|
||||
lua_pushcclosure(L, &deprecated_super, 0);
|
||||
lua_settable(L, LUA_GLOBALSINDEX);
|
||||
lua_setglobal(L, "super");
|
||||
}
|
||||
|
||||
} // namespace luabind
|
||||
|
||||
@@ -47,13 +47,18 @@ namespace luabind { namespace detail
|
||||
|
||||
int resume_impl(lua_State *L, int nargs, int)
|
||||
{
|
||||
#if LUA_VERSION_NUM >= 502
|
||||
int res = lua_resume(L, NULL, nargs);
|
||||
#else
|
||||
int res = lua_resume(L, nargs);
|
||||
#endif
|
||||
|
||||
#if LUA_VERSION_NUM >= 501
|
||||
// Lua 5.1 added LUA_YIELD as a possible return value,
|
||||
// this was causing crashes, because the caller expects 0 on success.
|
||||
int res = lua_resume(L, nargs);
|
||||
return (res == LUA_YIELD) ? 0 : res;
|
||||
#else
|
||||
return lua_resume(L, nargs);
|
||||
return res;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <luabind/scope.hpp>
|
||||
#include <luabind/detail/debug.hpp>
|
||||
#include <luabind/detail/stack_utils.hpp>
|
||||
#include <luabind/lua502.hpp>
|
||||
#include <cassert>
|
||||
|
||||
namespace luabind { namespace detail {
|
||||
@@ -136,22 +137,20 @@ namespace luabind {
|
||||
{
|
||||
if (m_name)
|
||||
{
|
||||
lua_pushstring(m_state, m_name);
|
||||
lua_gettable(m_state, LUA_GLOBALSINDEX);
|
||||
lua_getglobal(m_state, m_name);
|
||||
|
||||
if (!lua_istable(m_state, -1))
|
||||
{
|
||||
lua_pop(m_state, 1);
|
||||
|
||||
lua_newtable(m_state);
|
||||
lua_pushstring(m_state, m_name);
|
||||
lua_pushvalue(m_state, -2);
|
||||
lua_settable(m_state, LUA_GLOBALSINDEX);
|
||||
lua_pushvalue(m_state, -1);
|
||||
lua_setglobal(m_state, m_name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lua_pushvalue(m_state, LUA_GLOBALSINDEX);
|
||||
lua_pushglobaltable(m_state);
|
||||
}
|
||||
|
||||
lua_pop_stack guard(m_state);
|
||||
|
||||
Reference in New Issue
Block a user