diff options
Diffstat (limited to 'Runtime/Lua/LuaBind')
-rw-r--r-- | Runtime/Lua/LuaBind/LuaBindRef.cpp | 22 | ||||
-rw-r--r-- | Runtime/Lua/LuaBind/LuaBindRef.h | 7 | ||||
-rw-r--r-- | Runtime/Lua/LuaBind/LuaBindState.cpp | 6 |
3 files changed, 34 insertions, 1 deletions
diff --git a/Runtime/Lua/LuaBind/LuaBindRef.cpp b/Runtime/Lua/LuaBind/LuaBindRef.cpp index d0f2766..313824e 100644 --- a/Runtime/Lua/LuaBind/LuaBindRef.cpp +++ b/Runtime/Lua/LuaBind/LuaBindRef.cpp @@ -3,6 +3,12 @@ namespace LuaBind { + UniversalRef::UniversalRef(RefMode mode) + : mRefID(LUA_NOREF) + , mMode(mode) + , mOwner(NULL) // 延后设置 + { + } UniversalRef::UniversalRef(LuaBind::VM* vm, RefMode mode) : mRefID(LUA_NOREF) @@ -43,7 +49,11 @@ namespace LuaBind void UniversalRef::SetRef(LuaBind::State& state, int idx) { - assert(state.GetVM() == mOwner); + //assert(state.GetVM() == mOwner); + // 延后设置vm + if (mOwner == NULL) { + mOwner = state.GetVM(); + } VM* vm = mOwner; if (!vm) return; @@ -83,11 +93,21 @@ namespace LuaBind return true; } + StrongRef::StrongRef() + : UniversalRef(STRONG_REF) + { + } + StrongRef::StrongRef(LuaBind::VM* vm) : UniversalRef(vm, STRONG_REF) { } + WeakRef::WeakRef() + : UniversalRef(WEAK_REF) + { + } + WeakRef::WeakRef(LuaBind::VM* vm) : UniversalRef(vm, WEAK_REF) { diff --git a/Runtime/Lua/LuaBind/LuaBindRef.h b/Runtime/Lua/LuaBind/LuaBindRef.h index 793559e..a19e5bf 100644 --- a/Runtime/Lua/LuaBind/LuaBindRef.h +++ b/Runtime/Lua/LuaBind/LuaBindRef.h @@ -18,6 +18,7 @@ namespace LuaBind WEAK_REF }; + UniversalRef(RefMode mode = STRONG_REF); // 延后到SetRef设置vm UniversalRef(LuaBind::VM* vm, RefMode mode = STRONG_REF); virtual ~UniversalRef(); @@ -46,6 +47,9 @@ namespace LuaBind class StrongRef: public UniversalRef { public: + // 延后到SetRef设置vm + StrongRef(); + StrongRef(LuaBind::VM* vm); }; @@ -54,6 +58,9 @@ namespace LuaBind class WeakRef : public UniversalRef { public: + // 延后到SetRef设置vm + WeakRef(); + WeakRef(LuaBind::VM* vm); }; diff --git a/Runtime/Lua/LuaBind/LuaBindState.cpp b/Runtime/Lua/LuaBind/LuaBindState.cpp index 9210768..384cba2 100644 --- a/Runtime/Lua/LuaBind/LuaBindState.cpp +++ b/Runtime/Lua/LuaBind/LuaBindState.cpp @@ -602,6 +602,12 @@ namespace LuaBind case '+': if (type == LUA_TNIL) expected = false; break; + + // nil + case '!': + if (type != LUA_TNIL) expected = false; + break; + } if (!expected) { |