diff options
Diffstat (limited to 'Source/3rdParty/Luax/luax_state.inl')
-rw-r--r-- | Source/3rdParty/Luax/luax_state.inl | 56 |
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 |