Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qtyperevision.h
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// Copyright (C) 2022 Intel Corporation.
3// Copyright (C) 2015 Keith Gardner <kreios4004@gmail.com>
4// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
5// Qt-Security score:critical reason:data-parser
6
7#ifndef QTYPEREVISION_H
8#define QTYPEREVISION_H
9
10#include <QtCore/qassert.h>
11#include <QtCore/qcompare.h>
12#include <QtCore/qcontainertools_impl.h>
13#include <QtCore/qmetatype.h>
14#include <QtCore/qtypeinfo.h>
15
16#include <limits>
17
19
20class QDataStream;
21class QDebug;
22
23class QTypeRevision;
24Q_CORE_EXPORT size_t qHash(const QTypeRevision &key, size_t seed = 0);
25
26#ifndef QT_NO_DATASTREAM
27Q_CORE_EXPORT QDataStream& operator<<(QDataStream &out, const QTypeRevision &revision);
28Q_CORE_EXPORT QDataStream& operator>>(QDataStream &in, QTypeRevision &revision);
29#endif
30
32{
33public:
34 template<typename Integer>
35 using if_valid_segment_type = typename std::enable_if<
36 std::is_integral<Integer>::value, bool>::type;
37
38 template<typename Integer>
41 && (sizeof(Integer) > sizeof(quint16)
42 || (sizeof(Integer) == sizeof(quint16)
43 && !std::is_signed<Integer>::value)), bool>::type;
44
45 template<typename Integer, if_valid_segment_type<Integer> = true>
46 static constexpr bool isValidSegment(Integer segment)
47 {
48 // using extra parentheses around max to avoid expanding it if it is a macro
49 // and adding zero to cause it to be promoted
50 constexpr auto Max = (std::numeric_limits<Integer>::max)() + 0;
51 constexpr bool HasSufficientRange = Max >= SegmentUnknown;
52 return segment >= Integer(0)
53 && (!HasSufficientRange || segment < Integer(SegmentUnknown));
54 }
55
56 template<typename Major, typename Minor,
57 if_valid_segment_type<Major> = true,
58 if_valid_segment_type<Minor> = true>
59 static constexpr QTypeRevision fromVersion(Major majorVersion, Minor minorVersion)
60 {
61 return Q_ASSERT(isValidSegment(majorVersion)),
62 Q_ASSERT(isValidSegment(minorVersion)),
63 QTypeRevision(quint8(majorVersion), quint8(minorVersion));
64 }
65
66 template<typename Major, if_valid_segment_type<Major> = true>
67 static constexpr QTypeRevision fromMajorVersion(Major majorVersion)
68 {
69 return Q_ASSERT(isValidSegment(majorVersion)),
70 QTypeRevision(quint8(majorVersion), SegmentUnknown);
71 }
72
73 template<typename Minor, if_valid_segment_type<Minor> = true>
74 static constexpr QTypeRevision fromMinorVersion(Minor minorVersion)
75 {
76 return Q_ASSERT(isValidSegment(minorVersion)),
77 QTypeRevision(SegmentUnknown, quint8(minorVersion));
78 }
79
80 template<typename Integer, if_valid_value_type<Integer> = true>
81 static constexpr QTypeRevision fromEncodedVersion(Integer value)
82 {
83 return Q_ASSERT((value & ~Integer(0xffff)) == Integer(0)),
84 QTypeRevision((value & Integer(0xff00)) >> 8, value & Integer(0xff));
85 }
86
87 static constexpr QTypeRevision zero() { return QTypeRevision(0, 0); }
88
89 constexpr QTypeRevision() = default;
90
91 constexpr bool hasMajorVersion() const { return m_majorVersion != SegmentUnknown; }
92 constexpr quint8 majorVersion() const { return m_majorVersion; }
93
94 constexpr bool hasMinorVersion() const { return m_minorVersion != SegmentUnknown; }
95 constexpr quint8 minorVersion() const { return m_minorVersion; }
96
97 constexpr bool isValid() const { return hasMajorVersion() || hasMinorVersion(); }
98
99 template<typename Integer, if_valid_value_type<Integer> = true>
100 constexpr Integer toEncodedVersion() const
101 {
102 return Integer(m_majorVersion << 8) | Integer(m_minorVersion);
103 }
104
105private:
106 friend constexpr bool
107 comparesEqual(const QTypeRevision &lhs, const QTypeRevision &rhs) noexcept
108 { return lhs.toEncodedVersion<quint16>() == rhs.toEncodedVersion<quint16>(); }
109 friend constexpr Qt::strong_ordering
110 compareThreeWay(const QTypeRevision &lhs, const QTypeRevision &rhs) noexcept
111 {
112 // For both major and minor the following rule applies:
113 // non-0 ver > unspecified ver > 0 ver
114 auto cmpUnspecified = [](quint8 leftVer, quint8 rightVer) {
115 Q_ASSERT(leftVer != rightVer
116 && (leftVer == QTypeRevision::SegmentUnknown
117 || rightVer == QTypeRevision::SegmentUnknown));
118 if (leftVer != QTypeRevision::SegmentUnknown)
119 return leftVer > 0 ? Qt::strong_ordering::greater : Qt::strong_ordering::less;
120 return rightVer > 0 ? Qt::strong_ordering::less : Qt::strong_ordering::greater;
121 };
122
123 if (lhs.hasMajorVersion() != rhs.hasMajorVersion()) {
124 return cmpUnspecified(lhs.majorVersion(), rhs.majorVersion());
125 } else {
126 const auto majorRes = Qt::compareThreeWay(lhs.majorVersion(), rhs.majorVersion());
127 if (is_eq(majorRes)) {
128 if (lhs.hasMinorVersion() != rhs.hasMinorVersion())
129 return cmpUnspecified(lhs.minorVersion(), rhs.minorVersion());
130 return Qt::compareThreeWay(lhs.minorVersion(), rhs.minorVersion());
131 }
132 return majorRes;
133 }
134 }
136
137 enum { SegmentUnknown = 0xff };
138
139#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
140 constexpr QTypeRevision(quint8 major, quint8 minor)
141 : m_minorVersion(minor), m_majorVersion(major) {}
142
143 quint8 m_minorVersion = SegmentUnknown;
144 quint8 m_majorVersion = SegmentUnknown;
145#else
148
151#endif
152};
153
154static_assert(sizeof(QTypeRevision) == 2);
156
157#ifndef QT_NO_DEBUG_STREAM
158Q_CORE_EXPORT QDebug operator<<(QDebug, const QTypeRevision &revision);
159#endif
160
161QT_END_NAMESPACE
162
163QT_DECL_METATYPE_EXTERN(QTypeRevision, Q_CORE_EXPORT)
164
165#endif // QTYPEREVISION_H
166
167#if !defined(QT_LEAN_HEADERS) || QT_LEAN_HEADERS < 2
168// make QVersionNumber available from <QTypeRevision>
169#include <QtCore/qversionnumber.h>
170#endif
Definition moc.h:226
bool testFunctionAttribute(Token tok, FunctionDef *def)
Definition moc.cpp:363
void parseEnumOrFlag(BaseDef *def, QtMocConstants::EnumFlags flags)
Definition moc.cpp:1755
void checkSuperClasses(ClassDef *def)
Definition moc.cpp:2023
Moc()
Definition moc.h:230
void parse()
Definition moc.cpp:706
bool parseEnum(EnumDef *def, ClassDef *containingClass)
Definition moc.cpp:254
void parseProperty(ClassDef *def, PropertyMode mode)
Definition moc.cpp:1650
QByteArray lexemUntil(Token)
Definition moc.cpp:1923
EncounteredQmlMacro parseClassInfo(BaseDef *def)
Definition moc.cpp:1794
bool until(Token)
Definition moc.cpp:1943
QList< QByteArray > includeFiles
Definition moc.h:240
bool requireCompleteTypes
Definition moc.h:238
QHash< QByteArray, QByteArray > knownQObjectClasses
Definition moc.h:245
void createPropertyDef(PropertyDef &def, int propertyIndex, PropertyMode mode)
Definition moc.cpp:1450
void parseClassInfo(ClassDef *def)
Definition moc.cpp:1821
QByteArrayView strippedFileName() const
Definition moc.cpp:1142
bool parseClassHead(ClassDef *def)
Definition moc.cpp:43
void parsePrivateProperty(ClassDef *def, PropertyMode mode)
Definition moc.cpp:1742
QByteArray includePath
Definition moc.h:239
QByteArray filename
Definition moc.h:234
void parseFlag(BaseDef *def)
Definition moc.cpp:1770
void parseSignals(ClassDef *def)
Definition moc.cpp:1406
void parseDeclareMetatype()
Definition moc.cpp:1883
void parsePropertyAttributes(PropertyDef &propDef)
Definition moc.cpp:1489
void parseInterfaces(ClassDef *def)
Definition moc.cpp:1827
bool testFunctionRevision(FunctionDef *def)
Definition moc.cpp:426
bool testFunctionAttribute(FunctionDef *def)
Definition moc.cpp:354
void prependNamespaces(BaseDef &def, const QList< NamespaceDef > &namespaceList) const
Definition moc.cpp:660
QHash< QByteArray, QByteArray > knownGadgets
Definition moc.h:246
QList< QByteArray > metaTypes
Definition moc.h:243
bool parseFunction(FunctionDef *def, bool inMacro=false)
Definition moc.cpp:438
QByteArray parsePropertyAccessor()
Definition moc.cpp:1724
QMap< QString, QJsonArray > metaArgs
Definition moc.h:247
bool testForFunctionModifiers(FunctionDef *def)
Definition moc.cpp:542
const QByteArray & toFullyQualified(const QByteArray &name) const noexcept
Definition moc.cpp:34
void parseSlots(ClassDef *def, FunctionDef::Access access)
Definition moc.cpp:1364
void parseDeclareInterface()
Definition moc.cpp:1860
void checkListSizes(const ClassDef &def)
Definition moc.cpp:670
QTypeRevision parseRevision()
Definition moc.cpp:395
void parseMocInclude()
Definition moc.cpp:1892
QList< QString > parsedPluginMetadataFiles
Definition moc.h:248
bool skipCxxAttributes()
Definition moc.cpp:386
PropertyMode
Definition moc.h:228
@ Anonymous
Definition moc.h:228
@ Named
Definition moc.h:228
bool mustIncludeQPluginH
Definition moc.h:237
bool parseMaybeFunction(const ClassDef *cdef, FunctionDef *def)
Definition moc.cpp:550
void checkProperties(ClassDef *cdef)
Definition moc.cpp:2081
Type parseType()
Definition moc.cpp:134
void parseFunctionArguments(FunctionDef *def)
Definition moc.cpp:314
void parseSlotInPrivate(ClassDef *def, FunctionDef::Access access)
Definition moc.cpp:1902
bool inClass(const ClassDef *def) const
Definition moc.h:255
void parsePluginData(ClassDef *def)
Definition moc.cpp:1660
void generate(FILE *out, FILE *jsonOutput)
Definition moc.cpp:1237
QMap< QByteArray, QByteArray > interface2IdMap
Definition moc.h:242
bool noInclude
Definition moc.h:236
EncounteredQmlMacro
Definition moc.h:284
bool inNamespace(const NamespaceDef *def) const
Definition moc.h:259
QList< ClassDef > classList
Definition moc.h:241
int evaluateCondition()
void setDebugIncludes(bool value)
void parseDefineArguments(Macro *m)
void skipUntilEndif()
QHash< QByteArray, QByteArray > nonlocalIncludePathResolutionCache
Symbols preprocessed(const QByteArray &filename, QFile *device)
void substituteUntilNewline(Symbols &substituted)
QList< QByteArray > frameworks
static bool preprocessOnly
static Symbols macroExpandIdentifier(Preprocessor *that, SymbolStack &symbols, int lineNum, QByteArray *macroName)
QByteArray resolveInclude(const QByteArray &filename, const QByteArray &relativeTo)
static Symbols tokenize(const QByteArray &input, int lineNum=1, TokenizeMode mode=TokenizeCpp)
static void macroExpand(Symbols *into, Preprocessor *that, const Symbols &toExpand, qsizetype &index, int lineNum, bool one, const QSet< QByteArray > &excludeSymbols=QSet< QByteArray >())
@ PreparePreprocessorStatement
@ TokenizePreprocessorStatement
The QCommandLineOption class defines a possible command-line option. \inmodule QtCore.
The QCommandLineParser class provides a means for handling the command line options.
\inmodule QtCore\reentrant
Definition qdatastream.h:50
Definition qlist.h:81
Definition qmap.h:190
\inmodule QtCore
constexpr Integer toEncodedVersion() const
Transforms the revision into an integer value, encoding the minor version into the least significant ...
constexpr QTypeRevision()=default
Produces an invalid revision.
constexpr quint8 majorVersion() const
Returns the major version encoded in the revision.
static constexpr QTypeRevision fromMajorVersion(Major majorVersion)
Produces a QTypeRevision from the given majorVersion with an invalid minor version.
static constexpr bool isValidSegment(Integer segment)
Returns true if the given number can be used as either major or minor version in a QTypeRevision.
static constexpr QTypeRevision zero()
Produces a QTypeRevision with major and minor version {0}.
static constexpr QTypeRevision fromEncodedVersion(Integer value)
Produces a QTypeRevision from the given value.
constexpr bool hasMajorVersion() const
Returns true if the major version is known, otherwise false.
static constexpr QTypeRevision fromMinorVersion(Minor minorVersion)
Produces a QTypeRevision from the given minorVersion with an invalid major version.
constexpr bool isValid() const
Returns true if the major version or the minor version is known, otherwise false.
friend constexpr Qt::strong_ordering compareThreeWay(const QTypeRevision &lhs, const QTypeRevision &rhs) noexcept
constexpr quint8 minorVersion() const
Returns the minor version encoded in the revision.
static constexpr QTypeRevision fromVersion(Major majorVersion, Minor minorVersion)
Produces a QTypeRevision from the given majorVersion and minorVersion, both of which need to be a val...
friend constexpr bool comparesEqual(const QTypeRevision &lhs, const QTypeRevision &rhs) noexcept
constexpr bool hasMinorVersion() const
Returns true if the minor version is known, otherwise false.
QByteArray unquotedLexem()
Definition symbols.h:105
const Symbol & symbol() const
Definition symbols.h:102
Token token()
Definition symbols.h:103
bool dontReplaceSymbol(const QByteArray &name) const
Definition symbols.h:125
bool hasNext()
Definition symbols.h:89
QByteArray lexem() const
Definition symbols.h:104
Token next()
Definition symbols.h:94
const SafeSymbols & constTop() const
Definition symbols.h:88
bool test(Token)
Definition symbols.h:111
Q_DECLARE_TYPEINFO(EnumDef, Q_RELOCATABLE_TYPE)
QByteArray noRef(const QByteArray &type)
Definition moc.h:316
Q_DECLARE_TYPEINFO(PropertyDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(NamespaceDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ClassDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ClassInfoDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ClassDef::Interface, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(SuperClass, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ArgumentDef, Q_RELOCATABLE_TYPE)
TypeTag
Definition moc.h:23
@ HasEnum
Definition moc.h:27
@ HasClass
Definition moc.h:26
@ None
Definition moc.h:24
@ HasStruct
Definition moc.h:25
Q_DECLARE_TYPEINFO(PrivateQPropertyDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(FunctionDef, Q_RELOCATABLE_TYPE)
Combined button and popup list for selecting options.
constexpr PropertyFlags DefaultPropertyFlags
QHash< MacroName, Macro > Macros
SubArray MacroName
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2582
Q_DECLARE_TYPEINFO(QObjectPrivate::ConnectionList, Q_RELOCATABLE_TYPE)
#define qPrintable(string)
Definition qstring.h:1683
#define QStringLiteral(str)
Definition qstring.h:1825
static QByteArray combinePath(const QString &infile, const QString &outfile)
Definition main.cpp:40
static bool hasNext(const Symbols &symbols, int i)
Definition main.cpp:78
static const Symbol & next(const Symbols &symbols, int &i)
Definition main.cpp:81
int runMoc(int argc, char **argv)
Definition main.cpp:170
static auto openFileForWriting(const QString &name)
Definition main.cpp:62
void error(const char *msg="Invalid argument")
Definition main.cpp:56
static QStringList argumentsFromCommandLineAndFile(const QStringList &arguments, bool &hasOptionFiles)
Definition main.cpp:138
QByteArray composePreprocessorOutput(const Symbols &symbols)
Definition main.cpp:85
Q_DECLARE_TYPEINFO(QTypeRevision, Q_RELOCATABLE_TYPE)
int main(int argc, char *argv[])
[ctor_close]
QByteArray rightType
Definition moc.h:69
QByteArray normalizedType
Definition moc.h:69
QJsonObject toJson() const
Definition moc.cpp:2288
QByteArray name
Definition moc.h:69
ArgumentDef()
Definition moc.h:67
bool isDefault
Definition moc.h:70
Type type
Definition moc.h:68
Definition moc.h:162
qsizetype end
Definition moc.h:170
qsizetype begin
Definition moc.h:169
QMap< QByteArray, QByteArray > flagAliases
Definition moc.h:168
QByteArray qualified
Definition moc.h:164
qsizetype lineNumber
Definition moc.h:171
QByteArray classname
Definition moc.h:163
QList< ClassInfoDef > classInfoList
Definition moc.h:165
QList< EnumDef > enumList
Definition moc.h:167
Interface(const QByteArray &_className)
Definition moc.h:187
QByteArray className
Definition moc.h:189
QByteArray interfaceId
Definition moc.h:190
QMap< QString, QJsonArray > metaArgs
Definition moc.h:197
QJsonDocument metaData
Definition moc.h:198
QByteArray uri
Definition moc.h:196
QByteArray iid
Definition moc.h:195
bool hasQObject
Definition moc.h:208
QList< QList< Interface > > interfaceList
Definition moc.h:192
QList< FunctionDef > publicList
Definition moc.h:202
QList< FunctionDef > methodList
Definition moc.h:202
QList< PropertyDef > propertyList
Definition moc.h:204
QList< FunctionDef > constructorList
Definition moc.h:201
bool hasQGadget
Definition moc.h:209
QList< SuperClass > superclassList
Definition moc.h:182
bool isFinal
Definition moc.h:212
bool requireCompleteMethodTypes
Definition moc.h:211
bool hasQNamespace
Definition moc.h:210
QList< FunctionDef > slotList
Definition moc.h:202
QList< FunctionDef > signalList
Definition moc.h:202
int revisionedMethods
Definition moc.h:206
QJsonObject toJson() const
Definition moc.cpp:2156
QList< QByteArray > nonClassSignalList
Definition moc.h:203
QByteArray name
Definition moc.h:157
QByteArray value
Definition moc.h:158
Definition moc.h:53
QByteArray enumName
Definition moc.h:55
QFlags< QtMocConstants::EnumFlags > flags
Definition moc.h:58
QByteArray qualifiedType(const ClassDef *cdef) const
Definition moc.cpp:2367
QJsonObject toJson(const ClassDef &cdef) const
Definition moc.cpp:2345
QList< QByteArray > values
Definition moc.h:57
QByteArray name
Definition moc.h:54
QByteArray type
Definition moc.h:56
int lineNumber
Definition moc.h:61
bool isVirtual
Definition moc.h:91
bool isScriptable
Definition moc.h:100
bool wasCloned
Definition moc.h:94
QByteArray normalizedType
Definition moc.h:80
QJsonObject toJson(int index) const
Definition moc.cpp:2249
bool isCompat
Definition moc.h:98
bool inlineCode
Definition moc.h:93
Type type
Definition moc.h:78
bool isRawSlot
Definition moc.h:107
static void accessToJson(QJsonObject *obj, Access acs)
Definition moc.cpp:2279
Access access
Definition moc.h:86
bool isSignal
Definition moc.h:102
bool isSlot
Definition moc.h:101
bool isInvokable
Definition moc.h:99
QByteArray name
Definition moc.h:82
QByteArray inPrivateClass
Definition moc.h:83
bool isConst
Definition moc.h:90
QList< ArgumentDef > arguments
Definition moc.h:79
int lineNumber
Definition moc.h:88
int revision
Definition moc.h:87
bool returnTypeIsVolatile
Definition moc.h:96
bool isAbstract
Definition moc.h:106
bool isPrivateSignal
Definition moc.h:103
bool isDestructor
Definition moc.h:105
@ Public
Definition moc.h:85
@ Protected
Definition moc.h:85
@ Private
Definition moc.h:85
bool isConstructor
Definition moc.h:104
bool isStatic
Definition moc.h:92
QByteArray tag
Definition moc.h:81
Simple structure used by the Doc and DocParser classes.
Symbols symbols
bool isVariadic
bool isFunction
Symbols arguments
bool doGenerate
Definition moc.h:221
bool hasQNamespace
Definition moc.h:220
QByteArray name
Definition moc.h:148
QByteArray storage
Definition moc.h:151
QByteArray accessor
Definition moc.h:150
QByteArray setter
Definition moc.h:149
QByteArray scriptable
Definition moc.h:125
QByteArray member
Definition moc.h:125
QByteArray notify
Definition moc.h:125
QByteArray write
Definition moc.h:125
int lineNumber
Definition moc.h:137
QByteArray inPrivateClass
Definition moc.h:125
int notifyId
Definition moc.h:126
bool final
Definition moc.h:132
QJsonObject toJson() const
Definition moc.cpp:2297
bool constant
Definition moc.h:131
Specification gspec
Definition moc.h:128
Specification
Definition moc.h:127
@ ReferenceSpec
Definition moc.h:127
@ ValueSpec
Definition moc.h:127
@ PointerSpec
Definition moc.h:127
bool override
Definition moc.h:134
bool stdCppSet() const
Definition moc.h:116
bool virtual_
Definition moc.h:133
QByteArray user
Definition moc.h:125
TypeTags typeTag
Definition moc.h:130
QByteArray read
Definition moc.h:125
qsizetype location
Definition moc.h:139
int revision
Definition moc.h:129
QByteArray bind
Definition moc.h:125
int relativeIndex
Definition moc.h:136
QByteArray designable
Definition moc.h:125
bool required
Definition moc.h:135
QByteArray stored
Definition moc.h:125
QByteArray name
Definition moc.h:125
QByteArray reset
Definition moc.h:125
QByteArray type
Definition moc.h:125
qsizetype index
Definition symbols.h:81
Symbols symbols
Definition symbols.h:78
QByteArray expandedMacro
Definition symbols.h:79
QByteArray array
Definition symbols.h:26
SubArray(const char *s)
Definition symbols.h:21
qsizetype len
Definition symbols.h:28
bool operator==(const SubArray &other) const
Definition symbols.h:29
qsizetype from
Definition symbols.h:27
SubArray()=default
SubArray(const QByteArray &a)
Definition symbols.h:20
SubArray(const QByteArray &a, qsizetype from, qsizetype len)
Definition symbols.h:22
QByteArray qualified
Definition moc.h:176
FunctionDef::Access access
Definition moc.h:177
QByteArray classname
Definition moc.h:175
qsizetype from
Definition symbols.h:70
QByteArrayView unquotedLexemView() const
Definition symbols.h:62
Symbol(int lineNum, Token token)
Definition symbols.h:48
operator SubArray() const
Definition symbols.h:64
QByteArrayView lexemView() const
Definition symbols.h:61
Token token
Definition symbols.h:58
void mergeStringLiteral(const Symbol &next)
bool operator==(const Symbol &o) const
Definition symbols.h:65
int lineNum
Definition symbols.h:57
Symbol()=default
Symbol(int lineNum, Token token, const QByteArray &lexem, qsizetype from, qsizetype len)
Definition symbols.h:53
QByteArray lexem() const
Definition symbols.h:59
QByteArray lex
Definition symbols.h:69
QByteArray unquotedLexem() const
Definition symbols.h:60
qsizetype len
Definition symbols.h:71
Symbol(int lineNum, Token token, const QByteArray &lexem)
Definition symbols.h:49
size_t qHash(const SubArray &key, size_t seed=0)
Definition symbols.h:39
Q_DECLARE_TYPEINFO(Symbol, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(SafeSymbols, Q_RELOCATABLE_TYPE)
QList< Symbol > Symbols
Definition symbols.h:75
#define FOR_ALL_TOKENS(F)
Definition token.h:11
Token PP_Token
Definition token.h:252