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
token.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef TOKEN_H
5#define TOKEN_H
6
7#include <QtCore/qglobal.h>
8
9QT_BEGIN_NAMESPACE
10
11#define FOR_ALL_TOKENS(F)
12 F(NOTOKEN)
13 F(IDENTIFIER)
14 F(INTEGER_LITERAL)
15 F(CHARACTER_LITERAL)
16 F(STRING_LITERAL)
17 F(BOOLEAN_LITERAL)
18 F(HEADER_NAME)
19 F(LANGLE)
20 F(RANGLE)
21 F(LPAREN)
22 F(RPAREN)
23 F(ELIPSIS)
24 F(LBRACK)
25 F(RBRACK)
26 F(LBRACE)
27 F(RBRACE)
28 F(EQ)
29 F(SCOPE)
30 F(SEMIC)
31 F(COLON)
32 F(DOTSTAR)
33 F(QUESTION)
34 F(DOT)
35 F(DYNAMIC_CAST)
36 F(STATIC_CAST)
37 F(REINTERPRET_CAST)
38 F(CONST_CAST)
39 F(TYPEID)
40 F(THIS)
41 F(TEMPLATE)
42 F(THROW)
43 F(TRY)
44 F(CATCH)
45 F(TYPEDEF)
46 F(FRIEND)
47 F(CLASS)
48 F(NAMESPACE)
49 F(ENUM)
50 F(STRUCT)
51 F(UNION)
52 F(VIRTUAL)
53 F(PRIVATE)
54 F(PROTECTED)
55 F(PUBLIC)
56 F(EXPORT)
57 F(AUTO)
58 F(REGISTER)
59 F(EXTERN)
60 F(MUTABLE)
61 F(ASM)
62 F(USING)
63 F(INLINE)
64 F(EXPLICIT)
65 F(STATIC)
66 F(CONST)
67 F(CONSTEXPR)
68 F(VOLATILE)
69 F(OPERATOR)
70 F(SIZEOF)
71 F(NEW)
72 F(DELETE)
73 F(PLUS)
74 F(MINUS)
75 F(STAR)
76 F(SLASH)
77 F(PERCENT)
78 F(HAT)
79 F(AND)
80 F(OR)
81 F(TILDE)
82 F(NOT)
83 F(PLUS_EQ)
84 F(MINUS_EQ)
85 F(STAR_EQ)
86 F(SLASH_EQ)
87 F(PERCENT_EQ)
88 F(HAT_EQ)
89 F(AND_EQ)
90 F(OR_EQ)
91 F(LTLT)
92 F(GTGT)
93 F(GTGT_EQ)
94 F(LTLT_EQ)
95 F(EQEQ)
96 F(NE)
97 F(LE)
98 F(GE)
99 F(ANDAND)
100 F(OROR)
101 F(INCR)
102 F(DECR)
103 F(COMMA)
104 F(ARROW_STAR)
105 F(ARROW)
106 F(CHAR)
107 F(WCHAR)
108 F(BOOL)
109 F(SHORT)
110 F(INT)
111 F(LONG)
112 F(SIGNED)
113 F(UNSIGNED)
114 F(FLOAT)
115 F(DOUBLE)
116 F(VOID)
117 F(CASE)
118 F(DEFAULT)
119 F(IF)
120 F(ELSE)
121 F(SWITCH)
122 F(WHILE)
123 F(DO)
124 F(FOR)
125 F(BREAK)
126 F(CONTINUE)
127 F(GOTO)
128 F(SIGNALS)
129 F(SLOTS)
130 F(RETURN)
131 F(Q_META_TOKEN_BEGIN)
132 F(Q_OBJECT_TOKEN)
133 F(Q_GADGET_TOKEN)
134 F(Q_GADGET_EXPORT_TOKEN)
135 F(Q_NAMESPACE_TOKEN)
136 F(Q_NAMESPACE_EXPORT_TOKEN)
137 F(Q_PROPERTY_TOKEN)
138 F(QT_ANONYMOUS_PROPERTY_TOKEN)
139 F(Q_PLUGIN_METADATA_TOKEN)
140 F(Q_ENUMS_TOKEN)
141 F(Q_ENUM_TOKEN)
142 F(Q_ENUM_NS_TOKEN)
143 F(Q_FLAGS_TOKEN)
144 F(Q_FLAG_TOKEN)
145 F(Q_FLAG_NS_TOKEN)
146 F(Q_DECLARE_INTERFACE_TOKEN)
147 F(Q_DECLARE_METATYPE_TOKEN)
148 F(Q_CLASSINFO_TOKEN)
149 F(Q_INTERFACES_TOKEN)
150 F(Q_SIGNALS_TOKEN)
151 F(Q_SLOTS_TOKEN)
152 F(Q_SIGNAL_TOKEN)
153 F(Q_SLOT_TOKEN)
154 F(Q_PRIVATE_SLOT_TOKEN)
155 F(Q_MOC_COMPAT_TOKEN)
156 F(Q_INVOKABLE_TOKEN)
157 F(Q_SCRIPTABLE_TOKEN)
158 F(Q_PRIVATE_PROPERTY_TOKEN)
159 F(QT_ANONYMOUS_PRIVATE_PROPERTY_TOKEN)
160 F(Q_REVISION_TOKEN)
161 F(Q_MOC_INCLUDE_TOKEN)
162 F(Q_META_TOKEN_END)
163 F(Q_DECLARE_FLAGS_TOKEN)
164 F(SPECIAL_TREATMENT_MARK)
165 F(MOC_INCLUDE_BEGIN)
166 F(MOC_INCLUDE_END)
167 F(CPP_COMMENT)
168 F(C_COMMENT)
169 F(FLOATING_LITERAL)
170 F(HASH)
171 F(QUOTE)
172 F(SINGLEQUOTE)
173 F(LANGLE_SCOPE)
174 F(DIGIT)
175 F(CHARACTER)
176 F(NEWLINE)
177 F(WHITESPACE)
178 F(BACKSLASH)
179 F(INCOMPLETE)
180 F(PP_DEFINE)
181 F(PP_UNDEF)
182 F(PP_IF)
183 F(PP_IFDEF)
184 F(PP_IFNDEF)
185 F(PP_ELIF)
186 F(PP_ELSE)
187 F(PP_ENDIF)
188 F(PP_INCLUDE)
189 F(PP_INCLUDE_NEXT)
190 F(PP_HAS_INCLUDE)
191 F(PP_HAS_INCLUDE_NEXT)
192 F(PP_HASHHASH)
193 F(PP_HASH)
194 F(PP_DEFINED)
195 F(PP_INCOMPLETE)
196 F(PP_MOC_TRUE)
197 F(PP_MOC_FALSE)
198
199
200enum Token {
201
202#define CREATE_ENUM_VALUE(Name) Name,
203 FOR_ALL_TOKENS(CREATE_ENUM_VALUE)
204#undef CREATE_ENUM_VALUE
205
206 // aliases
207 PP_AND = AND,
208 PP_ANDAND = ANDAND,
209 PP_BACKSLASH = BACKSLASH,
210 PP_CHARACTER = CHARACTER,
211 PP_CHARACTER_LITERAL = CHARACTER_LITERAL,
212 PP_COLON = COLON,
213 PP_COMMA = COMMA,
214 PP_CPP_COMMENT = CPP_COMMENT,
215 PP_C_COMMENT = C_COMMENT,
216 PP_DIGIT = DIGIT,
217 PP_EQEQ = EQEQ,
218 PP_FLOATING_LITERAL = FLOATING_LITERAL,
219 PP_GE = GE,
220 PP_GTGT = GTGT,
221 PP_HAT = HAT,
222 PP_IDENTIFIER = IDENTIFIER,
223 PP_INTEGER_LITERAL = INTEGER_LITERAL,
224 PP_LANGLE = LANGLE,
225 PP_LE = LE,
226 PP_LPAREN = LPAREN,
227 PP_LTLT = LTLT,
228 PP_MINUS = MINUS,
229 PP_NE = NE,
230 PP_NEWLINE = NEWLINE,
231 PP_NOTOKEN = NOTOKEN,
232 PP_NOT = NOT,
233 PP_OR = OR,
234 PP_OROR = OROR,
235 PP_PERCENT = PERCENT,
236 PP_PLUS = PLUS,
237 PP_QUESTION = QUESTION,
238 PP_QUOTE = QUOTE,
239 PP_RANGLE = RANGLE,
240 PP_RPAREN = RPAREN,
241 PP_SINGLEQUOTE = SINGLEQUOTE,
242 PP_SLASH = SLASH,
243 PP_STAR = STAR,
244 PP_STRING_LITERAL = STRING_LITERAL,
245 PP_TILDE = TILDE,
246 PP_WHITESPACE = WHITESPACE,
247};
248
249// for debugging only
250#if defined(DEBUG_MOC)
251const char *tokenTypeName(Token t);
252#endif
253
254typedef Token PP_Token;
255
256QT_END_NAMESPACE
257
258#endif // TOKEN_H
Definition moc.h:226
void parse()
Definition moc.cpp:702
bool requireCompleteTypes
Definition moc.h:238
void generate(FILE *out, FILE *jsonOutput)
Definition moc.cpp:1215
bool noInclude
Definition moc.h:236
QByteArray resolveIncludeNext(const QByteArray &filename, qsizetype startIndex, qsizetype *foundIndex=nullptr)
void setDebugIncludes(bool value)
void parseDefineArguments(Macro *m)
void skipUntilEndif()
Symbols preprocessed(const QByteArray &filename, QFile *device)
void substituteUntilNewline(Symbols &substituted)
QList< QByteArray > frameworks
QHash< QByteArray, IncludeResolution > nonlocalIncludePathResolutionCache
static bool preprocessOnly
QByteArray resolveInclude(const QByteArray &filename, const QByteArray &relativeTo, qsizetype *foundIndex=nullptr)
static Symbols macroExpandIdentifier(Preprocessor *that, SymbolStack &symbols, int lineNum, QByteArray *macroName)
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.
Definition qlist.h:81
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
Combined button and popup list for selecting options.
QHash< MacroName, Macro > Macros
SubArray MacroName
#define qPrintable(string)
Definition qstring.h:1705
#define QStringLiteral(str)
Definition qstring.h:1847
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
int main(int argc, char *argv[])
[ctor_close]
qsizetype foundIndex
Simple structure used by the Doc and DocParser classes.
Symbols symbols
bool isVariadic
bool isFunction
Symbols arguments
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
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:254