diff options
author | madmaxoft <github@xoft.cz> | 2014-02-09 18:39:22 +0100 |
---|---|---|
committer | madmaxoft <github@xoft.cz> | 2014-02-09 18:39:22 +0100 |
commit | 310a25c45697dbf3b1de6b0363f529691c422bf1 (patch) | |
tree | 4e8e8a427ac534d33877fe48a18991024b1866de /src/Bindings/LuaState.cpp | |
parent | Added AllToLua.pkg to MSVC project files. (diff) | |
download | cuberite-310a25c45697dbf3b1de6b0363f529691c422bf1.tar cuberite-310a25c45697dbf3b1de6b0363f529691c422bf1.tar.gz cuberite-310a25c45697dbf3b1de6b0363f529691c422bf1.tar.bz2 cuberite-310a25c45697dbf3b1de6b0363f529691c422bf1.tar.lz cuberite-310a25c45697dbf3b1de6b0363f529691c422bf1.tar.xz cuberite-310a25c45697dbf3b1de6b0363f529691c422bf1.tar.zst cuberite-310a25c45697dbf3b1de6b0363f529691c422bf1.zip |
Diffstat (limited to 'src/Bindings/LuaState.cpp')
-rw-r--r-- | src/Bindings/LuaState.cpp | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/src/Bindings/LuaState.cpp b/src/Bindings/LuaState.cpp index ac5ce47e1..22f342467 100644 --- a/src/Bindings/LuaState.cpp +++ b/src/Bindings/LuaState.cpp @@ -1240,13 +1240,21 @@ int cLuaState::ReportFnCallErrors(lua_State * a_LuaState) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // cLuaState::cRef: +cLuaState::cRef::cRef(void) : + m_LuaState(NULL), + m_Ref(LUA_REFNIL) +{ +} + + + + + cLuaState::cRef::cRef(cLuaState & a_LuaState, int a_StackPos) : - m_LuaState(a_LuaState) + m_LuaState(NULL), + m_Ref(LUA_REFNIL) { - ASSERT(m_LuaState.IsValid()); - - lua_pushvalue(m_LuaState, a_StackPos); // Push a copy of the value at a_StackPos onto the stack - m_Ref = luaL_ref(m_LuaState, LUA_REGISTRYINDEX); + RefStack(a_LuaState, a_StackPos); } @@ -1255,12 +1263,42 @@ cLuaState::cRef::cRef(cLuaState & a_LuaState, int a_StackPos) : cLuaState::cRef::~cRef() { - ASSERT(m_LuaState.IsValid()); + if (m_LuaState != NULL) + { + UnRef(); + } +} + + + + + +void cLuaState::cRef::RefStack(cLuaState & a_LuaState, int a_StackPos) +{ + ASSERT(a_LuaState.IsValid()); + if (m_LuaState != NULL) + { + UnRef(); + } + m_LuaState = &a_LuaState; + lua_pushvalue(a_LuaState, a_StackPos); // Push a copy of the value at a_StackPos onto the stack + m_Ref = luaL_ref(a_LuaState, LUA_REGISTRYINDEX); +} + + + + + +void cLuaState::cRef::UnRef(void) +{ + ASSERT(m_LuaState->IsValid()); // The reference should be destroyed before destroying the LuaState if (IsValid()) { - luaL_unref(m_LuaState, LUA_REGISTRYINDEX, m_Ref); + luaL_unref(*m_LuaState, LUA_REGISTRYINDEX, m_Ref); } + m_LuaState = NULL; + m_Ref = LUA_REFNIL; } |