From ec22b8d643052dee5219ae02d47bd0fd75eacd25 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 16 Dec 2017 21:21:35 +0100 Subject: [PATCH] Lua/LuaInstance: Fix movement, for real --- src/Nazara/Lua/LuaInstance.cpp | 35 +++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/Nazara/Lua/LuaInstance.cpp b/src/Nazara/Lua/LuaInstance.cpp index c912ce483..64eedf502 100644 --- a/src/Nazara/Lua/LuaInstance.cpp +++ b/src/Nazara/Lua/LuaInstance.cpp @@ -39,14 +39,19 @@ namespace Nz } LuaInstance::LuaInstance(LuaInstance&& instance) : - LuaState(std::move(instance)), - m_memoryLimit(std::move(m_memoryLimit)), - m_memoryUsage(std::move(m_memoryUsage)), - m_timeLimit(std::move(m_timeLimit)), - m_clock(std::move(m_clock)), - m_level(std::move(m_level)) + LuaState(std::move(instance)) { - lua_setallocf(m_state, MemoryAllocator, this); + std::swap(m_memoryLimit, instance.m_memoryLimit); + std::swap(m_memoryUsage, instance.m_memoryUsage); + std::swap(m_timeLimit, instance.m_timeLimit); + std::swap(m_clock, instance.m_clock); + std::swap(m_level, instance.m_level); + + if (m_state) + lua_setallocf(m_state, MemoryAllocator, this); + + if (instance.m_state) + lua_setallocf(instance.m_state, MemoryAllocator, &instance); } LuaInstance::~LuaInstance() @@ -59,13 +64,17 @@ namespace Nz { LuaState::operator=(std::move(instance)); - m_memoryLimit = std::move(instance.m_memoryLimit); - m_memoryUsage = std::move(instance.m_memoryUsage); - m_timeLimit = std::move(instance.m_timeLimit); - m_clock = std::move(instance.m_clock); - m_level = std::move(instance.m_level); + std::swap(m_memoryLimit, instance.m_memoryLimit); + std::swap(m_memoryUsage, instance.m_memoryUsage); + std::swap(m_timeLimit, instance.m_timeLimit); + std::swap(m_clock, instance.m_clock); + std::swap(m_level, instance.m_level); - lua_setallocf(m_state, MemoryAllocator, this); + if (m_state) + lua_setallocf(m_state, MemoryAllocator, this); + + if (instance.m_state) + lua_setallocf(instance.m_state, MemoryAllocator, &instance); return *this; }