summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/sol2/sol/variadic_args.hpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/sol2/sol/variadic_args.hpp')
-rw-r--r--3rdparty/sol2/sol/variadic_args.hpp15
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