summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2023-12-12 11:10:45 +0100
committerMarc Mutz <marc.mutz@qt.io>2023-12-13 21:54:01 +0100
commitcbb4aea2132fc59cd1086ba42cc221d12b5ce9e8 (patch)
tree3be997bce0ad119ba96701bebae6230964f5827c
parentee5da1f2eaf8932aeca02ffea6e4c618585e29e3 (diff)
moc: port from pair<> to a struct SuperClass
... with properly-named members. This is in preparation of adding a new member in order to fix QTBUG-101141 (namespaced base classes). Pick-to: 6.7 6.6 6.5 Task-number: QTBUG-101141 Change-Id: I2309e425ac94ad275b54a898fd33a2891e5d1453 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
-rw-r--r--src/tools/moc/generator.cpp7
-rw-r--r--src/tools/moc/moc.cpp14
-rw-r--r--src/tools/moc/moc.h9
3 files changed, 16 insertions, 14 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp
index 086b446a45..967d7236de 100644
--- a/src/tools/moc/generator.cpp
+++ b/src/tools/moc/generator.cpp
@@ -70,7 +70,7 @@ QT_FOR_EACH_STATIC_TYPE(RETURN_METATYPENAME_STRING)
requireCompleteTypes(requireCompleteTypes)
{
if (cdef->superclassList.size())
- purestSuperClass = cdef->superclassList.constFirst().first;
+ purestSuperClass = cdef->superclassList.constFirst().classname;
}
static inline qsizetype lengthOfEscapeSequence(const QByteArray &s, qsizetype i)
@@ -593,10 +593,9 @@ void Generator::generateCode()
auto it = cdef->superclassList.cbegin() + 1;
const auto end = cdef->superclassList.cend();
for (; it != end; ++it) {
- const auto &[className, access] = *it;
- if (access == FunctionDef::Private)
+ if (it->access == FunctionDef::Private)
continue;
- const char *cname = className.constData();
+ const char *cname = it->classname.constData();
fprintf(out, " if (!strcmp(_clname, \"%s\"))\n return static_cast< %s*>(this);\n",
cname, cname);
}
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp
index c1fa36c87a..e100ff4ba8 100644
--- a/src/tools/moc/moc.cpp
+++ b/src/tools/moc/moc.cpp
@@ -92,12 +92,12 @@ bool Moc::parseClassHead(ClassDef *def)
if (test(LPAREN)) {
until(RPAREN);
} else {
- def->superclassList += qMakePair(type, access);
+ def->superclassList += SuperClass{type, access};
}
} while (test(COMMA));
if (!def->superclassList.isEmpty()
- && knownGadgets.contains(def->superclassList.constFirst().first)) {
+ && knownGadgets.contains(def->superclassList.constFirst().classname)) {
// Q_GADGET subclasses are treated as Q_GADGETs
knownGadgets.insert(def->classname, def->qualified);
knownGadgets.insert(def->qualified, def->qualified);
@@ -1858,7 +1858,7 @@ bool Moc::until(Token target) {
void Moc::checkSuperClasses(ClassDef *def)
{
Q_ASSERT(!def->superclassList.isEmpty());
- const QByteArray &firstSuperclass = def->superclassList.at(0).first;
+ const QByteArray &firstSuperclass = def->superclassList.at(0).classname;
if (!knownQObjectClasses.contains(firstSuperclass)) {
// enable once we /require/ include paths
@@ -1884,7 +1884,7 @@ void Moc::checkSuperClasses(ClassDef *def)
const auto end = def->superclassList.cend();
auto it = def->superclassList.cbegin() + 1;
for (; it != end; ++it) {
- const QByteArray &superClass = it->first;
+ const QByteArray &superClass = it->classname;
if (knownQObjectClasses.contains(superClass)) {
const QByteArray msg
= "Class "
@@ -2038,11 +2038,9 @@ QJsonObject ClassDef::toJson() const
QJsonArray superClasses;
for (const auto &super: std::as_const(superclassList)) {
- const auto name = super.first;
- const auto access = super.second;
QJsonObject superCls;
- superCls["name"_L1] = QString::fromUtf8(name);
- FunctionDef::accessToJson(&superCls, access);
+ superCls["name"_L1] = QString::fromUtf8(super.classname);
+ FunctionDef::accessToJson(&superCls, super.access);
superClasses.append(superCls);
}
diff --git a/src/tools/moc/moc.h b/src/tools/moc/moc.h
index 001252b6eb..5abab49c8b 100644
--- a/src/tools/moc/moc.h
+++ b/src/tools/moc/moc.h
@@ -7,7 +7,6 @@
#include "parser.h"
#include <qstringlist.h>
#include <qmap.h>
-#include <qpair.h>
#include <qjsondocument.h>
#include <qjsonarray.h>
#include <qjsonobject.h>
@@ -156,8 +155,14 @@ struct BaseDef {
qsizetype end = 0;
};
+struct SuperClass {
+ QByteArray classname;
+ FunctionDef::Access access;
+};
+Q_DECLARE_TYPEINFO(SuperClass, Q_RELOCATABLE_TYPE);
+
struct ClassDef : BaseDef {
- QList<QPair<QByteArray, FunctionDef::Access>> superclassList;
+ QList<SuperClass> superclassList;
struct Interface
{