summaryrefslogtreecommitdiff
path: root/Runtime/Lua/LuaBind
diff options
context:
space:
mode:
Diffstat (limited to 'Runtime/Lua/LuaBind')
-rw-r--r--Runtime/Lua/LuaBind/LuaBindRef.cpp16
-rw-r--r--Runtime/Lua/LuaBind/LuaBindRef.h10
-rw-r--r--Runtime/Lua/LuaBind/LuaBindState.h6
-rw-r--r--Runtime/Lua/LuaBind/LuaBindUtility.h8
-rw-r--r--Runtime/Lua/LuaBind/LuaBindVM.cpp5
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()