summaryrefslogtreecommitdiff
path: root/Source/3rdParty/Luax/luax_class.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/3rdParty/Luax/luax_class.cpp')
-rw-r--r--Source/3rdParty/Luax/luax_class.cpp58
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