From 1497dccd63a84b7ee2b229b1ad9c5c02718f2a78 Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 19 Mar 2019 23:06:27 +0800 Subject: *rename --- Source/3rdParty/Luax/luax_class.cpp | 195 ------------------------------------ 1 file changed, 195 deletions(-) delete mode 100644 Source/3rdParty/Luax/luax_class.cpp (limited to 'Source/3rdParty/Luax/luax_class.cpp') diff --git a/Source/3rdParty/Luax/luax_class.cpp b/Source/3rdParty/Luax/luax_class.cpp deleted file mode 100644 index 4c74926..0000000 --- a/Source/3rdParty/Luax/luax_class.cpp +++ /dev/null @@ -1,195 +0,0 @@ -#include "luax_class.hpp" -#include "luax_runtime.h" -#include "luax_cfunctions.h" - -namespace Luax -{ - -#ifdef LUAX_ENABLE_PLAIN_CLASS - - int LuaxPlainClass::registry(lua_State* L) - { - LUAX_STATE(L); - - // params: - // 1: class name - - cc8* type = state.GetValue(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"); - - lua_pushvalue(L, -1); // class table - lua_setfield(L, -2, "__index"); - - lua_pushstring(L, type); - lua_pushcclosure(L, l___tostring, 1); - lua_setfield(L, -2, "__tostring"); - - return 1; - } - - int LuaxPlainClass::l___tostring(lua_State* L) - { - // upvalues: - // 1: class name - - // params: - // 1: instance - - if (!lua_istable(L, 1)) - { - return luaL_typerror(L, 1, lua_typename(L, LUA_TTABLE)); - } - - cc8* type = lua_tostring(L, lua_upvalueindex(1)); - - lua_pushfstring(L, "%s: %p", type, lua_topointer(L, 1)); - - return 1; - } - - /// - /// New函数接受n个参数,并尝试获取Ctor,将参数传给Ctor初始化实例。 - /// - int LuaxPlainClass::l_New(lua_State* L) - { - LUAX_STATE(L); - - // upvalues: - // 1: class table - - // params: - // n: params - int n = lua_gettop(L); - - int classTable = lua_upvalueindex(1); - - lua_newtable(L); // instance table - - // instance 的 metatable 设置为 class - lua_pushvalue(L, classTable); - lua_setmetatable(L, -2); - - // 找到构造函数,会触发metatable.__index,根据继承链向上找。 - lua_getfield(L, classTable, "Ctor"); - if (state.IsType(-1, LUA_TFUNCTION)) - { - // stack: - // -1: Ctor() - // -2: instance - // -3~-n-2: params - - lua_insert(L, -2 - n); - // stack: - // -1: instance - // -2~-n-1: params - // -n-2: Ctor() - - lua_pushvalue(L, -1); - // stack: - // -1: instance - // -2: instance - // -3~-n-2: params - // -n-3: Ctor - - lua_insert(L, -3 - n); - // stack: - // -1: instance - // -2~-n-1: params - // -n-2: Ctor() - // -n-3: instance - - lua_insert(L, -1 - n); - // stack: - // -1~-n: params - // -n-1: instance - // -n-2: Ctor() - // -n-3: instance - - lua_pcall(L, n + 1, 0, 0); - } - else - { - state.Pop(); - } - - return 1; - } - - int LuaxPlainClass::l_Extend(lua_State* L) - { - LUAX_STATE(L); - - // upvalues: - // 1: base class - - // params: - // 1: class name - - cc8* type = state.GetValue(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); // base class - lua_setfield(L, -2, "__base"); - - lua_pushvalue(L, -1); // class table - lua_setfield(L, -2, "__index"); - - lua_pushstring(L, type); - lua_pushcclosure(L, l___tostring, 1); - lua_setfield(L, -2, "__tostring"); - - // class的metatable设置为baseClass - lua_pushvalue(L, baseClass); - lua_setmetatable(L, -2); - - return 1; - } - -#endif /*LUAX_ENABLE_PLAIN_CLASS*/ - -} \ No newline at end of file -- cgit v1.1-26-g67d0