summarylogtreecommitdiffstats
path: root/002-luabind-deprecated-LUA_GLOBALSINDEX.patch
diff options
context:
space:
mode:
Diffstat (limited to '002-luabind-deprecated-LUA_GLOBALSINDEX.patch')
-rw-r--r--002-luabind-deprecated-LUA_GLOBALSINDEX.patch239
1 files changed, 239 insertions, 0 deletions
diff --git a/002-luabind-deprecated-LUA_GLOBALSINDEX.patch b/002-luabind-deprecated-LUA_GLOBALSINDEX.patch
new file mode 100644
index 00000000000..cd81e519b38
--- /dev/null
+++ b/002-luabind-deprecated-LUA_GLOBALSINDEX.patch
@@ -0,0 +1,239 @@
+From f077a88d8dd9011dd66bc5ef560f4ad22464063e Mon Sep 17 00:00:00 2001
+From: Peter Colberg <peter.colberg@utoronto.ca>
+Date: Wed, 21 Dec 2011 13:26:35 -0500
+Subject: [PATCH] Lua 5.2: replace occurrences of deprecated LUA_GLOBALSINDEX
+
+Use lua_getglobal and lua_setglobal to retrieve and set globals.
+
+Use lua_rawgeti with LUA_RIDX_GLOBALS to retrieve table of globals.
+
+http://www.lua.org/manual/5.2/manual.html#8.3
+
+http://www.lua.org/manual/5.2/manual.html#4.5
+
+This commit drops support for Lua 5.0, since Luabind is incompatible
+with Lua 5.0 anyway, e.g. commit 7dc37f9 requires lua_Integer added
+in Lua 5.1.
+---
+ luabind/detail/call_function.hpp | 6 ++----
+ luabind/object.hpp | 4 ++++
+ src/class_rep.cpp | 17 ++++++-----------
+ src/create_class.cpp | 5 ++---
+ src/open.cpp | 9 +++------
+ src/scope.cpp | 12 +++++++-----
+ test/benchmark.cpp | 3 +--
+ test/test_free_functions.cpp | 3 +--
+ 8 files changed, 26 insertions(+), 33 deletions(-)
+
+diff --git a/luabind/detail/call_function.hpp b/luabind/detail/call_function.hpp
+index 1b45ec1..885e08f 100644
+--- a/luabind/detail/call_function.hpp
++++ b/luabind/detail/call_function.hpp
+@@ -346,8 +346,7 @@
+ , luabind::detail::proxy_function_void_caller<boost::tuples::tuple<BOOST_PP_ENUM(BOOST_PP_ITERATION(), LUABIND_TUPLE_PARAMS, _)> >
+ , luabind::detail::proxy_function_caller<Ret, boost::tuples::tuple<BOOST_PP_ENUM(BOOST_PP_ITERATION(), LUABIND_TUPLE_PARAMS, _)> > >::type proxy_type;
+
+- lua_pushstring(L, name);
+- lua_gettable(L, LUA_GLOBALSINDEX);
++ lua_getglobal(L, name);
+
+ return proxy_type(L, 1, &detail::pcall, args);
+ }
+@@ -389,8 +388,7 @@
+ , luabind::detail::proxy_function_void_caller<boost::tuples::tuple<BOOST_PP_ENUM(BOOST_PP_ITERATION(), LUABIND_TUPLE_PARAMS, _)> >
+ , luabind::detail::proxy_function_caller<Ret, boost::tuples::tuple<BOOST_PP_ENUM(BOOST_PP_ITERATION(), LUABIND_TUPLE_PARAMS, _)> > >::type proxy_type;
+
+- lua_pushstring(L, name);
+- lua_gettable(L, LUA_GLOBALSINDEX);
++ lua_getglobal(L, name);
+
+ return proxy_type(L, 1, &detail::resume_impl, args);
+ }
+diff --git a/luabind/object.hpp b/luabind/object.hpp
+index 106c2e2..698d236 100644
+--- a/luabind/object.hpp
++++ b/luabind/object.hpp
+@@ -1213,7 +1213,11 @@ inline object newtable(lua_State* interpreter)
+ // this could be optimized by returning a proxy
+ inline object globals(lua_State* interpreter)
+ {
++#if LUA_VERSION_NUM >= 502
++ lua_rawgeti(interpreter, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS);
++#else
+ lua_pushvalue(interpreter, LUA_GLOBALSINDEX);
++#endif
+ detail::stack_pop pop(interpreter, 1);
+ return object(from_stack(interpreter, -1));
+ }
+diff --git a/src/class_rep.cpp b/src/class_rep.cpp
+index 70bb623..5f03f39 100755
+--- a/src/class_rep.cpp
++++ b/src/class_rep.cpp
+@@ -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;
+ }
+diff --git a/src/create_class.cpp b/src/create_class.cpp
+index 9800c15..738cf9b 100755
+--- a/src/create_class.cpp
++++ b/src/create_class.cpp
+@@ -131,9 +131,8 @@
+ 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);
+diff --git a/src/open.cpp b/src/open.cpp
+index f20dcfc..ec8e4ff 100755
+--- a/src/open.cpp
++++ b/src/open.cpp
+@@ -178,21 +178,18 @@
+ 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
+diff --git a/src/scope.cpp b/src/scope.cpp
+index 6495687..24a94c9 100755
+--- a/src/scope.cpp
++++ b/src/scope.cpp
+@@ -136,22 +136,24 @@
+ {
+ 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
+ {
++#if LUA_VERSION_NUM >= 502
++ lua_rawgeti(m_state, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS);
++#else
+ lua_pushvalue(m_state, LUA_GLOBALSINDEX);
++#endif
+ }
+
+ lua_pop_stack guard(m_state);
+diff --git a/test/benchmark.cpp b/test/benchmark.cpp
+index 0b66ed9..1923e8e 100644
+--- a/test/benchmark.cpp
++++ b/test/benchmark.cpp
+@@ -49,9 +49,8 @@ int main()
+
+ function(L, "test1", &f1);
+
+- lua_pushstring(L, "test2");
+ lua_pushcclosure(L, &f2, 0);
+- lua_settable(L, LUA_GLOBALSINDEX);
++ lua_setglobal(L, "test2");
+
+ std::clock_t total1 = 0;
+ std::clock_t total2 = 0;
+diff --git a/test/test_free_functions.cpp b/test/test_free_functions.cpp
+index 04dec6b..6a2df4b 100644
+--- a/test/test_free_functions.cpp
++++ b/test/test_free_functions.cpp
+@@ -77,9 +77,8 @@ void test_main(lua_State* L)
+ {
+ using namespace luabind;
+
+- lua_pushstring(L, "f");
+ lua_pushcclosure(L, &function_should_never_be_called, 0);
+- lua_settable(L, LUA_GLOBALSINDEX);
++ lua_setglobal(L, "f");
+
+ DOSTRING(L, "assert(f() == 10)");
+
+--
+1.8.1.6
+