diff options
Diffstat (limited to 'src/luabind-3-globalsindex.patch')
-rw-r--r-- | src/luabind-3-globalsindex.patch | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/src/luabind-3-globalsindex.patch b/src/luabind-3-globalsindex.patch new file mode 100644 index 0000000..e34c00b --- /dev/null +++ b/src/luabind-3-globalsindex.patch @@ -0,0 +1,205 @@ +This file is part of MXE. +See index.html for further information. + +commit 7325c469a8eb443cd2d46c9860f278cd2672dace +Author: Boris Nagaev <bnagaev@gmail.com> +Date: Fri Aug 22 15:27:11 2014 +0400 + + LUA_GLOBALSINDEX + +diff --git a/luabind/detail/call_function.hpp b/luabind/detail/call_function.hpp +index 8f5afff..cb56dc0 100644 +--- a/luabind/detail/call_function.hpp ++++ b/luabind/detail/call_function.hpp +@@ -347,8 +347,7 @@ namespace luabind + , 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); + } +@@ -390,8 +389,7 @@ namespace luabind + , 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/detail/object_funs.hpp b/luabind/detail/object_funs.hpp +index 2600238..f826d7a 100644 +--- a/luabind/detail/object_funs.hpp ++++ b/luabind/detail/object_funs.hpp +@@ -184,7 +184,11 @@ namespace luabind + + inline object get_globals(lua_State* L) + { ++#ifdef LUA_GLOBALSINDEX + lua_pushvalue(L, LUA_GLOBALSINDEX); ++#else ++ lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS); ++#endif + detail::lua_reference ref; + ref.set(L); + return object(L, ref, true/*object::reference()*/); +diff --git a/luabind/object.hpp b/luabind/object.hpp +index f7b7ca5..b288171 100644 +--- a/luabind/object.hpp ++++ b/luabind/object.hpp +@@ -1207,7 +1207,12 @@ inline object newtable(lua_State* interpreter) + // this could be optimized by returning a proxy + inline object globals(lua_State* interpreter) + { ++#ifdef LUA_GLOBALSINDEX + lua_pushvalue(interpreter, LUA_GLOBALSINDEX); ++#else ++ lua_rawgeti(interpreter, LUA_REGISTRYINDEX, ++ LUA_RIDX_GLOBALS); ++#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..912df95 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_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 c0eb719..47251ef 100755 +--- a/src/create_class.cpp ++++ b/src/create_class.cpp +@@ -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); +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 @@ 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 +diff --git a/src/scope.cpp b/src/scope.cpp +index 6495687..d4d1f24 100755 +--- a/src/scope.cpp ++++ b/src/scope.cpp +@@ -136,22 +136,25 @@ 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 + { ++#ifdef LUA_GLOBALSINDEX + lua_pushvalue(m_state, LUA_GLOBALSINDEX); ++#else ++ lua_rawgeti(m_state, LUA_REGISTRYINDEX, ++ LUA_RIDX_GLOBALS); ++#endif + } + + lua_pop_stack guard(m_state); |