diff options
Diffstat (limited to 'src/tools/moc/moc.h')
-rw-r--r-- | src/tools/moc/moc.h | 98 |
1 files changed, 48 insertions, 50 deletions
diff --git a/src/tools/moc/moc.h b/src/tools/moc/moc.h index 5ce057210f..c1759fb0a3 100644 --- a/src/tools/moc/moc.h +++ b/src/tools/moc/moc.h @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #ifndef MOC_H #define MOC_H @@ -32,13 +7,13 @@ #include "parser.h" #include <qstringlist.h> #include <qmap.h> -#include <qpair.h> #include <qjsondocument.h> #include <qjsonarray.h> #include <qjsonobject.h> -#include <qversionnumber.h> +#include <qtyperevision.h> #include <stdio.h> -#include <ctype.h> + +#include <private/qtools_p.h> QT_BEGIN_NAMESPACE @@ -60,19 +35,21 @@ struct Type Token firstToken; ReferenceType referenceType; }; -Q_DECLARE_TYPEINFO(Type, Q_MOVABLE_TYPE); +Q_DECLARE_TYPEINFO(Type, Q_RELOCATABLE_TYPE); struct ClassDef; struct EnumDef { QByteArray name; QByteArray enumName; + QByteArray type; QList<QByteArray> values; bool isEnumClass; // c++11 enum class EnumDef() : isEnumClass(false) {} QJsonObject toJson(const ClassDef &cdef) const; + QByteArray qualifiedType(const ClassDef *cdef) const; }; -Q_DECLARE_TYPEINFO(EnumDef, Q_MOVABLE_TYPE); +Q_DECLARE_TYPEINFO(EnumDef, Q_RELOCATABLE_TYPE); struct ArgumentDef { @@ -84,7 +61,7 @@ struct ArgumentDef QJsonObject toJson() const; }; -Q_DECLARE_TYPEINFO(ArgumentDef, Q_MOVABLE_TYPE); +Q_DECLARE_TYPEINFO(ArgumentDef, Q_RELOCATABLE_TYPE); struct FunctionDef { @@ -121,13 +98,15 @@ struct FunctionDef QJsonObject toJson() const; static void accessToJson(QJsonObject *obj, Access acs); }; -Q_DECLARE_TYPEINFO(FunctionDef, Q_MOVABLE_TYPE); +Q_DECLARE_TYPEINFO(FunctionDef, Q_RELOCATABLE_TYPE); struct PropertyDef { bool stdCppSet() const { + if (name.isEmpty()) + return false; QByteArray s("set"); - s += toupper(name[0]); + s += QtMiscUtils::toAsciiUpper(name[0]); s += name.mid(1); return (s == write); } @@ -140,12 +119,13 @@ struct PropertyDef bool constant = false; bool final = false; bool required = false; + int relativeIndex = -1; // property index in current metaobject - int location = -1; // token index, used for error reporting + qsizetype location = -1; // token index, used for error reporting QJsonObject toJson() const; }; -Q_DECLARE_TYPEINFO(PropertyDef, Q_MOVABLE_TYPE); +Q_DECLARE_TYPEINFO(PropertyDef, Q_RELOCATABLE_TYPE); struct PrivateQPropertyDef { @@ -155,14 +135,14 @@ struct PrivateQPropertyDef QByteArray accessor; QByteArray storage; }; -Q_DECLARE_TYPEINFO(PrivateQPropertyDef, Q_MOVABLE_TYPE); +Q_DECLARE_TYPEINFO(PrivateQPropertyDef, Q_RELOCATABLE_TYPE); struct ClassInfoDef { QByteArray name; QByteArray value; }; -Q_DECLARE_TYPEINFO(ClassInfoDef, Q_MOVABLE_TYPE); +Q_DECLARE_TYPEINFO(ClassInfoDef, Q_RELOCATABLE_TYPE); struct BaseDef { QByteArray classname; @@ -171,12 +151,19 @@ struct BaseDef { QMap<QByteArray, bool> enumDeclarations; QList<EnumDef> enumList; QMap<QByteArray, QByteArray> flagAliases; - int begin = 0; - int end = 0; + qsizetype begin = 0; + qsizetype end = 0; +}; + +struct SuperClass { + QByteArray classname; + QByteArray qualified; + FunctionDef::Access access; }; +Q_DECLARE_TYPEINFO(SuperClass, Q_RELOCATABLE_TYPE); struct ClassDef : BaseDef { - QList<QPair<QByteArray, FunctionDef::Access>> superclassList; + QList<SuperClass> superclassList; struct Interface { @@ -208,18 +195,20 @@ struct ClassDef : BaseDef { QJsonObject toJson() const; }; -Q_DECLARE_TYPEINFO(ClassDef, Q_MOVABLE_TYPE); -Q_DECLARE_TYPEINFO(ClassDef::Interface, Q_MOVABLE_TYPE); +Q_DECLARE_TYPEINFO(ClassDef, Q_RELOCATABLE_TYPE); +Q_DECLARE_TYPEINFO(ClassDef::Interface, Q_RELOCATABLE_TYPE); struct NamespaceDef : BaseDef { bool hasQNamespace = false; bool doGenerate = false; }; -Q_DECLARE_TYPEINFO(NamespaceDef, Q_MOVABLE_TYPE); +Q_DECLARE_TYPEINFO(NamespaceDef, Q_RELOCATABLE_TYPE); class Moc : public Parser { public: + enum PropertyMode { Named, Anonymous }; + Moc() : noInclude(false), mustIncludeQPluginH(false), requireCompleteTypes(false) {} @@ -252,6 +241,10 @@ public: return index > def->begin && index < def->end - 1; } + const QByteArray &toFullyQualified(const QByteArray &name) const noexcept; + + void prependNamespaces(BaseDef &def, const QList<NamespaceDef> &namespaceList) const; + Type parseType(); bool parseEnum(EnumDef *def); @@ -261,9 +254,11 @@ public: void parseSlots(ClassDef *def, FunctionDef::Access access); void parseSignals(ClassDef *def); - void parseProperty(ClassDef *def); + void parseProperty(ClassDef *def, PropertyMode mode); void parsePluginData(ClassDef *def); - void createPropertyDef(PropertyDef &def); + + void createPropertyDef(PropertyDef &def, int propertyIndex, PropertyMode mode); + void parsePropertyAttributes(PropertyDef &propDef); void parseEnumOrFlag(BaseDef *def, bool isFlag); void parseFlag(BaseDef *def); @@ -276,7 +271,7 @@ public: void parseMocInclude(); void parseSlotInPrivate(ClassDef *def, FunctionDef::Access access); QByteArray parsePropertyAccessor(); - void parsePrivateProperty(ClassDef *def); + void parsePrivateProperty(ClassDef *def, PropertyMode mode); void parseFunctionArguments(FunctionDef *def); @@ -294,14 +289,17 @@ public: void checkSuperClasses(ClassDef *def); void checkProperties(ClassDef* cdef); + bool testForFunctionModifiers(FunctionDef *def); + + void checkListSizes(const ClassDef &def); }; inline QByteArray noRef(const QByteArray &type) { if (type.endsWith('&')) { if (type.endsWith("&&")) - return type.left(type.length()-2); - return type.left(type.length()-1); + return type.left(type.size()-2); + return type.left(type.size()-1); } return type; } |