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:
KimLS
2013-12-28 18:19:12 -08:00
parent 864338a881
commit b727cbbfe9
10 changed files with 84 additions and 33 deletions
+6 -11
View File
@@ -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;
}
+2 -3
View File
@@ -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);
+1
View File
@@ -24,6 +24,7 @@
#include <luabind/detail/object_rep.hpp>
#include <luabind/detail/class_rep.hpp>
#include <luabind/lua502.hpp>
namespace luabind { namespace detail
{
+3 -6
View File
@@ -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
+7 -2
View File
@@ -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
}
+5 -6
View File
@@ -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);