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_HAS_INCLUDE)
190 F(PP_HASHHASH)
191 F(PP_HASH)
192 F(PP_DEFINED)
193 F(PP_INCOMPLETE)
194 F(PP_MOC_TRUE)
195 F(PP_MOC_FALSE)
196
197
198enum Token {
199
200#define CREATE_ENUM_VALUE(Name) Name,
201 FOR_ALL_TOKENS(CREATE_ENUM_VALUE)
202#undef CREATE_ENUM_VALUE
203
204 // aliases
205 PP_AND = AND,
206 PP_ANDAND = ANDAND,
207 PP_BACKSLASH = BACKSLASH,
208 PP_CHARACTER = CHARACTER,
209 PP_CHARACTER_LITERAL = CHARACTER_LITERAL,
210 PP_COLON = COLON,
211 PP_COMMA = COMMA,
212 PP_CPP_COMMENT = CPP_COMMENT,
213 PP_C_COMMENT = C_COMMENT,
214 PP_DIGIT = DIGIT,
215 PP_EQEQ = EQEQ,
216 PP_FLOATING_LITERAL = FLOATING_LITERAL,
217 PP_GE = GE,
218 PP_GTGT = GTGT,
219 PP_HAT = HAT,
220 PP_IDENTIFIER = IDENTIFIER,
221 PP_INTEGER_LITERAL = INTEGER_LITERAL,
222 PP_LANGLE = LANGLE,
223 PP_LE = LE,
224 PP_LPAREN = LPAREN,
225 PP_LTLT = LTLT,
226 PP_MINUS = MINUS,
227 PP_NE = NE,
228 PP_NEWLINE = NEWLINE,
229 PP_NOTOKEN = NOTOKEN,
230 PP_NOT = NOT,
231 PP_OR = OR,
232 PP_OROR = OROR,
233 PP_PERCENT = PERCENT,
234 PP_PLUS = PLUS,
235 PP_QUESTION = QUESTION,
236 PP_QUOTE = QUOTE,
237 PP_RANGLE = RANGLE,
238 PP_RPAREN = RPAREN,
239 PP_SINGLEQUOTE = SINGLEQUOTE,
240 PP_SLASH = SLASH,
241 PP_STAR = STAR,
242 PP_STRING_LITERAL = STRING_LITERAL,
243 PP_TILDE = TILDE,
244 PP_WHITESPACE = WHITESPACE,
245};
246
247// for debugging only
248#if defined(DEBUG_MOC)
249const char *tokenTypeName(Token t);
250#endif
251
252typedef Token PP_Token;
253
254QT_END_NAMESPACE
255
256#endif // TOKEN_H
Definition moc.h:223
void parse()
Definition moc.cpp:677
bool requireCompleteTypes
Definition moc.h:235
void generate(FILE *out, FILE *jsonOutput)
Definition moc.cpp:1190
bool noInclude
Definition moc.h:233
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.
Definition qlist.h:80
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
QHash< MacroName, Macro > Macros
SubArray MacroName
#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
int main(int argc, char *argv[])
[ctor_close]
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:252