summaryrefslogtreecommitdiff
path: root/Source/3rdParty/Luax/luax_state.inl
diff options
context:
space:
mode:
Diffstat (limited to 'Source/3rdParty/Luax/luax_state.inl')
-rw-r--r--Source/3rdParty/Luax/luax_state.inl56
1 files changed, 30 insertions, 26 deletions
diff --git a/Source/3rdParty/Luax/luax_state.inl b/Source/3rdParty/Luax/luax_state.inl
index b5ee5aa..bd7ca9a 100644
--- a/Source/3rdParty/Luax/luax_state.inl
+++ b/Source/3rdParty/Luax/luax_state.inl
@@ -1,10 +1,10 @@
namespace Luax
{
- // ͨ͵вͬע̣ͨLuaxStateRegister_ʵ
-
- // עṤΪעinterface tableclass tabletype nameΪƿռϡע׶βԪȵNewõʱŻᡣ
-
+ ///
+ /// עṤΪעinterface tableclass tabletype nameΪƿռϡע׶βԪȵNew
+ /// õʱŻᡣ
+ ///
template<typename T>
void LuaxState::RegisterFactory()
{
@@ -12,56 +12,51 @@ namespace Luax
LuaxState& state = *this;
int top = lua_gettop(L); // namespace table
-
assert(lua_istable(L, top));
- const char* type = T::GetLuaxFactoryName();
-
- // interface table
+ // 1) interface table
lua_newtable(L);
+ LuaxClass<T>::RegisterLuaxInterface(state);
+ T::RegisterLuaxInterface(state);
// interface table[__index] = interface table
lua_pushvalue(L, -1);
lua_setfield(L, -2, "__index");
- LuaxClass<T>::RegisterLuaxInterface(state);
- T::RegisterLuaxInterface(state);
-
- LuaxClass<T>::SetInterfaceTableRef(state, -1);
+ LuaxClass<T>::SetLuaxInterfaceTableRef(state, -1);
lua_settop(L, top);
- // class table
+ // 2) class table
lua_newtable(L);
-
LuaxClass<T>::RegisterLuaxClass(state);
LuaxClass<T>::RegisterLuaxFactoryClass(state);
T::RegisterLuaxClass(state);
// TǷûעķ
-#define _assertmethod(I, NAME) \
- GetField(I, NAME); \
- assert(IsType(-1, LUA_TFUNCTION)); \
- Pop();
+ #define _assertmethod(I, NAME) \
+ GetField(I, NAME); \
+ assert(IsType(-1, LUA_TFUNCTION)); \
+ Pop();
- // NewûУûеĻʾһ
- //_assertmethod(-1, "New");
+ _assertmethod(-1, "New");
-#undef _assertmethod
+ #undef _assertmethod
// .Extend()
lua_pushvalue(state, -1); // class table
- LuaxClass<T>::PushInterfaceTable(state); // interface table
+ LuaxClass<T>::PushLuaxInterfaceTable(state); // interface table
lua_pushcclosure(state, LuaxClass<T>::l_ExtendFactory, 2);
lua_setfield(state, -2, "Extend");
// .GetInterfaceTable()
- LuaxClass<T>::PushInterfaceTable(state); // interface table
+ LuaxClass<T>::PushLuaxInterfaceTable(state); // interface table
lua_pushcclosure(state, LuaxClass<T>::l_GetInterfaceTable, 1);
lua_setfield(state, -2, "GetInterfaceTable");
- LuaxClass<T>::SetClassTableRef(state, -1);
+ LuaxClass<T>::SetLuaxClassTableRef(state, -1);
+ const char* type = T::GetLuaxFactoryName();
SetField(top, type);
// reset top
@@ -71,7 +66,9 @@ namespace Luax
T::RegisterLuaxPostprocess(state);
}
- // עᵥ
+ ///
+ /// Singletonֻһclass tableûinterface table
+ ///
template<typename T>
void LuaxState::RegisterSingleton()
{
@@ -85,11 +82,18 @@ namespace Luax
// class table.
lua_newtable(L);
-
LuaxClass<T>::RegisterLuaxClass(state);
LuaxClass<T>::RegisterLuaxFactoryClass(state);
T::RegisterLuaxClass(state);
+ LuaxClass<T>::SetLuaxClassTableRef(state, -1);
+
+ // class table__index__newindexָ
+ lua_pushvalue(state, -1);
+ lua_setfield(state, -2, "__index");
+ lua_pushvalue(state, -1);
+ lua_setfield(state, -2, "__newindex");
+
SetField(top, type);
// reset top