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
cpp.h
Go to the documentation of this file.
1// Copyright (C) 2016 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 CPP_H
5#define CPP_H
6
7#include "lupdate.h"
8
9#include <QtCore/QSet>
10#include <QtCore/QStack>
11
12QT_BEGIN_NAMESPACE
13
14struct HashString {
15 HashString() : m_hash(0x80000000) {}
16 explicit HashString(const QString &str) : m_str(str), m_hash(0x80000000) {}
17 void setValue(const QString &str) { m_str = str; m_hash = 0x80000000; }
18 const QString &value() const { return m_str; }
19 bool operator==(const HashString &other) const { return m_str == other.m_str; }
20 QString m_str;
21
22 mutable uint m_hash; // We use the highest bit as a validity indicator (set => invalid)
23};
24
25QDebug operator<<(QDebug debug, const HashString &s);
26
28 explicit HashStringList(const QList<HashString> &list) : m_list(list), m_hash(0x80000000) {}
29 const QList<HashString> &value() const { return m_list; }
30 bool operator==(const HashStringList &other) const { return m_list == other.m_list; }
31
33 mutable uint m_hash; // We use the highest bit as a validity indicator (set => invalid)
34};
35
36QDebug operator<<(QDebug debug, const HashStringList &lst);
37
39
40struct Namespace {
41
42 Namespace() : parent(nullptr), classDef(this), hasTrFunctions(false), complained(false) { }
44 {
45 qDeleteAll(children);
46 }
47
52
53 // Class declarations set no flags and create no namespaces, so they are ignored.
54 // Class definitions may appear multiple times - but only because we are trying to
55 // "compile" all sources irrespective of build configuration.
56 // Nested classes may be forward-declared inside a definition, and defined in another file.
57 // The latter will detach the class' child list, so clones need a backlink to the original
58 // definition (either one in case of multiple definitions).
59 // Namespaces can have tr() functions as well, so we need to track parent definitions for
60 // them as well. The complication is that we may have to deal with a forrest instead of
61 // a tree - in that case the parent will be arbitrary. However, it seem likely that
62 // Q_DECLARE_TR_FUNCTIONS would be used either in "class-like" namespaces with a central
63 // header or only locally in a file.
65
67
69 bool complained; // ... that tr functions are missing.
70};
71
77
82
84{
90
91 bool operator==(const CppParserState &other) const
92 {
93 return namespaces == other.namespaces
94 && namespaceDepths == other.namespaceDepths
95 && functionContext == other.functionContext
96 && functionContextUnresolved == other.functionContextUnresolved
97 && pendingContext == other.pendingContext;
98 }
99};
100
101size_t qHash(const CppParserState &s, size_t seed);
102
104{
107
108 ResultsCacheKey(const QString &filePath)
110 {
111 }
112
113 ResultsCacheKey(const QString &filePath, const CppParserState &state)
116 {
117 }
118
119 bool operator==(const ResultsCacheKey &other) const
120 {
121 return cleanFile == other.cleanFile
122 && parserState == other.parserState;
123 }
124};
125
126size_t qHash(const ResultsCacheKey &key, size_t seed);
127
130
131class CppFiles {
132public:
133 static QSet<const ParseResults *> getResults(const ResultsCacheKey &key);
134 static void setResults(const ResultsCacheKey &key, const ParseResults *results);
135 static const Translator *getTranslator(const QString &cleanFile);
136 static void setTranslator(const QString &cleanFile, const Translator *results);
137 static bool isBlacklisted(const QString &cleanFile);
138 static void setBlacklisted(const QString &cleanFile);
139 static void addIncludeCycle(const QSet<QString> &fileNames, const CppParserState &parserState);
140
141private:
142 static IncludeCycleHash &includeCycles();
143 static TranslatorHash &translatedFiles();
144 static QSet<QString> &blacklistedFiles();
145};
146
147QT_END_NAMESPACE
148
149#endif // CPP_H
static void setTranslator(const QString &cleanFile, const Translator *results)
Definition cpp.cpp:1283
static void setBlacklisted(const QString &cleanFile)
Definition cpp.cpp:1293
static const Translator * getTranslator(const QString &cleanFile)
Definition cpp.cpp:1278
static void setResults(const ResultsCacheKey &key, const ParseResults *results)
Definition cpp.cpp:1265
static bool isBlacklisted(const QString &cleanFile)
Definition cpp.cpp:1288
static QSet< const ParseResults * > getResults(const ResultsCacheKey &key)
Definition cpp.cpp:1255
static void addIncludeCycle(const QSet< QString > &fileNames, const CppParserState &parserState)
Definition cpp.cpp:1298
bool parseTranslate(QString &prefix)
Definition cpp.cpp:1742
void setInput(QTextStream &ts, const QString &fileName)
Definition cpp.cpp:274
void setTranslator(Translator *_tor)
Definition cpp.cpp:77
void setInput(const QString &in)
Definition cpp.cpp:267
void deleteResults()
Definition cpp.cpp:83
void parseInternal(ConversionData &cd, const QStringList &includeStack, QSet< QString > &inclusions)
Definition cpp.cpp:1786
CppParser(ParseResults *results=0)
Definition cpp.cpp:239
void parse(ConversionData &cd, const QStringList &includeStack, QSet< QString > &inclusions)
Definition cpp.cpp:1732
const ParseResults * recordResults(bool isHeader)
Definition cpp.cpp:2291
QHash< QString, QString > ExtraData
void setExtras(const ExtraData &extras)
void append(const TranslatorMessage &msg)
int messageCount() const
Definition translator.h:139
bool tryVisit(int fileId)
Definition cpp.cpp:60
VisitRecorder()
Definition cpp.cpp:56
static bool isStringLiteralPrefix(const QStringView s)
Definition cpp.cpp:362
static const QString strclass
Definition cpp.cpp:380
static const QString strreturn
Definition cpp.cpp:390
QDebug operator<<(QDebug debug, const HashStringList &lst)
Definition cpp.cpp:47
static const QString strQCoreApplication
Definition cpp.cpp:1440
static const QString strQ_SIGNALS
Definition cpp.cpp:399
static const QString strnamespace
Definition cpp.cpp:385
static const QString strfinal
Definition cpp.cpp:383
static const QString strenum
Definition cpp.cpp:382
size_t qHash(const ResultsCacheKey &key, size_t seed)
Definition cpp.cpp:1227
static const QString strnullptr
Definition cpp.cpp:386
static const QString strsignals
Definition cpp.cpp:397
size_t qHash(const HashStringList &list)
Definition cpp.cpp:34
static const QString strCodecForTr
Definition cpp.cpp:1443
static const QString strpublic
Definition cpp.cpp:395
static const QString strQ_SLOTS
Definition cpp.cpp:398
static const QString strUnicodeUTF8
Definition cpp.cpp:1441
static const QString strprotected
Definition cpp.cpp:394
static const QString strLatin1
Definition cpp.cpp:1444
static int nextFileId
Definition cpp.cpp:52
static bool isHeader(const QString &name)
Definition cpp.cpp:1321
static const QString strNULL
Definition cpp.cpp:388
static const QString strstruct
Definition cpp.cpp:391
static bool isRawStringLiteralPrefix(QStringView s)
Definition cpp.cpp:370
static const QString stroperator
Definition cpp.cpp:389
static const QString strusing
Definition cpp.cpp:392
static const QString strQ_OBJECT
Definition cpp.cpp:379
static const QString strQ_NULLPTR
Definition cpp.cpp:387
size_t qHash(const HashString &str)
Definition cpp.cpp:22
static const QString strQApplication
Definition cpp.cpp:1439
size_t qHash(const CppParserState &s, size_t seed)
Definition cpp.cpp:1217
static const QString strDefaultCodec
Definition cpp.cpp:1442
static const QString strprivate
Definition cpp.cpp:393
static const QString strfriend
Definition cpp.cpp:384
void loadCPP(Translator &translator, const QStringList &filenames, ConversionData &cd)
Definition cpp.cpp:2322
QDebug operator<<(QDebug debug, const HashString &s)
Definition cpp.cpp:29
static const QString strslots
Definition cpp.cpp:396
static const QString strdecltype
Definition cpp.cpp:381
QHash< QString, const Translator * > TranslatorHash
Definition cpp.h:129
QList< HashString > NamespaceList
Definition cpp.h:38
QHash< ResultsCacheKey, IncludeCycle * > IncludeCycleHash
Definition cpp.h:128
bool operator==(const CppParserState &other) const
Definition cpp.h:91
NamespaceList functionContext
Definition cpp.h:87
QString functionContextUnresolved
Definition cpp.h:88
QString pendingContext
Definition cpp.h:89
QStack< qsizetype > namespaceDepths
Definition cpp.h:86
NamespaceList namespaces
Definition cpp.h:85
uint m_hash
Definition cpp.h:33
const QList< HashString > & value() const
Definition cpp.h:29
HashStringList(const QList< HashString > &list)
Definition cpp.h:28
QList< HashString > m_list
Definition cpp.h:32
bool operator==(const HashStringList &other) const
Definition cpp.h:30
QSet< const ParseResults * > results
Definition cpp.h:80
QSet< QString > fileNames
Definition cpp.h:79
QHash< HashString, Namespace * > children
Definition cpp.h:49
QString trQualification
Definition cpp.h:66
Namespace * classDef
Definition cpp.h:64
Namespace * parent
Definition cpp.h:48
QHash< HashString, NamespaceList > aliases
Definition cpp.h:50
QList< HashStringList > usings
Definition cpp.h:51
Namespace()
Definition cpp.h:42
bool complained
Definition cpp.h:69
~Namespace()
Definition cpp.h:43
bool hasTrFunctions
Definition cpp.h:68
QSet< const ParseResults * > includes
Definition cpp.h:75
int fileId
Definition cpp.h:73
Namespace rootNamespace
Definition cpp.h:74
NamespaceList * resolved
Definition cpp.cpp:1039
const HashString & segment
Definition cpp.cpp:1038
QualifyOneData(const NamespaceList &ns, int nsc, const HashString &seg, NamespaceList *rslvd, QSet< HashStringList > *visited)
Definition cpp.cpp:1031
const NamespaceList & namespaces
Definition cpp.cpp:1036
QSet< HashStringList > * visitedUsings
Definition cpp.cpp:1040
ResultsCacheKey(const QString &filePath, const CppParserState &state)
Definition cpp.h:113
ResultsCacheKey(const QString &filePath)
Definition cpp.h:108
bool operator==(const ResultsCacheKey &other) const
Definition cpp.h:119
const CppParserState parserState
Definition cpp.h:106
const QString cleanFile
Definition cpp.h:105