diff options
Diffstat (limited to '3rdparty/sol2/sol/variadic_args.hpp')
-rw-r--r-- | 3rdparty/sol2/sol/variadic_args.hpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/3rdparty/sol2/sol/variadic_args.hpp b/3rdparty/sol2/sol/variadic_args.hpp index 36fa3cda7e2..38d258220e0 100644 --- a/3rdparty/sol2/sol/variadic_args.hpp +++ b/3rdparty/sol2/sol/variadic_args.hpp @@ -42,7 +42,7 @@ namespace sol { stack_proxy sp; va_iterator() : L(nullptr), index((std::numeric_limits<int>::max)()), stacktop((std::numeric_limits<int>::max)()) {} - va_iterator(lua_State* L, int index, int stacktop) : L(L), index(index), stacktop(stacktop), sp(L, index) {} + va_iterator(lua_State* luastate, int idx, int topidx) : L(luastate), index(idx), stacktop(topidx), sp(luastate, idx) {} reference operator*() { return stack_proxy(L, index); @@ -153,7 +153,7 @@ namespace sol { typedef std::reverse_iterator<const_iterator> const_reverse_iterator; variadic_args() = default; - variadic_args(lua_State* L, int index = -1) : L(L), index(lua_absindex(L, index)), stacktop(lua_gettop(L)) {} + variadic_args(lua_State* luastate, int stackindex = -1) : L(luastate), index(lua_absindex(luastate, stackindex)), stacktop(lua_gettop(luastate)) {} variadic_args(const variadic_args&) = default; variadic_args& operator=(const variadic_args&) = default; variadic_args(variadic_args&& o) : L(o.L), index(o.index), stacktop(o.stacktop) { @@ -192,11 +192,18 @@ namespace sol { const_reverse_iterator crend() const { return std::reverse_iterator<const_iterator>(cend()); } int push() const { + return push(L); + } + + int push(lua_State* target) const { int pushcount = 0; for (int i = index; i <= stacktop; ++i) { lua_pushvalue(L, i); pushcount += 1; } + if (target != L) { + lua_xmove(L, target, pushcount); + } return pushcount; } @@ -226,8 +233,8 @@ namespace sol { template <> struct pusher<variadic_args> { - static int push(lua_State*, const variadic_args& ref) { - return ref.push(); + static int push(lua_State* L, const variadic_args& ref) { + return ref.push(L); } }; } // stack |