public static LuaRef create_class(lua_State L, LuaRef parentModule, string name, Type classType, LuaNativeFunction dctor) { int moduleRef = parentModule.Ref; int classId = SharpObject.TypeID(classType); #if C_API int metaRef = luna_create_class(L, moduleRef, name, classId, dctor.ToFunctionPointer()); var meta = new LuaRef(metaRef, L); #else string fullName = GetFullName(parentModule, name); LuaRef meta = LuaRef.CreateTable(L); meta.SetMetaTable(meta); meta.RawSet("__index", (LuaNativeFunction)class_index); meta.RawSet("__newindex", (LuaNativeFunction)class_newindex); meta.RawSet(___getters, LuaRef.CreateTable(L)); meta.RawSet(___setters, LuaRef.CreateTable(L)); meta.RawSet(___type, fullName); if (dctor != null) { meta.RawSet("__gc", dctor); } if (classId != 0) { LuaRef registry = LuaRef.Registry(L); registry.RawSet(classId, meta); } parentModule.RawSet(name, meta); #endif meta.RawSet("type", classType); return(meta); }