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
6#ifndef QTYPEREVISION_H
7#define QTYPEREVISION_H
8
9#include <QtCore/qassert.h>
10#include <QtCore/qcompare.h>
11#include <QtCore/qcontainertools_impl.h>
12#include <QtCore/qmetatype.h>
13#include <QtCore/qtypeinfo.h>
14
15#include <limits>
16
18
19class QDataStream;
20class QDebug;
21
22class QTypeRevision;
23Q_CORE_EXPORT size_t qHash(const QTypeRevision &key, size_t seed = 0);
24
25#ifndef QT_NO_DATASTREAM
26Q_CORE_EXPORT QDataStream& operator<<(QDataStream &out, const QTypeRevision &revision);
27Q_CORE_EXPORT QDataStream& operator>>(QDataStream &in, QTypeRevision &revision);
28#endif
29
31{
32public:
33 template<typename Integer>
34 using if_valid_segment_type = typename std::enable_if<
35 std::is_integral<Integer>::value, bool>::type;
36
37 template<typename Integer>
40 && (sizeof(Integer) > sizeof(quint16)
41 || (sizeof(Integer) == sizeof(quint16)
42 && !std::is_signed<Integer>::value)), bool>::type;
43
44 template<typename Integer, if_valid_segment_type<Integer> = true>
45 static constexpr bool isValidSegment(Integer segment)
46 {
47 // using extra parentheses around max to avoid expanding it if it is a macro
48 // and adding zero to cause it to be promoted
49 constexpr auto Max = (std::numeric_limits<Integer>::max)() + 0;
50 constexpr bool HasSufficientRange = Max >= SegmentUnknown;
51 return segment >= Integer(0)
52 && (!HasSufficientRange || segment < Integer(SegmentUnknown));
53 }
54
55 template<typename Major, typename Minor,
56 if_valid_segment_type<Major> = true,
57 if_valid_segment_type<Minor> = true>
58 static constexpr QTypeRevision fromVersion(Major majorVersion, Minor minorVersion)
59 {
60 return Q_ASSERT(isValidSegment(majorVersion)),
61 Q_ASSERT(isValidSegment(minorVersion)),
62 QTypeRevision(quint8(majorVersion), quint8(minorVersion));
63 }
64
65 template<typename Major, if_valid_segment_type<Major> = true>
66 static constexpr QTypeRevision fromMajorVersion(Major majorVersion)
67 {
68 return Q_ASSERT(isValidSegment(majorVersion)),
69 QTypeRevision(quint8(majorVersion), SegmentUnknown);
70 }
71
72 template<typename Minor, if_valid_segment_type<Minor> = true>
73 static constexpr QTypeRevision fromMinorVersion(Minor minorVersion)
74 {
75 return Q_ASSERT(isValidSegment(minorVersion)),
76 QTypeRevision(SegmentUnknown, quint8(minorVersion));
77 }
78
79 template<typename Integer, if_valid_value_type<Integer> = true>
80 static constexpr QTypeRevision fromEncodedVersion(Integer value)
81 {
82 return Q_ASSERT((value & ~Integer(0xffff)) == Integer(0)),
83 QTypeRevision((value & Integer(0xff00)) >> 8, value & Integer(0xff));
84 }
85
86 static constexpr QTypeRevision zero() { return QTypeRevision(0, 0); }
87
88 constexpr QTypeRevision() = default;
89
90 constexpr bool hasMajorVersion() const { return m_majorVersion != SegmentUnknown; }
91 constexpr quint8 majorVersion() const { return m_majorVersion; }
92
93 constexpr bool hasMinorVersion() const { return m_minorVersion != SegmentUnknown; }
94 constexpr quint8 minorVersion() const { return m_minorVersion; }
95
96 constexpr bool isValid() const { return hasMajorVersion() || hasMinorVersion(); }
97
98 template<typename Integer, if_valid_value_type<Integer> = true>
99 constexpr Integer toEncodedVersion() const
100 {
101 return Integer(m_majorVersion << 8) | Integer(m_minorVersion);
102 }
103
104private:
105 friend constexpr bool
106 comparesEqual(const QTypeRevision &lhs, const QTypeRevision &rhs) noexcept
107 { return lhs.toEncodedVersion<quint16>() == rhs.toEncodedVersion<quint16>(); }
108 friend constexpr Qt::strong_ordering
109 compareThreeWay(const QTypeRevision &lhs, const QTypeRevision &rhs) noexcept
110 {
111 // For both major and minor the following rule applies:
112 // non-0 ver > unspecified ver > 0 ver
113 auto cmpUnspecified = [](quint8 leftVer, quint8 rightVer) {
114 Q_ASSERT(leftVer != rightVer
115 && (leftVer == QTypeRevision::SegmentUnknown
116 || rightVer == QTypeRevision::SegmentUnknown));
117 if (leftVer != QTypeRevision::SegmentUnknown)
118 return leftVer > 0 ? Qt::strong_ordering::greater : Qt::strong_ordering::less;
119 return rightVer > 0 ? Qt::strong_ordering::less : Qt::strong_ordering::greater;
120 };
121
122 if (lhs.hasMajorVersion() != rhs.hasMajorVersion()) {
123 return cmpUnspecified(lhs.majorVersion(), rhs.majorVersion());
124 } else {
125 const auto majorRes = Qt::compareThreeWay(lhs.majorVersion(), rhs.majorVersion());
126 if (is_eq(majorRes)) {
127 if (lhs.hasMinorVersion() != rhs.hasMinorVersion())
128 return cmpUnspecified(lhs.minorVersion(), rhs.minorVersion());
129 return Qt::compareThreeWay(lhs.minorVersion(), rhs.minorVersion());
130 }
131 return majorRes;
132 }
133 }
135
136 enum { SegmentUnknown = 0xff };
137
138#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
139 constexpr QTypeRevision(quint8 major, quint8 minor)
140 : m_minorVersion(minor), m_majorVersion(major) {}
141
142 quint8 m_minorVersion = SegmentUnknown;
143 quint8 m_majorVersion = SegmentUnknown;
144#else
147
150#endif
151};
152
153static_assert(sizeof(QTypeRevision) == 2);
155
156#ifndef QT_NO_DEBUG_STREAM
157Q_CORE_EXPORT QDebug operator<<(QDebug, const QTypeRevision &revision);
158#endif
159
160QT_END_NAMESPACE
161
162QT_DECL_METATYPE_EXTERN(QTypeRevision, Q_CORE_EXPORT)
163
164#endif // QTYPEREVISION_H
165
166#if !defined(QT_LEAN_HEADERS) || QT_LEAN_HEADERS < 2
167// make QVersionNumber available from <QTypeRevision>
168#include <QtCore/qversionnumber.h>
169#endif
Definition moc.h:223
bool testFunctionAttribute(Token tok, FunctionDef *def)
Definition moc.cpp:355
void parseEnumOrFlag(BaseDef *def, QtMocConstants::EnumFlags flags)
Definition moc.cpp:1651
void checkSuperClasses(ClassDef *def)
Definition moc.cpp:1919
Moc()
Definition moc.h:227
void parse()
Definition moc.cpp:677
bool parseEnum(EnumDef *def, ClassDef *containingClass)
Definition moc.cpp:246
void parseProperty(ClassDef *def, PropertyMode mode)
Definition moc.cpp:1546
QByteArray lexemUntil(Token)
Definition moc.cpp:1819
EncounteredQmlMacro parseClassInfo(BaseDef *def)
Definition moc.cpp:1690
bool until(Token)
Definition moc.cpp:1839
QList< QByteArray > includeFiles
Definition moc.h:237
bool requireCompleteTypes
Definition moc.h:235
QHash< QByteArray, QByteArray > knownQObjectClasses
Definition moc.h:242
void createPropertyDef(PropertyDef &def, int propertyIndex, PropertyMode mode)
Definition moc.cpp:1370
void parseClassInfo(ClassDef *def)
Definition moc.cpp:1717
QByteArrayView strippedFileName() const
Definition moc.cpp:1113
bool parseClassHead(ClassDef *def)
Definition moc.cpp:39
void parsePrivateProperty(ClassDef *def, PropertyMode mode)
Definition moc.cpp:1638
QByteArray includePath
Definition moc.h:236
QByteArray filename
Definition moc.h:231
void parseFlag(BaseDef *def)
Definition moc.cpp:1666
void parseSignals(ClassDef *def)
Definition moc.cpp:1326
void parseDeclareMetatype()
Definition moc.cpp:1779
void parsePropertyAttributes(PropertyDef &propDef)
Definition moc.cpp:1409
void parseInterfaces(ClassDef *def)
Definition moc.cpp:1723
bool testFunctionRevision(FunctionDef *def)
Definition moc.cpp:418
bool testFunctionAttribute(FunctionDef *def)
Definition moc.cpp:346
void prependNamespaces(BaseDef &def, const QList< NamespaceDef > &namespaceList) const
Definition moc.cpp:631
QHash< QByteArray, QByteArray > knownGadgets
Definition moc.h:243
QList< QByteArray > metaTypes
Definition moc.h:240
bool parseFunction(FunctionDef *def, bool inMacro=false)
Definition moc.cpp:430
QByteArray parsePropertyAccessor()
Definition moc.cpp:1620
QMap< QString, QJsonArray > metaArgs
Definition moc.h:244
bool testForFunctionModifiers(FunctionDef *def)
Definition moc.cpp:534
const QByteArray & toFullyQualified(const QByteArray &name) const noexcept
Definition moc.cpp:30
void parseSlots(ClassDef *def, FunctionDef::Access access)
Definition moc.cpp:1284
void parseDeclareInterface()
Definition moc.cpp:1756
void checkListSizes(const ClassDef &def)
Definition moc.cpp:641
QTypeRevision parseRevision()
Definition moc.cpp:387
void parseMocInclude()
Definition moc.cpp:1788
QList< QString > parsedPluginMetadataFiles
Definition moc.h:245
bool skipCxxAttributes()
Definition moc.cpp:378
PropertyMode
Definition moc.h:225
@ Anonymous
Definition moc.h:225
@ Named
Definition moc.h:225
bool mustIncludeQPluginH
Definition moc.h:234
bool parseMaybeFunction(const ClassDef *cdef, FunctionDef *def)
Definition moc.cpp:542
void checkProperties(ClassDef *cdef)
Definition moc.cpp:1977
Type parseType()
Definition moc.cpp:126
void parseFunctionArguments(FunctionDef *def)
Definition moc.cpp:306
void parseSlotInPrivate(ClassDef *def, FunctionDef::Access access)
Definition moc.cpp:1798
bool inClass(const ClassDef *def) const
Definition moc.h:252
void parsePluginData(ClassDef *def)
Definition moc.cpp:1556
void generate(FILE *out, FILE *jsonOutput)
Definition moc.cpp:1190
QMap< QByteArray, QByteArray > interface2IdMap
Definition moc.h:239
bool noInclude
Definition moc.h:233
EncounteredQmlMacro
Definition moc.h:281
bool inNamespace(const NamespaceDef *def) const
Definition moc.h:256
QList< ClassDef > classList
Definition moc.h:238
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:80
Definition qmap.h:189
\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:313
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)
constexpr PropertyFlags DefaultPropertyFlags
QHash< MacroName, Macro > Macros
SubArray MacroName
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2568
Q_DECLARE_TYPEINFO(QObjectPrivate::ConnectionList, Q_RELOCATABLE_TYPE)
#define qPrintable(string)
Definition qstring.h:1685
#define QStringLiteral(str)
Definition qstring.h:1826
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:2182
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:160
qsizetype end
Definition moc.h:168
qsizetype begin
Definition moc.h:167
QMap< QByteArray, QByteArray > flagAliases
Definition moc.h:166
QByteArray qualified
Definition moc.h:162
qsizetype lineNumber
Definition moc.h:169
QByteArray classname
Definition moc.h:161
QList< ClassInfoDef > classInfoList
Definition moc.h:163
QList< EnumDef > enumList
Definition moc.h:165
Interface(const QByteArray &_className)
Definition moc.h:185
QByteArray className
Definition moc.h:187
QByteArray interfaceId
Definition moc.h:188
QMap< QString, QJsonArray > metaArgs
Definition moc.h:195
QJsonDocument metaData
Definition moc.h:196
QByteArray uri
Definition moc.h:194
QByteArray iid
Definition moc.h:193
bool hasQObject
Definition moc.h:206
QList< QList< Interface > > interfaceList
Definition moc.h:190
QList< FunctionDef > publicList
Definition moc.h:200
QList< FunctionDef > methodList
Definition moc.h:200
QList< PropertyDef > propertyList
Definition moc.h:202
QList< FunctionDef > constructorList
Definition moc.h:199
bool hasQGadget
Definition moc.h:207
QList< SuperClass > superclassList
Definition moc.h:180
bool requireCompleteMethodTypes
Definition moc.h:209
bool hasQNamespace
Definition moc.h:208
QList< FunctionDef > slotList
Definition moc.h:200
QList< FunctionDef > signalList
Definition moc.h:200
int revisionedMethods
Definition moc.h:204
QJsonObject toJson() const
Definition moc.cpp:2052
QList< QByteArray > nonClassSignalList
Definition moc.h:201
QByteArray name
Definition moc.h:155
QByteArray value
Definition moc.h:156
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:2259
QJsonObject toJson(const ClassDef &cdef) const
Definition moc.cpp:2237
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:2143
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:2173
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:218
bool hasQNamespace
Definition moc.h:217
QByteArray name
Definition moc.h:146
QByteArray storage
Definition moc.h:149
QByteArray accessor
Definition moc.h:148
QByteArray setter
Definition moc.h:147
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:135
QByteArray inPrivateClass
Definition moc.h:125
int notifyId
Definition moc.h:126
bool final
Definition moc.h:132
QJsonObject toJson() const
Definition moc.cpp:2191
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 stdCppSet() const
Definition moc.h:116
QByteArray user
Definition moc.h:125
TypeTags typeTag
Definition moc.h:130
QByteArray read
Definition moc.h:125
qsizetype location
Definition moc.h:137
int revision
Definition moc.h:129
QByteArray bind
Definition moc.h:125
int relativeIndex
Definition moc.h:134
QByteArray designable
Definition moc.h:125
bool required
Definition moc.h:133
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:174
FunctionDef::Access access
Definition moc.h:175
QByteArray classname
Definition moc.h:173
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