summaryrefslogtreecommitdiff
path: root/Runtime/Lua/LuaBind/LuaBindRefTable.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-10-22 23:59:54 +0800
committerchai <chaifix@163.com>2021-10-22 23:59:54 +0800
commit4dafefe46a72ba47468b13d011f8299055081b0f (patch)
tree2a85835ec4d74fecf3815397b384cefe39d31f56 /Runtime/Lua/LuaBind/LuaBindRefTable.cpp
parent1f18d2afec632aa9361079ca3bcb5a7f2d73db3a (diff)
*LuaBind
Diffstat (limited to 'Runtime/Lua/LuaBind/LuaBindRefTable.cpp')
-rw-r--r--Runtime/Lua/LuaBind/LuaBindRefTable.cpp34
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);
}