9#include <qhashfunctions.h>
22 SubArray(
const QByteArray &a, qsizetype from, qsizetype len)
32 const auto begin = array.cbegin() + from;
33 const auto end = begin + len;
34 const auto other_begin = other.array.cbegin() + other.from;
35 return std::equal(begin, end, other_begin);
41 return qHash(QLatin1StringView(key.array.constData() + key.from, key.len), seed);
49 inline Symbol(
int lineNum, Token token,
const QByteArray &lexem)
53 Symbol(
int lineNum, Token token,
const QByteArray &lexem, qsizetype from, qsizetype len)
64 return SubArray(lex, from, len) == SubArray(o.lex, o.from, o.len);
86 while (!isEmpty() && top().index >= top().symbols.size())
91 while (!isEmpty() && top().index >= top().symbols.size())
95 return top().symbols.at(top().index++).token;
98 inline const Symbol &
symbol()
const {
return top().symbols.at(top().index-1); }
109 qsizetype stackPos = size() - 1;
110 while (stackPos >= 0 && at(stackPos).index >= at(stackPos).symbols.size())
114 if (at(stackPos).symbols.at(at(stackPos).index).token == token) {
123 auto matchesName = [&name](
const SafeSymbols &sf) {
124 return name == sf.expandedMacro || sf.excludedSymbols.contains(name);
126 return std::any_of(cbegin(), cend(), matchesName);
129inline QSet<QByteArray> SymbolStack::excludeSymbols()
const
131 QSet<QByteArray> set;
132 for (
const SafeSymbols &sf : *
this) {
133 set << sf.expandedMacro;
134 set += sf.excludedSymbols;
int main(int argc, char *argv[])
[2]
bool requireCompleteTypes
void generate(FILE *out, FILE *jsonOutput)
void setDebugIncludes(bool value)
void parseDefineArguments(Macro *m)
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.
QByteArray unquotedLexem()
const Symbol & symbol() const
bool dontReplaceSymbol(const QByteArray &name) const
Combined button and popup list for selecting options.
QHash< MacroName, Macro > Macros
#define qPrintable(string)
static QByteArray combinePath(const QString &infile, const QString &outfile)
static bool hasNext(const Symbols &symbols, int i)
static const Symbol & next(const Symbols &symbols, int &i)
int runMoc(int argc, char **argv)
static auto openFileForWriting(const QString &name)
void error(const char *msg="Invalid argument")
static QStringList argumentsFromCommandLineAndFile(const QStringList &arguments, bool &hasOptionFiles)
QByteArray composePreprocessorOutput(const Symbols &symbols)
Simple structure used by the Doc and DocParser classes.
bool operator==(const SubArray &other) const
SubArray(const QByteArray &a)
SubArray(const QByteArray &a, qsizetype from, qsizetype len)
Symbol(int lineNum, Token token)
operator SubArray() const
bool operator==(const Symbol &o) const
Symbol(int lineNum, Token token, const QByteArray &lexem, qsizetype from, qsizetype len)
QByteArray unquotedLexem() const
Symbol(int lineNum, Token token, const QByteArray &lexem)
size_t qHash(const SubArray &key, size_t seed=0)
Q_DECLARE_TYPEINFO(Symbol, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(SafeSymbols, Q_RELOCATABLE_TYPE)