diff options
Diffstat (limited to 'Source/3rdParty/Luax/luax_class.cpp')
-rw-r--r-- | Source/3rdParty/Luax/luax_class.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Source/3rdParty/Luax/luax_class.cpp b/Source/3rdParty/Luax/luax_class.cpp index bdff377..3840d00 100644 --- a/Source/3rdParty/Luax/luax_class.cpp +++ b/Source/3rdParty/Luax/luax_class.cpp @@ -21,12 +21,20 @@ namespace Luax lua_pushcclosure(L, luax_c_getupvalue, 1); lua_setfield(L, -2, "GetClassName"); + // GetClass() + lua_pushvalue(L, -1); // class table + lua_pushcclosure(L, luax_c_getupvalue, 1); + lua_setfield(L, -2, "GetClass"); + // New() lua_pushvalue(L, -1); // class table lua_pushcclosure(L, l_New, 1); lua_setfield(L, -2, "New"); // Extend() + lua_pushvalue(L, -1); // class table + lua_pushcclosure(L, l_Extend, 1); + lua_setfield(L, -2, "Extend"); lua_pushvalue(L, -1); // class table lua_setfield(L, -2, "__index"); @@ -101,4 +109,54 @@ namespace Luax return 1; } + int LuaxPlainClass::l_Extend(lua_State* L) + { + LUAX_STATE(L); + + // upvalues: + // 1: base class + + // params: + // 1: class name + + cc8* type = state.GetValue<cc8*>(1, ""); + + int baseClass = lua_upvalueindex(1); + + lua_newtable(L); // class table + + // GetClassName() + lua_pushstring(L, type); + lua_pushcclosure(L, luax_c_getupvalue, 1); + lua_setfield(L, -2, "GetClassName"); + + // GetClass() + lua_pushvalue(L, -1); // class table + lua_pushcclosure(L, luax_c_getupvalue, 1); + lua_setfield(L, -2, "GetClass"); + + // New() + lua_pushvalue(L, -1); // class table + lua_pushcclosure(L, l_New, 1); + lua_setfield(L, -2, "New"); + + // Extend() + lua_pushvalue(L, -1); // class table + lua_pushcclosure(L, l_Extend, 1); + lua_setfield(L, -2, "Extend"); + + // .base + lua_pushvalue(L, baseClass); + lua_setfield(L, -2, "base"); + + lua_pushvalue(L, -1); // class table + lua_setfield(L, -2, "__index"); + + // classmetatableΪbaseClass + lua_pushvalue(L, baseClass); + lua_setmetatable(L, -2); + + return 1; + } + }
\ No newline at end of file |