diff options
Diffstat (limited to 'source/3rd-party/Luax/luax_state.inl')
-rw-r--r-- | source/3rd-party/Luax/luax_state.inl | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/source/3rd-party/Luax/luax_state.inl b/source/3rd-party/Luax/luax_state.inl index 06d9350..4af45a2 100644 --- a/source/3rd-party/Luax/luax_state.inl +++ b/source/3rd-party/Luax/luax_state.inl @@ -125,7 +125,7 @@ namespace Luax } template<typename T> - T* LuaxState::GetLuaUserdata(int idx) + T* LuaxState::GetUserdata(int idx) { void* p = nullptr; @@ -137,4 +137,33 @@ namespace Luax return static_cast<T*>(p); } + template<typename T> + T* LuaxState::CheckUserdata(int idx) + { + if (IsType(idx, LUA_TUSERDATA)) + { + if (lua_getmetatable(mState, idx)) // ref table + { + if (lua_getmetatable(mState, -1)) // member table + { + if (lua_getmetatable(mState, -1)) // class table + { + T::PushLuaxClassTable(*this); // target class table + if (lua_rawequal(mState, -1, -2)) + { + Pop(4); // ref\member\class\target class + T* udata = GetUserdata<T>(idx); + return udata; // userdata + } + Pop(2); // target class table\class table + } + Pop(1); // member table + } + Pop(1); // ref table + } + } + luaL_typerror(mState, idx, T::GetLuaxClassName()); + return nullptr; + } + }
\ No newline at end of file |