From f5df0eb056df95fdfff8d118b839a236f786f4d8 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 16 Dec 2017 19:09:01 +0100 Subject: [PATCH] Lua/LuaInstance: Fix movement --- include/Nazara/Lua/LuaInstance.hpp | 4 ++-- include/Nazara/Lua/LuaInstance.inl | 5 +++++ include/Nazara/Lua/LuaState.hpp | 7 ++++--- include/Nazara/Lua/LuaState.inl | 17 ----------------- src/Nazara/Lua/LuaInstance.cpp | 25 +++++++++++++++++++++++-- 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/include/Nazara/Lua/LuaInstance.hpp b/include/Nazara/Lua/LuaInstance.hpp index 64f998641..6bdbc6338 100644 --- a/include/Nazara/Lua/LuaInstance.hpp +++ b/include/Nazara/Lua/LuaInstance.hpp @@ -22,7 +22,7 @@ namespace Nz public: LuaInstance(); LuaInstance(const LuaInstance&) = delete; - LuaInstance(LuaInstance&& instance) = default; + LuaInstance(LuaInstance&& instance); ~LuaInstance(); inline std::size_t GetMemoryLimit() const; @@ -33,7 +33,7 @@ namespace Nz inline void SetTimeLimit(UInt32 limit); LuaInstance& operator=(const LuaInstance&) = delete; - LuaInstance& operator=(LuaInstance&& instance) = default; + LuaInstance& operator=(LuaInstance&& instance); private: inline void SetMemoryUsage(std::size_t memoryUsage); diff --git a/include/Nazara/Lua/LuaInstance.inl b/include/Nazara/Lua/LuaInstance.inl index 1a37cf27a..21d9b061e 100644 --- a/include/Nazara/Lua/LuaInstance.inl +++ b/include/Nazara/Lua/LuaInstance.inl @@ -30,6 +30,11 @@ namespace Nz { m_timeLimit = limit; } + + inline void LuaInstance::SetMemoryUsage(std::size_t memoryUsage) + { + m_memoryUsage = memoryUsage; + } } #include diff --git a/include/Nazara/Lua/LuaState.hpp b/include/Nazara/Lua/LuaState.hpp index a9e229d31..22b8ceebb 100644 --- a/include/Nazara/Lua/LuaState.hpp +++ b/include/Nazara/Lua/LuaState.hpp @@ -8,6 +8,7 @@ #define NAZARA_LUASTATE_HPP #include +#include #include #include #include @@ -32,7 +33,7 @@ namespace Nz { public: LuaState(const LuaState&) = default; - inline LuaState(LuaState&& instance) noexcept; + LuaState(LuaState&& instance) = default; ~LuaState() = default; void ArgCheck(bool condition, unsigned int argNum, const char* error) const; @@ -173,7 +174,7 @@ namespace Nz void* ToUserdata(int index, const String& tname) const; LuaState& operator=(const LuaState&) = default; - inline LuaState& operator=(LuaState&& instance) noexcept; + LuaState& operator=(LuaState&& instance) = default; static int GetIndexOfUpValue(int upValue); static LuaInstance& GetInstance(lua_State* internalState); @@ -188,8 +189,8 @@ namespace Nz static int ProxyFunc(lua_State* internalState); + MovablePtr m_state; String m_lastError; - lua_State* m_state; }; } diff --git a/include/Nazara/Lua/LuaState.inl b/include/Nazara/Lua/LuaState.inl index b2f7a8731..62669d72b 100644 --- a/include/Nazara/Lua/LuaState.inl +++ b/include/Nazara/Lua/LuaState.inl @@ -19,13 +19,6 @@ namespace Nz { } - inline LuaState::LuaState(LuaState&& state) noexcept : - m_lastError(state.m_lastError), - m_state(state.m_state) - { - state.m_state = nullptr; - } - inline lua_State* LuaState::GetInternalState() const { return m_state; @@ -776,16 +769,6 @@ namespace Nz SetMetatable(tname); } - inline LuaState& LuaState::operator=(LuaState&& state) noexcept - { - m_lastError = std::move(state.m_lastError); - m_state = state.m_state; - - state.m_state = nullptr; - - return *this; - } - template std::enable_if_t::value, T> LuaState::CheckBounds(int index, long long value) const { diff --git a/src/Nazara/Lua/LuaInstance.cpp b/src/Nazara/Lua/LuaInstance.cpp index 6b06aaacc..c912ce483 100644 --- a/src/Nazara/Lua/LuaInstance.cpp +++ b/src/Nazara/Lua/LuaInstance.cpp @@ -38,15 +38,36 @@ namespace Nz luaL_openlibs(m_state); } + 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)) + { + lua_setallocf(m_state, MemoryAllocator, this); + } + LuaInstance::~LuaInstance() { if (m_state) lua_close(m_state); } - inline void LuaInstance::SetMemoryUsage(std::size_t memoryUsage) + LuaInstance& LuaInstance::operator=(LuaInstance&& instance) { - m_memoryUsage = memoryUsage; + 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); + + lua_setallocf(m_state, MemoryAllocator, this); + + return *this; } void* LuaInstance::MemoryAllocator(void* ud, void* ptr, std::size_t osize, std::size_t nsize)