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 <translator.h>
8#include <QtCore/QSet>
9#include <QtCore/QStack>
10
12
14{
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; }
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() : classDef(this) { }
44 {
45 qDeleteAll(children);
46 }
47
48 Namespace *parent = nullptr;
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
68 bool hasTrFunctions = false;
69 bool complained = false; // ... that tr functions are missing.
70 bool isClass = false; // True if this represents a class, false for namespace
71};
72
78
83
85{
91
92 bool operator==(const CppParserState &other) const
93 {
94 return namespaces == other.namespaces
95 && namespaceDepths == other.namespaceDepths
96 && functionContext == other.functionContext
97 && functionContextUnresolved == other.functionContextUnresolved
98 && pendingContext == other.pendingContext;
99 }
100};
101
102size_t qHash(const CppParserState &s, size_t seed);
103
105{
108
109 ResultsCacheKey(const QString &filePath)
111 {
112 }
113
114 ResultsCacheKey(const QString &filePath, const CppParserState &state)
117 {
118 }
119
120 bool operator==(const ResultsCacheKey &other) const
121 {
122 return cleanFile == other.cleanFile
123 && parserState == other.parserState;
124 }
125};
126
127size_t qHash(const ResultsCacheKey &key, size_t seed);
128
131
132class CppFiles {
133public:
134 static QSet<const ParseResults *> getResults(const ResultsCacheKey &key);
135 static void setResults(const ResultsCacheKey &key, const ParseResults *results);
136 static const Translator *getTranslator(const QString &cleanFile);
137 static void setTranslator(const QString &cleanFile, const Translator *results);
138 static bool isBlacklisted(const QString &cleanFile);
139 static void setBlacklisted(const QString &cleanFile);
140 static void addIncludeCycle(const QSet<QString> &fileNames, const CppParserState &parserState);
141
142private:
143 static IncludeCycleHash &includeCycles();
144 static TranslatorHash &translatedFiles();
145 static QSet<QString> &blacklistedFiles();
146};
147
148QT_END_NAMESPACE
149
150#endif // CPP_H
static void setTranslator(const QString &cleanFile, const Translator *results)
Definition cpp.cpp:1401
static void setBlacklisted(const QString &cleanFile)
Definition cpp.cpp:1411
static const Translator * getTranslator(const QString &cleanFile)
Definition cpp.cpp:1396
static void setResults(const ResultsCacheKey &key, const ParseResults *results)
Definition cpp.cpp:1383
static bool isBlacklisted(const QString &cleanFile)
Definition cpp.cpp:1406
static QSet< const ParseResults * > getResults(const ResultsCacheKey &key)
Definition cpp.cpp:1373
static void addIncludeCycle(const QSet< QString > &fileNames, const CppParserState &parserState)
Definition cpp.cpp:1416
bool parseTranslate(QString &prefix)
Definition cpp.cpp:1888
void setInput(QTextStream &ts, const QString &fileName)
Definition cpp.cpp:280
void setTranslator(Translator *_tor)
Definition cpp.cpp:79
void setInput(const QString &in)
Definition cpp.cpp:273
void deleteResults()
Definition cpp.cpp:85
void parseInternal(ConversionData &cd, const QStringList &includeStack, QSet< QString > &inclusions)
Definition cpp.cpp:1932
CppParser(ParseResults *results=0)
Definition cpp.cpp:245
void parse(ConversionData &cd, const QStringList &includeStack, QSet< QString > &inclusions)
Definition cpp.cpp:1833
const ParseResults * recordResults(bool isHeader)
Definition cpp.cpp:2468
void setEndOffset(int endOffset)
QHash< QString, QString > ExtraData
void setExtras(const ExtraData &extras)
void setStartOffset(int startOffset)
void setExtras(const ExtraData &extras)
Definition translator.h:156
void append(const TranslatorMessage &msg)
int messageCount() const
Definition translator.h:137
bool tryVisit(int fileId)
Definition cpp.cpp:62
VisitRecorder()
Definition cpp.cpp:58
static bool isStringLiteralPrefix(const QStringView s)
Definition cpp.cpp:368
static const QString strclass
Definition cpp.cpp:386
static const QString strreturn
Definition cpp.cpp:396
QDebug operator<<(QDebug debug, const HashStringList &lst)
Definition cpp.cpp:49
static const QString strQCoreApplication
Definition cpp.cpp:1558
static const QString strQ_SIGNALS
Definition cpp.cpp:405
static const QString strnamespace
Definition cpp.cpp:391
static const QString strfinal
Definition cpp.cpp:389
static const QString strenum
Definition cpp.cpp:388
size_t qHash(const ResultsCacheKey &key, size_t seed)
Definition cpp.cpp:1345
static const QString strnullptr
Definition cpp.cpp:392
static const QString strsignals
Definition cpp.cpp:403
size_t qHash(const HashStringList &list)
Definition cpp.cpp:36
static const QString strCodecForTr
Definition cpp.cpp:1561
static const QString strpublic
Definition cpp.cpp:401
static const QString strQ_SLOTS
Definition cpp.cpp:404
static const QString strUnicodeUTF8
Definition cpp.cpp:1559
static const QString strprotected
Definition cpp.cpp:400
static const QString strLatin1
Definition cpp.cpp:1562
static int nextFileId
Definition cpp.cpp:54
static bool isHeader(const QString &name)
Definition cpp.cpp:1439
static const QString strNULL
Definition cpp.cpp:394
static const QString strstruct
Definition cpp.cpp:397
static bool isRawStringLiteralPrefix(QStringView s)
Definition cpp.cpp:376
static const QString stroperator
Definition cpp.cpp:395
static const QString strusing
Definition cpp.cpp:398
static const QString strQ_OBJECT
Definition cpp.cpp:385
static const QString strQ_NULLPTR
Definition cpp.cpp:393
size_t qHash(const HashString &str)
Definition cpp.cpp:24
static const QString strQApplication
Definition cpp.cpp:1557
size_t qHash(const CppParserState &s, size_t seed)
Definition cpp.cpp:1335
static const QString strDefaultCodec
Definition cpp.cpp:1560
static const QString strprivate
Definition cpp.cpp:399
static const QString strfriend
Definition cpp.cpp:390
void loadCPP(Translator &translator, const QStringList &filenames, ConversionData &cd)
Definition cpp.cpp:2499
QDebug operator<<(QDebug debug, const HashString &s)
Definition cpp.cpp:31
static const QString strslots
Definition cpp.cpp:402
static const QString strdecltype
Definition cpp.cpp:387
QHash< QString, const Translator * > TranslatorHash
Definition cpp.h:130
QList< HashString > NamespaceList
Definition cpp.h:38
QHash< ResultsCacheKey, IncludeCycle * > IncludeCycleHash
Definition cpp.h:129
Combined button and popup list for selecting options.
bool operator==(const CppParserState &other) const
Definition cpp.h:92
NamespaceList functionContext
Definition cpp.h:88
QString functionContextUnresolved
Definition cpp.h:89
QString pendingContext
Definition cpp.h:90
QStack< qsizetype > namespaceDepths
Definition cpp.h:87
NamespaceList namespaces
Definition cpp.h:86
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
uint m_hash
Definition cpp.h:22
HashString(const QString &str)
Definition cpp.h:16
HashString()
Definition cpp.h:15
bool operator==(const HashString &other) const
Definition cpp.h:19
QString m_str
Definition cpp.h:20
const QString & value() const
Definition cpp.h:18
void setValue(const QString &str)
Definition cpp.h:17
QSet< const ParseResults * > results
Definition cpp.h:81
QSet< QString > fileNames
Definition cpp.h:80
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 isClass
Definition cpp.h:70
bool hasTrFunctions
Definition cpp.h:68
QSet< const ParseResults * > includes
Definition cpp.h:76
int fileId
Definition cpp.h:74
Namespace rootNamespace
Definition cpp.h:75
NamespaceList * resolved
Definition cpp.cpp:1085
const HashString & segment
Definition cpp.cpp:1084
Namespace const ** resolvedNamespace
Definition cpp.cpp:1087
const NamespaceList & namespaces
Definition cpp.cpp:1082
QSet< HashStringList > * visitedUsings
Definition cpp.cpp:1086
QualifyOneData(const NamespaceList &ns, int nsc, const HashString &seg, NamespaceList *rslvd, QSet< HashStringList > *visited, Namespace const **resolvedNs)
Definition cpp.cpp:1072
ResultsCacheKey(const QString &filePath, const CppParserState &state)
Definition cpp.h:114
ResultsCacheKey(const QString &filePath)
Definition cpp.h:109
bool operator==(const ResultsCacheKey &other) const
Definition cpp.h:120
const CppParserState parserState
Definition cpp.h:107
const QString cleanFile
Definition cpp.h:106
TrFunctionAliasManager trFunctionAliasManager
Definition trparser.cpp:153