From 670c5bd140b86a8b589595cb6cae62ae4e24cb2d Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 22 Jun 2020 14:10:12 +0200 Subject: Use QList instead of QVector in moc Task-number: QTBUG-84469 Change-Id: Id95a656e6277a7c348c02c3267a45ac176c1643b Reviewed-by: Fabian Kosmale --- src/tools/moc/generator.cpp | 60 ++++++++++++++++++++++++++------------------- src/tools/moc/generator.h | 26 ++++++++++++-------- src/tools/moc/moc.cpp | 14 +++++------ src/tools/moc/moc.h | 32 ++++++++++++------------ src/tools/moc/symbols.h | 2 +- 5 files changed, 75 insertions(+), 59 deletions(-) (limited to 'src/tools') diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index 999f86963e..0d3a763a48 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -80,12 +80,19 @@ QT_FOR_EACH_STATIC_TYPE(RETURN_METATYPENAME_STRING) return nullptr; } -Generator::Generator(ClassDef *classDef, const QVector &metaTypes, const QHash &knownQObjectClasses, const QHash &knownGadgets, FILE *outfile, bool requireCompleteTypes) - : out(outfile), cdef(classDef), metaTypes(metaTypes), knownQObjectClasses(knownQObjectClasses) - , knownGadgets(knownGadgets), requireCompleteTypes(requireCompleteTypes) -{ - if (cdef->superclassList.size()) - purestSuperClass = cdef->superclassList.constFirst().first; + Generator::Generator(ClassDef *classDef, const QList &metaTypes, + const QHash &knownQObjectClasses, + const QHash &knownGadgets, FILE *outfile, + bool requireCompleteTypes) + : out(outfile), + cdef(classDef), + metaTypes(metaTypes), + knownQObjectClasses(knownQObjectClasses), + knownGadgets(knownGadgets), + requireCompleteTypes(requireCompleteTypes) + { + if (cdef->superclassList.size()) + purestSuperClass = cdef->superclassList.constFirst().first; } static inline int lengthOfEscapeSequence(const QByteArray &s, int i) @@ -127,7 +134,7 @@ int Generator::stridx(const QByteArray &s) // Returns the sum of all parameters (including return type) for the given // \a list of methods. This is needed for calculating the size of the methods' // parameter type/name meta-data. -static int aggregateParameterCount(const QVector &list) +static int aggregateParameterCount(const QList &list) { int sum = 0; for (int i = 0; i < list.count(); ++i) @@ -150,22 +157,22 @@ bool Generator::registerableMetaType(const QByteArray &propertyType) return true; } - static const QVector smartPointers = QVector() + static const QList smartPointers = QList() #define STREAM_SMART_POINTER(SMART_POINTER) << #SMART_POINTER - QT_FOR_EACH_AUTOMATIC_TEMPLATE_SMART_POINTER(STREAM_SMART_POINTER) + QT_FOR_EACH_AUTOMATIC_TEMPLATE_SMART_POINTER(STREAM_SMART_POINTER) #undef STREAM_SMART_POINTER - ; + ; for (const QByteArray &smartPointer : smartPointers) { if (propertyType.startsWith(smartPointer + "<") && !propertyType.endsWith("&")) return knownQObjectClasses.contains(propertyType.mid(smartPointer.size() + 1, propertyType.size() - smartPointer.size() - 1 - 1)); } - static const QVector oneArgTemplates = QVector() + static const QList oneArgTemplates = QList() #define STREAM_1ARG_TEMPLATE(TEMPLATENAME) << #TEMPLATENAME - QT_FOR_EACH_AUTOMATIC_TEMPLATE_1ARG(STREAM_1ARG_TEMPLATE) + QT_FOR_EACH_AUTOMATIC_TEMPLATE_1ARG(STREAM_1ARG_TEMPLATE) #undef STREAM_1ARG_TEMPLATE - ; + ; for (const QByteArray &oneArgTemplateType : oneArgTemplates) { if (propertyType.startsWith(oneArgTemplateType + "<") && propertyType.endsWith(">")) { const int argumentSize = propertyType.size() - oneArgTemplateType.size() - 1 @@ -199,7 +206,7 @@ void Generator::generateCode() // filter out undeclared enumerators and sets { - QVector enumList; + QList enumList; for (int i = 0; i < cdef->enumList.count(); ++i) { EnumDef def = cdef->enumList.at(i); if (cdef->enumDeclarations.contains(def.name)) { @@ -455,7 +462,7 @@ void Generator::generateCode() // // Build extra array // - QVector extraList; + QList extraList; QMultiHash knownExtraMetaObject = knownGadgets; knownExtraMetaObject.unite(knownQObjectClasses); @@ -574,7 +581,8 @@ void Generator::generateCode() fprintf(out, "%s%s", needsComma ? ", " : "", p.type.data()); needsComma = true; } - for (const QVector &methodContainer: {cdef->signalList, cdef->slotList, cdef->methodList} ) { + for (const QList &methodContainer : + { cdef->signalList, cdef->slotList, cdef->methodList }) { for (int i = 0; i< methodContainer.count(); ++i) { const FunctionDef& fdef = methodContainer.at(i); fprintf(out, "%s%s", needsComma ? ", " : "", fdef.type.name.data()); @@ -621,7 +629,7 @@ void Generator::generateCode() cname, cname); } for (int i = 0; i < cdef->interfaceList.size(); ++i) { - const QVector &iface = cdef->interfaceList.at(i); + const QList &iface = cdef->interfaceList.at(i); for (int j = 0; j < iface.size(); ++j) { fprintf(out, " if (!strcmp(_clname, %s))\n return ", iface.at(j).interfaceId.constData()); for (int k = j; k >= 0; --k) @@ -695,7 +703,7 @@ void Generator::generateClassInfos() } } -void Generator::registerFunctionStrings(const QVector& list) +void Generator::registerFunctionStrings(const QList &list) { for (int i = 0; i < list.count(); ++i) { const FunctionDef &f = list.at(i); @@ -715,13 +723,14 @@ void Generator::registerFunctionStrings(const QVector& list) } } -void Generator::registerByteArrayVector(const QVector &list) +void Generator::registerByteArrayVector(const QList &list) { for (const QByteArray &ba : list) strreg(ba); } -void Generator::generateFunctions(const QVector& list, const char *functype, int type, int ¶msIndex, int &initialMetatypeOffset) +void Generator::generateFunctions(const QList &list, const char *functype, int type, + int ¶msIndex, int &initialMetatypeOffset) { if (list.isEmpty()) return; @@ -769,7 +778,7 @@ void Generator::generateFunctions(const QVector& list, const char * } } -void Generator::generateFunctionRevisions(const QVector& list, const char *functype) +void Generator::generateFunctionRevisions(const QList &list, const char *functype) { if (list.count()) fprintf(out, "\n // %ss: revision\n", functype); @@ -779,7 +788,7 @@ void Generator::generateFunctionRevisions(const QVector& list, cons } } -void Generator::generateFunctionParameters(const QVector& list, const char *functype) +void Generator::generateFunctionParameters(const QList &list, const char *functype) { if (list.isEmpty()) return; @@ -968,7 +977,7 @@ void Generator::generateMetacall() bool needElse = false; - QVector methodList; + QList methodList; methodList += cdef->signalList; methodList += cdef->slotList; methodList += cdef->methodList; @@ -1031,7 +1040,8 @@ QMultiMap Generator::automaticPropertyMetaTypesHelper() return automaticPropertyMetaTypes; } -QMap > Generator::methodsWithAutomaticTypesHelper(const QVector &methodList) +QMap> +Generator::methodsWithAutomaticTypesHelper(const QList &methodList) { QMap > methodsWithAutomaticTypes; for (int i = 0; i < methodList.size(); ++i) { @@ -1085,7 +1095,7 @@ void Generator::generateStaticMetacall() isUsed_a = true; } - QVector methodList; + QList methodList; methodList += cdef->signalList; methodList += cdef->slotList; methodList += cdef->methodList; diff --git a/src/tools/moc/generator.h b/src/tools/moc/generator.h index f3d3b40349..a9bf229c71 100644 --- a/src/tools/moc/generator.h +++ b/src/tools/moc/generator.h @@ -37,19 +37,24 @@ class Generator { FILE *out; ClassDef *cdef; - QVector meta_data; + QList meta_data; + public: - Generator(ClassDef *classDef, const QVector &metaTypes, const QHash &knownQObjectClasses, const QHash &knownGadgets, FILE *outfile = nullptr, bool requireCompleteTypes = false); + Generator(ClassDef *classDef, const QList &metaTypes, + const QHash &knownQObjectClasses, + const QHash &knownGadgets, FILE *outfile = nullptr, + bool requireCompleteTypes = false); void generateCode(); private: bool registerableMetaType(const QByteArray &propertyType); void registerClassInfoStrings(); void generateClassInfos(); - void registerFunctionStrings(const QVector &list); - void registerByteArrayVector(const QVector &list); - void generateFunctions(const QVector &list, const char *functype, int type, int ¶msIndex, int &initialMetatypeOffset); - void generateFunctionRevisions(const QVector &list, const char *functype); - void generateFunctionParameters(const QVector &list, const char *functype); + void registerFunctionStrings(const QList &list); + void registerByteArrayVector(const QList &list); + void generateFunctions(const QList &list, const char *functype, int type, + int ¶msIndex, int &initialMetatypeOffset); + void generateFunctionRevisions(const QList &list, const char *functype); + void generateFunctionParameters(const QList &list, const char *functype); void generateTypeInfo(const QByteArray &typeName, bool allowEmptyName = false); void registerEnumStrings(); void generateEnums(int index); @@ -61,13 +66,14 @@ private: void generateQPropertyApi(); void generatePluginMetaData(); QMultiMap automaticPropertyMetaTypesHelper(); - QMap > methodsWithAutomaticTypesHelper(const QVector &methodList); + QMap> + methodsWithAutomaticTypesHelper(const QList &methodList); void strreg(const QByteArray &); // registers a string int stridx(const QByteArray &); // returns a string's id - QVector strings; + QList strings; QByteArray purestSuperClass; - QVector metaTypes; + QList metaTypes; QHash knownQObjectClasses; QHash knownGadgets; bool requireCompleteTypes; diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index 20ff739121..5a1f0afab6 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -607,7 +607,7 @@ bool Moc::parseMaybeQProperty(ClassDef *def) void Moc::parse() { - QVector namespaceList; + QList namespaceList; bool templateClass = false; while (hasNext()) { Token t = next(); @@ -1008,7 +1008,7 @@ void Moc::parse() } } -static bool any_type_contains(const QVector &properties, const QByteArray &pattern) +static bool any_type_contains(const QList &properties, const QByteArray &pattern) { for (const auto &p : properties) { if (p.type.contains(pattern)) @@ -1017,7 +1017,7 @@ static bool any_type_contains(const QVector &properties, const QByt return false; } -static bool any_arg_contains(const QVector &functions, const QByteArray &pattern) +static bool any_arg_contains(const QList &functions, const QByteArray &pattern) { for (const auto &f : functions) { for (const auto &arg : f.arguments) { @@ -1042,7 +1042,7 @@ static QByteArrayList make_candidates() return result; } -static QByteArrayList requiredQtContainers(const QVector &classes) +static QByteArrayList requiredQtContainers(const QList &classes) { static const QByteArrayList candidates = make_candidates(); @@ -1608,7 +1608,7 @@ void Moc::parseInterfaces(ClassDef *def) { next(LPAREN); while (test(IDENTIFIER)) { - QVector iface; + QList iface; iface += ClassDef::Interface(lexem()); while (test(SCOPE)) { iface.last().className += lexem(); @@ -1966,7 +1966,7 @@ QJsonObject ClassDef::toJson() const if (classInfos.size()) cls[QLatin1String("classInfos")] = classInfos; - const auto appendFunctions = [&cls](const QString &type, const QVector &funcs) { + const auto appendFunctions = [&cls](const QString &type, const QList &funcs) { QJsonArray jsonFuncs; for (const FunctionDef &fdef: funcs) @@ -2017,7 +2017,7 @@ QJsonObject ClassDef::toJson() const cls[QLatin1String("enums")] = enums; QJsonArray ifaces; - for (const QVector &ifaceList: interfaceList) { + for (const QList &ifaceList : interfaceList) { QJsonArray jsonList; for (const Interface &iface: ifaceList) { QJsonObject ifaceJson; diff --git a/src/tools/moc/moc.h b/src/tools/moc/moc.h index 0e1f33a804..0f05685327 100644 --- a/src/tools/moc/moc.h +++ b/src/tools/moc/moc.h @@ -67,7 +67,7 @@ struct EnumDef { QByteArray name; QByteArray enumName; - QVector values; + QList values; bool isEnumClass; // c++11 enum class EnumDef() : isEnumClass(false) {} QJsonObject toJson(const ClassDef &cdef) const; @@ -89,7 +89,7 @@ Q_DECLARE_TYPEINFO(ArgumentDef, Q_MOVABLE_TYPE); struct FunctionDef { Type type; - QVector arguments; + QList arguments; QByteArray normalizedType; QByteArray tag; QByteArray name; @@ -168,26 +168,26 @@ Q_DECLARE_TYPEINFO(ClassInfoDef, Q_MOVABLE_TYPE); struct BaseDef { QByteArray classname; QByteArray qualified; - QVector classInfoList; + QList classInfoList; QMap enumDeclarations; - QVector enumList; + QList enumList; QMap flagAliases; int begin = 0; int end = 0; }; struct ClassDef : BaseDef { - QVector > superclassList; + QList> superclassList; struct Interface { - Interface() {} // for QVector, don't use + Interface() { } // for QList, don't use inline explicit Interface(const QByteArray &_className) : className(_className) {} QByteArray className; QByteArray interfaceId; }; - QVector >interfaceList; + QList> interfaceList; struct PluginData { QByteArray iid; @@ -196,11 +196,11 @@ struct ClassDef : BaseDef { QJsonDocument metaData; } pluginData; - QVector constructorList; - QVector signalList, slotList, methodList, publicList; - QVector nonClassSignalList; - QVector propertyList; - QVector privateQProperties; + QList constructorList; + QList signalList, slotList, methodList, publicList; + QList nonClassSignalList; + QList propertyList; + QList privateQProperties; QHash qPropertyMembersMaybeWithNotifier; int revisionedMethods = 0; @@ -232,15 +232,15 @@ public: bool mustIncludeQPluginH; bool requireCompleteTypes; QByteArray includePath; - QVector includeFiles; - QVector classList; + QList includeFiles; + QList classList; QMap interface2IdMap; - QVector metaTypes; + QList metaTypes; // map from class name to fully qualified name QHash knownQObjectClasses; QHash knownGadgets; QMap metaArgs; - QVector parsedPluginMetadataFiles; + QList parsedPluginMetadataFiles; void parse(); void generate(FILE *out, FILE *jsonOutput); diff --git a/src/tools/moc/symbols.h b/src/tools/moc/symbols.h index 4bcb640760..a28cad602f 100644 --- a/src/tools/moc/symbols.h +++ b/src/tools/moc/symbols.h @@ -120,7 +120,7 @@ struct Symbol }; Q_DECLARE_TYPEINFO(Symbol, Q_MOVABLE_TYPE); -typedef QVector Symbols; +typedef QList Symbols; struct SafeSymbols { Symbols symbols; -- cgit v1.2.3