diff options
Diffstat (limited to 'Runtime/Lua/LuaBind')
-rw-r--r-- | Runtime/Lua/LuaBind/LuaBindRef.cpp | 16 | ||||
-rw-r--r-- | Runtime/Lua/LuaBind/LuaBindRef.h | 10 | ||||
-rw-r--r-- | Runtime/Lua/LuaBind/LuaBindState.h | 6 | ||||
-rw-r--r-- | Runtime/Lua/LuaBind/LuaBindUtility.h | 8 | ||||
-rw-r--r-- | Runtime/Lua/LuaBind/LuaBindVM.cpp | 5 |
5 files changed, 23 insertions, 22 deletions
diff --git a/Runtime/Lua/LuaBind/LuaBindRef.cpp b/Runtime/Lua/LuaBind/LuaBindRef.cpp index b2f8e1c..d0f2766 100644 --- a/Runtime/Lua/LuaBind/LuaBindRef.cpp +++ b/Runtime/Lua/LuaBind/LuaBindRef.cpp @@ -4,24 +4,24 @@ namespace LuaBind { - Ref::Ref(LuaBind::VM* vm, RefMode mode) + UniversalRef::UniversalRef(LuaBind::VM* vm, RefMode mode) : mRefID(LUA_NOREF) , mMode(mode) , mOwner(vm) { } - Ref::~Ref() + UniversalRef::~UniversalRef() { // 自动释放引用 } - Ref::operator bool() + UniversalRef::operator bool() { return (mRefID != LUA_NOREF); } - void Ref::UnRef() + void UniversalRef::UnRef() { if (mRefID == LUA_NOREF) return; @@ -41,7 +41,7 @@ namespace LuaBind } } - void Ref::SetRef(LuaBind::State& state, int idx) + void UniversalRef::SetRef(LuaBind::State& state, int idx) { assert(state.GetVM() == mOwner); @@ -59,7 +59,7 @@ namespace LuaBind } } - bool Ref::PushRef(LuaBind::State& state) + bool UniversalRef::PushRef(LuaBind::State& state) { assert(mRefID != LUA_NOREF); @@ -84,12 +84,12 @@ namespace LuaBind } StrongRef::StrongRef(LuaBind::VM* vm) - : Ref(vm, STRONG_REF) + : UniversalRef(vm, STRONG_REF) { } WeakRef::WeakRef(LuaBind::VM* vm) - : Ref(vm, WEAK_REF) + : UniversalRef(vm, WEAK_REF) { } diff --git a/Runtime/Lua/LuaBind/LuaBindRef.h b/Runtime/Lua/LuaBind/LuaBindRef.h index c7b7ab3..793559e 100644 --- a/Runtime/Lua/LuaBind/LuaBindRef.h +++ b/Runtime/Lua/LuaBind/LuaBindRef.h @@ -9,7 +9,7 @@ namespace LuaBind // 全局引用,保存在LUA_REGISTRYINDEX下面的两个表里,生命周期手动控制 // 如果要用局部引用,用MemberRef,会保存在UserData的RefTable里,生命周期和UserData一致 - class Ref + class UniversalRef { public: enum RefMode @@ -18,8 +18,8 @@ namespace LuaBind WEAK_REF }; - Ref(LuaBind::VM* vm, RefMode mode = STRONG_REF); - virtual ~Ref(); + UniversalRef(LuaBind::VM* vm, RefMode mode = STRONG_REF); + virtual ~UniversalRef(); operator bool(); @@ -43,7 +43,7 @@ namespace LuaBind }; // 强引用,在LUA_REGISTRYINDEX["GAMELAB_UNIVERSAL_STRONG_REFERENCE_TABLE"]里,保证lua object不会被回收 - class StrongRef: public Ref + class StrongRef: public UniversalRef { public: StrongRef(LuaBind::VM* vm); @@ -51,7 +51,7 @@ namespace LuaBind }; // 弱引用,在LUA_REGISTRYINDEX["GAMELAB_UNIVERSAL_WEAK_REFERENCE_TABLE"]里,不影响lua object的回收,只是作为一个方便取lua object的映射 - class WeakRef : public Ref + class WeakRef : public UniversalRef { public: WeakRef(LuaBind::VM* vm); diff --git a/Runtime/Lua/LuaBind/LuaBindState.h b/Runtime/Lua/LuaBind/LuaBindState.h index 60e05be..c81ba8c 100644 --- a/Runtime/Lua/LuaBind/LuaBindState.h +++ b/Runtime/Lua/LuaBind/LuaBindState.h @@ -227,9 +227,8 @@ namespace LuaBind //--------------------------------------------------------------------------------// - // 确保不安全的lua调用能够在调用之后返回到最初stack状态。 - class ScopedState - : public State + // RAII, 确保不安全的lua调用能够在调用之后返回到最初stack状态。 + class ScopedState : public State { public: ScopedState(lua_State* state) @@ -253,7 +252,6 @@ namespace LuaBind private: void* operator new(size_t); int mRestoreTop; - }; // 注册工厂,注册class table,以type name为键设置在名称空间上。在注册阶段不会设置元表,等到New方法调用的时候才会。 diff --git a/Runtime/Lua/LuaBind/LuaBindUtility.h b/Runtime/Lua/LuaBind/LuaBindUtility.h index 94f2e9c..7e6eb77 100644 --- a/Runtime/Lua/LuaBind/LuaBindUtility.h +++ b/Runtime/Lua/LuaBind/LuaBindUtility.h @@ -6,10 +6,10 @@ // RegisterClass 注册类的方法和成员,比如枚举、常量等到class table GetNativeClassName 获得工厂的类名, // 同时用来避免注册时错误注册为了singleton,通过编译时报错避免 #define LUA_BIND_DECL_CLASS(type, ...) \ - friend class ::State; \ - friend class ::NativeClass<type,##__VA_ARGS__>; \ - static void RegisterClass(::State&); \ - static void RegisterPostprocess(::State&); \ + friend class LuaBind::State; \ + friend class LuaBind::NativeClass<type,##__VA_ARGS__>; \ + static void RegisterClass(LuaBind::State&); \ + static void RegisterPostprocess(LuaBind::State&); \ static const char* GetNativeClassName() { return #type; };\ static const char* GetClassName() { return #type; }; diff --git a/Runtime/Lua/LuaBind/LuaBindVM.cpp b/Runtime/Lua/LuaBind/LuaBindVM.cpp index e454929..7a56013 100644 --- a/Runtime/Lua/LuaBind/LuaBindVM.cpp +++ b/Runtime/Lua/LuaBind/LuaBindVM.cpp @@ -62,7 +62,10 @@ namespace LuaBind void VM::SetCurThread(lua_State* cur) { - mCurThread = cur; + if (this) + { + mCurThread = cur; + } } lua_State* VM::GetCurThread() |