diff options
author | chai <chaifix@163.com> | 2021-10-22 23:59:54 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-10-22 23:59:54 +0800 |
commit | 4dafefe46a72ba47468b13d011f8299055081b0f (patch) | |
tree | 2a85835ec4d74fecf3815397b384cefe39d31f56 /Runtime/Lua/LuaBind/LuaBindRefTable.cpp | |
parent | 1f18d2afec632aa9361079ca3bcb5a7f2d73db3a (diff) |
*LuaBind
Diffstat (limited to 'Runtime/Lua/LuaBind/LuaBindRefTable.cpp')
-rw-r--r-- | Runtime/Lua/LuaBind/LuaBindRefTable.cpp | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/Runtime/Lua/LuaBind/LuaBindRefTable.cpp b/Runtime/Lua/LuaBind/LuaBindRefTable.cpp index 39ef9ab..f8a7a78 100644 --- a/Runtime/Lua/LuaBind/LuaBindRefTable.cpp +++ b/Runtime/Lua/LuaBind/LuaBindRefTable.cpp @@ -1,11 +1,12 @@ #include "LuaBindRefTable.h" #include "LuaBindState.h" +#include "LuaBindVM.h" namespace LuaBind { - RefTable::RefTable() - : mState(nullptr) + RefTable::RefTable(LuaBind::VM* vm) + : mVM(vm) { } @@ -13,9 +14,9 @@ namespace LuaBind { } - void RefTable::Init(State& state, cc8* name, cc8* mode) + void RefTable::Init( cc8* name, cc8* mode) { - assert(!mState); + assert(mVM); assert(name); mName = name; @@ -25,7 +26,7 @@ namespace LuaBind if (mode[i] == 'k') mMode |= WEAK_KEY; else if (mode[i] == 'v') mMode |= WEAK_VALUE; } - mState = state.GetHandle(); + State state = mVM->GetMainState(); state.GetField(LUA_REGISTRYINDEX, name); // register[mName] if (state.IsNil(-1)) @@ -58,21 +59,22 @@ namespace LuaBind bool RefTable::IsKeyWeak() { - assert(mState); + assert(mVM); return mMode & WEAK_KEY; } bool RefTable::IsValueWeak() { - assert(mState); + assert(mVM); return mMode & WEAK_VALUE; } int RefTable::Ref(State& state, int idx) { - assert(mState); + assert(mVM); + assert(mVM == state.GetVM()); idx = state.AbsIndex(idx); state.GetField(LUA_REGISTRYINDEX, mName); // ref table @@ -83,10 +85,11 @@ namespace LuaBind return refID; } - void RefTable::Unref(State& state, int refID) + void RefTable::UnRef(int refID) { - assert(mState); + assert(mVM); + State state = mVM->GetMainState(); state.GetField(LUA_REGISTRYINDEX, mName); // ref table luaL_unref(state, -1, refID); state.Pop(); @@ -95,24 +98,27 @@ namespace LuaBind void RefTable::PushRefTable(State& state) { - assert(mState); + assert(mVM); + assert(mVM == state.GetVM()); lua_getfield(state, LUA_REGISTRYINDEX, mName); } void RefTable::PushRef(State& state, int refID) { - assert(mState); + assert(mVM); + assert(mVM == state.GetVM()); lua_getfield(state, LUA_REGISTRYINDEX, mName); lua_rawgeti(state, -1, refID); lua_replace(state, -2); } - void RefTable::Clear(State& state) + void RefTable::Clear() { - assert(mState); + assert(mVM); + State state = mVM->GetMainState(); lua_newtable(state); state.SetField(LUA_REGISTRYINDEX, mName); } |