summaryrefslogtreecommitdiffstats
path: root/src/tools/moc
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/moc')
-rw-r--r--src/tools/moc/generator.cpp318
-rw-r--r--src/tools/moc/generator.h1
-rw-r--r--src/tools/moc/keywords.cpp61
-rw-r--r--src/tools/moc/moc.cpp157
-rw-r--r--src/tools/moc/moc.h8
-rw-r--r--src/tools/moc/parser.h1
-rw-r--r--src/tools/moc/token.h1
-rw-r--r--src/tools/moc/util/generate_keywords.cpp1
8 files changed, 85 insertions, 463 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp
index c36e01a79a..1d2fa5d1d7 100644
--- a/src/tools/moc/generator.cpp
+++ b/src/tools/moc/generator.cpp
@@ -671,11 +671,6 @@ void Generator::generateCode()
generateSignal(&cdef->signalList[signalindex], signalindex);
//
-// Generate QProperty forwarding API
-//
- generateQPropertyApi();
-
-//
// Generate plugin meta data
//
generatePluginMetaData();
@@ -1317,46 +1312,21 @@ void Generator::generateStaticMetacall()
prefix += p.inPrivateClass + "->";
}
- if (!p.qpropertyname.isEmpty() && p.stored != "true") {
- // nullptr checks needed.
- fprintf(out, " case %d:\n", propindex);
- if (p.gspec == PropertyDef::PointerSpec || p.gspec == PropertyDef::ReferenceSpec) {
- fprintf(out, " if (auto *source = %s%s)\n", prefix.constData(), p.qpropertyname.constData());
- fprintf(out, " _a[0] = const_cast<void*>(reinterpret_cast<const void*>(%ssource->value()));\n", p.gspec == PropertyDef::ReferenceSpec ? "&" : "");
- fprintf(out, " else\n");
- fprintf(out, " _a[0] = nullptr;\n");
- } else if (cdef->enumDeclarations.value(p.type, false)) {
- fprintf(out, " if (auto *source = %s%s)\n", prefix.constData(), p.qpropertyname.constData());
- fprintf(out, " *reinterpret_cast<int*>(_v) = QFlag(source->value()));\n");
- fprintf(out, " else\n");
- fprintf(out, " *reinterpret_cast<int*>(_v) = QFlag(%s())\n;", p.type.constData());
- } else if (!p.read.isEmpty()) {
- fprintf(out, " if (auto *source = %s%s)\n", prefix.constData(), p.qpropertyname.constData());
- fprintf(out, " *reinterpret_cast<%s*>(_v) = source->value();\n", p.type.constData());
- fprintf(out, " else\n");
- fprintf(out, " *reinterpret_cast<%s*>(_v) = %s()\n;", p.type.constData(), p.type.constData());
- } else {
- fprintf(out, " *reinterpret_cast< %s*>(_v) = %s%s;\n",
- p.type.constData(), prefix.constData(), p.member.constData());
- }
- fprintf(out, " break;\n");
- } else {
- if (p.gspec == PropertyDef::PointerSpec)
- fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(%s%s())); break;\n",
- propindex, prefix.constData(), p.read.constData());
- else if (p.gspec == PropertyDef::ReferenceSpec)
- fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(&%s%s())); break;\n",
- propindex, prefix.constData(), p.read.constData());
- else if (cdef->enumDeclarations.value(p.type, false))
- fprintf(out, " case %d: *reinterpret_cast<int*>(_v) = QFlag(%s%s()); break;\n",
- propindex, prefix.constData(), p.read.constData());
- else if (!p.read.isEmpty())
- fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s(); break;\n",
- propindex, p.type.constData(), prefix.constData(), p.read.constData());
- else
- fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s; break;\n",
- propindex, p.type.constData(), prefix.constData(), p.member.constData());
- }
+ if (p.gspec == PropertyDef::PointerSpec)
+ fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(%s%s())); break;\n",
+ propindex, prefix.constData(), p.read.constData());
+ else if (p.gspec == PropertyDef::ReferenceSpec)
+ fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(&%s%s())); break;\n",
+ propindex, prefix.constData(), p.read.constData());
+ else if (cdef->enumDeclarations.value(p.type, false))
+ fprintf(out, " case %d: *reinterpret_cast<int*>(_v) = QFlag(%s%s()); break;\n",
+ propindex, prefix.constData(), p.read.constData());
+ else if (!p.read.isEmpty())
+ fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s(); break;\n",
+ propindex, p.type.constData(), prefix.constData(), p.read.constData());
+ else
+ fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s; break;\n",
+ propindex, p.type.constData(), prefix.constData(), p.member.constData());
}
fprintf(out, " default: break;\n");
fprintf(out, " }\n");
@@ -1382,35 +1352,11 @@ void Generator::generateStaticMetacall()
prefix += p.inPrivateClass + "->";
}
if (cdef->enumDeclarations.value(p.type, false)) {
- if (!p.qpropertyname.isEmpty() && p.stored != "true") {
- fprintf(out, " case %d:\n", propindex);
- fprintf(out, " if (auto *destination = %s%s)\n", prefix.constData(), p.qpropertyname.constData());
- fprintf(out, " destination->setValue(QFlag(*reinterpret_cast<int*>(_v)));");
- fprintf(out, " break;");
- } else {
- fprintf(out, " case %d: %s%s(QFlag(*reinterpret_cast<int*>(_v))); break;\n",
- propindex, prefix.constData(), p.write.constData());
- }
+ fprintf(out, " case %d: %s%s(QFlag(*reinterpret_cast<int*>(_v))); break;\n",
+ propindex, prefix.constData(), p.write.constData());
} else if (!p.write.isEmpty()) {
- QByteArray optionalQPropertyOwner;
- if (p.isQPropertyWithNotifier) {
- optionalQPropertyOwner = "_t";
- if (p.inPrivateClass.size()) {
- optionalQPropertyOwner += "->";
- optionalQPropertyOwner += p.inPrivateClass;
- }
- optionalQPropertyOwner += ", ";
- }
-
- if (!p.qpropertyname.isEmpty() && p.stored != "true") {
- fprintf(out, " case %d:\n", propindex);
- fprintf(out, " if (auto *destination = %s%s)\n", prefix.constData(), p.qpropertyname.constData());
- fprintf(out, " destination->setValue(%s*reinterpret_cast<%s*>(_v));\n", optionalQPropertyOwner.constData(), p.type.constData());
- fprintf(out, " break;\n");
- } else {
- fprintf(out, " case %d: %s%s(%s*reinterpret_cast< %s*>(_v)); break;\n",
- propindex, prefix.constData(), p.write.constData(), optionalQPropertyOwner.constData(), p.type.constData());
- }
+ fprintf(out, " case %d: %s%s(*reinterpret_cast< %s*>(_v)); break;\n",
+ propindex, prefix.constData(), p.write.constData(), p.type.constData());
} else {
fprintf(out, " case %d:\n", propindex);
fprintf(out, " if (%s%s != *reinterpret_cast< %s*>(_v)) {\n",
@@ -1458,6 +1404,7 @@ void Generator::generateStaticMetacall()
}
fprintf(out, " }");
+#if 0
fprintf(out, " else ");
fprintf(out, "if (_c == QMetaObject::RegisterQPropertyObserver) {\n");
if (haveQProperties) {
@@ -1469,16 +1416,12 @@ void Generator::generateStaticMetacall()
if (!p.isQProperty)
continue;
QByteArray prefix = "_t->";
- if (p.inPrivateClass.size()) {
- prefix += p.inPrivateClass + "->";
- }
if (p.qpropertyname.isEmpty() || p.stored == "true") {
fprintf(out, " case %d: observer->setSource(%s%s); break;\n",
- propindex, prefix.constData(),
- p.qpropertyname.isEmpty() ? p.name.constData() : p.qpropertyname.constData());
+ propindex, prefix.constData(), p.bindingAccessor.constData());
} else {
fprintf(out, " case %d: if (auto *source = %s%s) observer->setSource(*source); break; \n",
- propindex, prefix.constData(), p.qpropertyname.constData());
+ propindex, prefix.constData(), p.bindingAccessor.constData());
}
}
fprintf(out, " default: break;\n");
@@ -1496,26 +1439,16 @@ void Generator::generateStaticMetacall()
if (!p.isQProperty)
continue;
QByteArray prefix = "_t->";
- QByteArray objectAccessor = "_t";
- if (p.inPrivateClass.size()) {
- prefix += p.inPrivateClass + "->";
- objectAccessor += "->";
- objectAccessor += p.inPrivateClass;
- }
- if (p.isQPropertyWithNotifier)
- objectAccessor += ", ";
- else
- objectAccessor.clear();
if (p.qpropertyname.isEmpty() || p.stored == "true") {
- fprintf(out, " case %d: %s%s.setBinding(%s*reinterpret_cast<QPropertyBinding<%s> *>(_a[0])); break;\n",
+ fprintf(out, " case %d: %s%s.setBinding(*reinterpret_cast<QPropertyBinding<%s> *>(_a[0])); break;\n",
propindex, prefix.constData(),
- p.qpropertyname.isEmpty() ? p.name.constData() : p.qpropertyname.constData(),
- objectAccessor.constData(), p.type.constData());
+ p.bindingAccessor.constData(),
+ p.type.constData());
} else {
- fprintf(out, " case %d: if (auto *source = %s%s) source->setBinding(%s*reinterpret_cast<QPropertyBinding<%s> *>(_a[0])); break;\n",
- propindex, prefix.constData(), p.qpropertyname.constData(),
- objectAccessor.constData(), p.type.constData());
+ fprintf(out, " case %d: if (auto *source = %s%s) source->setBinding(*reinterpret_cast<QPropertyBinding<%s> *>(_a[0])); break;\n",
+ propindex, prefix.constData(), p.bindingAccessor.constData(),
+ p.type.constData());
}
}
@@ -1523,7 +1456,7 @@ void Generator::generateStaticMetacall()
fprintf(out, " }\n");
}
fprintf(out, " }");
-
+#endif
fprintf(out, "\n#endif // QT_NO_PROPERTIES");
needElse = true;
}
@@ -1608,199 +1541,6 @@ void Generator::generateSignal(FunctionDef *def,int index)
fprintf(out, "}\n");
}
-void Generator::generateQPropertyApi()
-{
- for (const PrivateQPropertyDef &property: cdef->privateQProperties) {
- auto printAccessor = [this, property](bool constAccessor = false) {
- const char *constOrNot = constAccessor ? "const " : " ";
- fprintf(out, " const size_t propertyMemberOffset = Q_OFFSETOF(%s, %s);\n", cdef->qualified.constData(), property.name.constData());
- fprintf(out, " %sauto *thisPtr = reinterpret_cast<%s%s *>(reinterpret_cast<%schar *>(this) - propertyMemberOffset);\n", constOrNot, constOrNot, cdef->qualified.constData(), constOrNot);
- };
-
- const bool stored = (property.name == property.storage);
- const bool isNotifiedProperty = property.isNotifiedProperty;
-
- // property accessor
- fprintf(out, "\n%s %s::_qt_property_api_%s::value() const\n{\n",
- property.type.name.constData(),
- cdef->qualified.constData(),
- property.name.constData());
- printAccessor(/*const*/true);
- if (stored) {
- fprintf(out, " return thisPtr->%s->%s.value();\n", property.accessor.constData(), property.storage.constData());
- } else {
- fprintf(out, " if (auto *source = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData());
- fprintf(out, " return source->value();\n");
- fprintf(out, " else\n");
- fprintf(out, " return %s();\n", property.type.name.constData());
- }
- fprintf(out, "}\n");
-
- // property value setter
- fprintf(out, "\nvoid %s::_qt_property_api_%s::setValue(%s const &value)\n{\n",
- cdef->qualified.constData(),
- property.name.constData(),
- property.type.name.constData());
- printAccessor();
- if (stored) {
- if (isNotifiedProperty)
- fprintf(out, " thisPtr->%s->%s.setValue(thisPtr->%s, value);\n", property.accessor.constData(), property.storage.constData(), property.accessor.constData());
- else
- fprintf(out, " thisPtr->%s->%s.setValue(value);\n", property.accessor.constData(), property.storage.constData());
- } else {
- fprintf(out, " if (auto *target = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData());
- if (isNotifiedProperty)
- fprintf(out, " target->setValue(thisPtr->%s, value);\n", property.accessor.constData());
- else
- fprintf(out, " target->setValue(value);\n");
- }
- fprintf(out, "}\n");
-
- // property value move setter
- fprintf(out, "\nvoid %s::_qt_property_api_%s::setValue(%s &&value)\n{\n",
- cdef->qualified.constData(),
- property.name.constData(),
- property.type.name.constData());
- printAccessor();
- if (stored) {
- if (isNotifiedProperty)
- fprintf(out, " thisPtr->%s->%s.setValue(thisPtr->%s, std::move(value));\n", property.accessor.constData(), property.storage.constData(), property.accessor.constData());
- else
- fprintf(out, " thisPtr->%s->%s.setValue(std::move(value));\n", property.accessor.constData(), property.storage.constData());
- } else {
- fprintf(out, " if (auto *target = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData());
- if (isNotifiedProperty)
- fprintf(out, " target->setValue(thisPtr->%s, std::move(value));\n", property.accessor.constData());
- else
- fprintf(out, " target->setValue(std::move(value));\n");
- }
- fprintf(out, "}\n");
-
- // binding setter
- fprintf(out, "\nQPropertyBinding<%s> %s::_qt_property_api_%s::setBinding(const QPropertyBinding<%s> &binding)\n{\n",
- property.type.name.constData(),
- cdef->qualified.constData(),
- property.name.constData(),
- property.type.name.constData());
- printAccessor();
- if (stored) {
- if (isNotifiedProperty)
- fprintf(out, " return thisPtr->%s->%s.setBinding(thisPtr->%s, binding);\n", property.accessor.constData(), property.storage.constData(), property.accessor.constData());
- else
- fprintf(out, " return thisPtr->%s->%s.setBinding(binding);\n", property.accessor.constData(), property.storage.constData());
- } else {
- fprintf(out, " if (auto *target = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData());
- if (isNotifiedProperty)
- fprintf(out, " return target->setBinding(thisPtr->%s, binding);\n", property.accessor.constData());
- else
- fprintf(out, " return target->setBinding(binding);\n");
- fprintf(out, " else\n");
- fprintf(out, " return QPropertyBinding<%s>();\n", property.type.name.constData());
- }
- fprintf(out, "}\n");
-
- // binding move setter
- fprintf(out, "\nQPropertyBinding<%s> %s::_qt_property_api_%s::setBinding(QPropertyBinding<%s> &&binding)\n{\n",
- property.type.name.constData(),
- cdef->qualified.constData(),
- property.name.constData(),
- property.type.name.constData());
- printAccessor();
- if (stored) {
- if (isNotifiedProperty)
- fprintf(out, " return thisPtr->%s->%s.setBinding(thisPtr->%s, std::move(binding));\n", property.accessor.constData(), property.storage.constData(), property.accessor.constData());
- else
- fprintf(out, " return thisPtr->%s->%s.setBinding(std::move(binding));\n", property.accessor.constData(), property.storage.constData());
- } else {
- fprintf(out, " if (auto *target = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData());
- if (isNotifiedProperty)
- fprintf(out, " return target->setBinding(thisPtr->%s, std::move(binding));\n", property.accessor.constData());
- else
- fprintf(out, " return target->setBinding(std::move(binding));\n");
- fprintf(out, " else\n");
- fprintf(out, " return QPropertyBinding<%s>();\n", property.type.name.constData());
- }
- fprintf(out, "}\n");
-
- // untyped binding setter
- fprintf(out, "\nbool %s::_qt_property_api_%s::setBinding(const QUntypedPropertyBinding &binding)\n{\n",
- cdef->qualified.constData(),
- property.name.constData());
- printAccessor();
- if (stored) {
- if (isNotifiedProperty)
- fprintf(out, " return thisPtr->%s->%s.setBinding(thisPtr->%s, binding);\n", property.accessor.constData(), property.storage.constData(), property.accessor.constData());
- else
- fprintf(out, " return thisPtr->%s->%s.setBinding(binding);\n", property.accessor.constData(), property.storage.constData());
- } else {
- fprintf(out, " if (auto *target = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData());
- if (isNotifiedProperty)
- fprintf(out, " return target->setBinding(thisPtr->%s, binding);\n", property.accessor.constData());
- else
- fprintf(out, " return target->setBinding(binding);\n");
- fprintf(out, " else\n");
- fprintf(out, " return false;\n");
- }
-
- fprintf(out, "}\n");
-
- // binding bool getter
- fprintf(out, "\nbool %s::_qt_property_api_%s::hasBinding() const\n{\n",
- cdef->qualified.constData(),
- property.name.constData());
- printAccessor(/*const*/true);
- if (stored) {
- fprintf(out, " return thisPtr->%s->%s.hasBinding();\n", property.accessor.constData(), property.storage.constData());
- } else {
- fprintf(out, " if (auto *source = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData());
- fprintf(out, " return source->hasBinding();\n");
- fprintf(out, " else\n");
- fprintf(out, " return false;\n");
- }
- fprintf(out, "}\n");
-
- // binding getter
- fprintf(out, "\nQPropertyBinding<%s> %s::_qt_property_api_%s::binding() const\n{\n",
- property.type.name.constData(),
- cdef->qualified.constData(),
- property.name.constData());
- printAccessor(/*const*/true);
- if (stored) {
- fprintf(out, " return thisPtr->%s->%s.binding();\n", property.accessor.constData(), property.storage.constData());
- } else {
- fprintf(out, " if (auto *source = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData());
- fprintf(out, " return source->binding();\n");
- fprintf(out, " else\n");
- fprintf(out, " return QPropertyBinding<%s>();\n", property.type.name.constData());
- }
- fprintf(out, "}\n");
-
- // binding taker
- fprintf(out, "\nQPropertyBinding<%s> %s::_qt_property_api_%s::takeBinding()\n{\n",
- property.type.name.constData(),
- cdef->qualified.constData(),
- property.name.constData());
- printAccessor();
- if (stored) {
- fprintf(out, " return thisPtr->%s->%s.takeBinding();\n", property.accessor.constData(), property.storage.constData());
- } else {
- fprintf(out, " if (auto *source = thisPtr->%s->%s)\n", property.accessor.constData(), property.storage.constData());
- fprintf(out, " return source->takeBinding();\n");
- fprintf(out, " else\n");
- fprintf(out, " return QPropertyBinding<%s>();\n", property.type.name.constData());
- }
- fprintf(out, "}\n");
-
- // property setter function
- fprintf(out, "\nvoid %s::%s(%s const& value)\n{\n",
- cdef->qualified.constData(),
- property.setter.constData(),
- property.type.name.constData());
- fprintf(out, " this->%s.setValue(value);\n", property.name.constData());
- fprintf(out, "}\n\n");
- }
-}
-
static CborError jsonValueToCbor(CborEncoder *parent, const QJsonValue &v);
static CborError jsonObjectToCbor(CborEncoder *parent, const QJsonObject &o)
{
diff --git a/src/tools/moc/generator.h b/src/tools/moc/generator.h
index a9bf229c71..35128cb543 100644
--- a/src/tools/moc/generator.h
+++ b/src/tools/moc/generator.h
@@ -63,7 +63,6 @@ private:
void generateMetacall();
void generateStaticMetacall();
void generateSignal(FunctionDef *def, int index);
- void generateQPropertyApi();
void generatePluginMetaData();
QMultiMap<QByteArray, int> automaticPropertyMetaTypesHelper();
QMap<int, QMultiMap<QByteArray, int>>
diff --git a/src/tools/moc/keywords.cpp b/src/tools/moc/keywords.cpp
index 6a56d2cea5..cc7d747f5b 100644
--- a/src/tools/moc/keywords.cpp
+++ b/src/tools/moc/keywords.cpp
@@ -30,12 +30,12 @@
// DO NOT EDIT.
static const short keyword_trans[][128] = {
- {0,0,0,0,0,0,0,0,0,588,585,0,0,0,0,0,
+ {0,0,0,0,0,0,0,0,0,579,576,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 588,252,586,589,8,38,239,587,25,26,236,234,30,235,27,237,
+ 579,252,577,580,8,38,239,578,25,26,236,234,30,235,27,237,
22,22,22,22,22,22,22,22,22,22,34,41,23,39,24,43,
0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
- 8,21,8,8,8,8,8,8,8,8,8,31,591,32,238,8,
+ 8,21,8,8,8,8,8,8,8,8,8,31,582,32,238,8,
0,1,2,3,4,5,6,7,8,9,8,8,10,11,12,13,
14,8,15,16,17,18,19,20,8,8,8,36,245,37,248,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -177,7 +177,7 @@ static const short keyword_trans[][128] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,42,0,0,0,28,0,
- 594,594,594,594,594,594,594,594,594,594,0,0,0,0,0,0,
+ 585,585,585,585,585,585,585,585,585,585,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -336,7 +336,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,593,0,0,0,0,592,
+ 0,0,0,0,0,0,0,0,0,0,584,0,0,0,0,583,
0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -378,8 +378,8 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,475,424,408,416,380,0,484,0,0,0,574,364,358,
- 386,0,566,472,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,475,424,408,416,380,0,484,0,0,0,565,364,358,
+ 386,0,557,472,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -443,7 +443,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 549,557,0,517,0,0,0,0,0,0,0,0,0,0,0,0,
+ 549,0,0,517,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
@@ -1013,39 +1013,30 @@ static const struct
{CHARACTER, 0, 84, 555, CHARACTER},
{CHARACTER, 0, 89, 556, CHARACTER},
{Q_PRIVATE_PROPERTY_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 80, 558, CHARACTER},
- {CHARACTER, 0, 82, 559, CHARACTER},
- {CHARACTER, 0, 79, 560, CHARACTER},
- {CHARACTER, 0, 80, 561, CHARACTER},
- {CHARACTER, 0, 69, 562, CHARACTER},
- {CHARACTER, 0, 82, 563, CHARACTER},
- {CHARACTER, 0, 84, 564, CHARACTER},
- {CHARACTER, 0, 89, 565, CHARACTER},
- {Q_PRIVATE_QPROPERTY_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 69, 567, CHARACTER},
- {CHARACTER, 0, 86, 568, CHARACTER},
- {CHARACTER, 0, 73, 569, CHARACTER},
- {CHARACTER, 0, 83, 570, CHARACTER},
- {CHARACTER, 0, 73, 571, CHARACTER},
- {CHARACTER, 0, 79, 572, CHARACTER},
- {CHARACTER, 0, 78, 573, CHARACTER},
+ {CHARACTER, 0, 69, 558, CHARACTER},
+ {CHARACTER, 0, 86, 559, CHARACTER},
+ {CHARACTER, 0, 73, 560, CHARACTER},
+ {CHARACTER, 0, 83, 561, CHARACTER},
+ {CHARACTER, 0, 73, 562, CHARACTER},
+ {CHARACTER, 0, 79, 563, CHARACTER},
+ {CHARACTER, 0, 78, 564, CHARACTER},
{Q_REVISION_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 79, 575, CHARACTER},
- {CHARACTER, 0, 67, 576, CHARACTER},
- {CHARACTER, 0, 95, 577, CHARACTER},
- {CHARACTER, 0, 73, 578, CHARACTER},
- {CHARACTER, 0, 78, 579, CHARACTER},
- {CHARACTER, 0, 67, 580, CHARACTER},
- {CHARACTER, 0, 76, 581, CHARACTER},
- {CHARACTER, 0, 85, 582, CHARACTER},
- {CHARACTER, 0, 68, 583, CHARACTER},
- {CHARACTER, 0, 69, 584, CHARACTER},
+ {CHARACTER, 0, 79, 566, CHARACTER},
+ {CHARACTER, 0, 67, 567, CHARACTER},
+ {CHARACTER, 0, 95, 568, CHARACTER},
+ {CHARACTER, 0, 73, 569, CHARACTER},
+ {CHARACTER, 0, 78, 570, CHARACTER},
+ {CHARACTER, 0, 67, 571, CHARACTER},
+ {CHARACTER, 0, 76, 572, CHARACTER},
+ {CHARACTER, 0, 85, 573, CHARACTER},
+ {CHARACTER, 0, 68, 574, CHARACTER},
+ {CHARACTER, 0, 69, 575, CHARACTER},
{Q_MOC_INCLUDE_TOKEN, 0, 0, 0, CHARACTER},
{NEWLINE, 0, 0, 0, NOTOKEN},
{QUOTE, 0, 0, 0, NOTOKEN},
{SINGLEQUOTE, 0, 0, 0, NOTOKEN},
{WHITESPACE, 0, 0, 0, NOTOKEN},
- {HASH, 0, 35, 590, HASH},
+ {HASH, 0, 35, 581, HASH},
{PP_HASHHASH, 0, 0, 0, NOTOKEN},
{BACKSLASH, 0, 0, 0, NOTOKEN},
{CPP_COMMENT, 0, 0, 0, NOTOKEN},
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp
index 84eb751bee..1a20d32d7c 100644
--- a/src/tools/moc/moc.cpp
+++ b/src/tools/moc/moc.cpp
@@ -576,35 +576,6 @@ bool Moc::parseMaybeFunction(const ClassDef *cdef, FunctionDef *def)
}
-// Try to parse QProperty<MyType> propertName; members
-bool Moc::parseMaybeQProperty(ClassDef *def)
-{
- if (!test(IDENTIFIER))
- return false;
-
- bool hasNotifier = false;
- if (lexem() == "QNotifiedProperty") {
- hasNotifier = true;
- } else if (lexem() != "QProperty") {
- return false;
- }
-
- if (!test(LANGLE))
- return false;
-
- until(RANGLE);
-
- next();
- const auto propName = lexem();
-
- if (!test(SEMIC))
- return false;
-
- def->qPropertyMembersMaybeWithNotifier.insert(propName, hasNotifier);
-
- return true;
-}
-
void Moc::parse()
{
QList<NamespaceDef> namespaceList;
@@ -893,9 +864,6 @@ void Moc::parse()
case Q_PRIVATE_PROPERTY_TOKEN:
parsePrivateProperty(&def);
break;
- case Q_PRIVATE_QPROPERTY_TOKEN:
- parsePrivateQProperty(&def);
- break;
case ENUM: {
EnumDef enumDef;
if (parseEnum(&enumDef))
@@ -953,9 +921,7 @@ void Moc::parse()
}
}
} else {
- index = rewind - 1;
- if (!parseMaybeQProperty(&def))
- index = rewind;
+ index = rewind;
}
}
}
@@ -1055,8 +1021,8 @@ static QByteArrayList requiredQtContainers(const QList<ClassDef> &classes)
const QByteArray pattern = candidate + '<';
for (const auto &c : classes) {
- if (!c.privateQProperties.isEmpty())
- needsQProperty = true;
+ for (const auto &p : c.propertyList)
+ needsQProperty |= p.isQProperty;
if (any_type_contains(c.propertyList, pattern) ||
any_arg_contains(c.slotList, pattern) ||
any_arg_contains(c.signalList, pattern) ||
@@ -1385,19 +1351,8 @@ void Moc::parsePropertyAttributes(PropertyDef &propDef)
checkIsFunction(propDef.designable, "DESIGNABLE");
break;
case 'N': if (l != "NOTIFY") error(2);
- if (v == "false") {
- if (!propDef.isQProperty)
- error(1);
- propDef.isQPropertyWithNotifier = false;
- break;
- } else if (v == "true") {
- if (!propDef.isQProperty)
- error(1);
- break;
- } else {
- propDef.notify = v;
- break;
- }
+ propDef.notify = v;
+ break;
case 'U': if (l != "USER") error(2);
propDef.user = v + v2;
checkIsFunction(propDef.user, "USER");
@@ -1494,19 +1449,19 @@ void Moc::parsePluginData(ClassDef *def)
QByteArray Moc::parsePropertyAccessor()
{
- next(IDENTIFIER);
- QByteArray accessor = lexem();
- while (test(SCOPE)) {
- accessor += lexem();
- next(IDENTIFIER);
+ int nesting = 0;
+ QByteArray accessor;
+ while (1) {
+ Token t = peek();
+ if (!nesting && (t == RPAREN || t == COMMA))
+ break;
+ t = next();
+ if (t == LPAREN)
+ ++nesting;
+ if (t == RPAREN)
+ --nesting;
accessor += lexem();
}
- // also allow void functions
- if (test(LPAREN)) {
- next(RPAREN);
- accessor += "()";
- }
-
return accessor;
}
@@ -1523,48 +1478,6 @@ void Moc::parsePrivateProperty(ClassDef *def)
def->propertyList += propDef;
}
-void Moc::parsePrivateQProperty(ClassDef *def)
-{
- next(LPAREN);
- const QByteArray accessor = parsePropertyAccessor();
- next(COMMA);
- const Type type = parseType();
- next(COMMA);
- next(IDENTIFIER);
- const QByteArray name = lexem();
- next(COMMA);
- next(IDENTIFIER);
- const QByteArray setter = lexem();
-
- PropertyDef propDef;
- propDef.name = name;
- propDef.type = type.name;
- propDef.isQProperty = true;
- propDef.isQPropertyWithNotifier = true;
- propDef.inPrivateClass = accessor;
- propDef.designable = propDef.scriptable = propDef.stored = "true";
- propDef.user = "false";
-
- if (test(COMMA))
- parsePropertyAttributes(propDef);
-
- const bool stored = propDef.stored == "true";
- propDef.qpropertyname = stored ? name : (name + "()");
-
- def->privateQProperties += PrivateQPropertyDef {
- type, name, setter, accessor, propDef.qpropertyname, propDef.isQPropertyWithNotifier
- };
-
- if (propDef.read.isEmpty())
- propDef.read = propDef.qpropertyname + (stored ? ".value" : "->value");
- if (propDef.write.isEmpty())
- propDef.write = propDef.qpropertyname + (stored ? ".setValue" : "->setValue");
-
- next(RPAREN);
-
- def->propertyList += propDef;
-}
-
void Moc::parseEnumOrFlag(BaseDef *def, bool isFlag)
{
next(LPAREN);
@@ -1895,33 +1808,19 @@ void Moc::checkProperties(ClassDef *cdef)
warning(msg.constData());
}
- if (p.read.isEmpty() && p.member.isEmpty()) {
-
- auto qPropertyMemberIt = cdef->qPropertyMembersMaybeWithNotifier.constFind(p.name);
- const bool knownQPropertyMember = qPropertyMemberIt != cdef->qPropertyMembersMaybeWithNotifier.constEnd();
- if (!knownQPropertyMember && !p.isQProperty) {
- const int rewind = index;
- if (p.location >= 0)
- index = p.location;
- QByteArray msg = "Property declaration " + p.name + " has neither an associated QProperty<> member"
- ", nor a READ accessor function nor an associated MEMBER variable. The property will be invalid.";
- warning(msg.constData());
- index = rewind;
- if (p.write.isEmpty()) {
- cdef->propertyList.removeAt(i);
- --i;
- }
- continue;
+ if (p.read.isEmpty() && p.member.isEmpty() && !p.isQProperty) {
+ const int rewind = index;
+ if (p.location >= 0)
+ index = p.location;
+ QByteArray msg = "Property declaration " + p.name + " has neither an associated QProperty<> member"
+ ", nor a READ accessor function nor an associated MEMBER variable. The property will be invalid.";
+ warning(msg.constData());
+ index = rewind;
+ if (p.write.isEmpty()) {
+ cdef->propertyList.removeAt(i);
+ --i;
}
- const bool stored = p.stored == "true";
- p.qpropertyname = stored ? p.name : (p.name + "()");
- p.read = p.qpropertyname + (stored ? ".value" : "->value");
- p.write = p.qpropertyname + (stored ? ".setValue" : "->setValue");;
- p.isQProperty = true;
- const bool hasNotifier = knownQPropertyMember && qPropertyMemberIt.value();
- p.isQPropertyWithNotifier = hasNotifier;
- p.designable = p.scriptable = p.stored = "true";
- p.user = "false";
+ continue;
}
for (int j = 0; j < cdef->publicList.count(); ++j) {
diff --git a/src/tools/moc/moc.h b/src/tools/moc/moc.h
index 487e04e081..def5a8e82d 100644
--- a/src/tools/moc/moc.h
+++ b/src/tools/moc/moc.h
@@ -132,7 +132,7 @@ struct PropertyDef
return (s == write);
}
- QByteArray name, type, member, read, write, reset, designable, scriptable, stored, user, notify, inPrivateClass, qpropertyname;
+ QByteArray name, type, member, read, write, reset, designable, scriptable, stored, user, notify, inPrivateClass;
int notifyId = -1; // -1 means no notifyId, >= 0 means signal defined in this class, < -1 means signal not defined in this class
enum Specification { ValueSpec, ReferenceSpec, PointerSpec };
Specification gspec = ValueSpec;
@@ -141,7 +141,6 @@ struct PropertyDef
bool final = false;
bool required = false;
bool isQProperty = false;
- bool isQPropertyWithNotifier = false;
int location = -1; // token index, used for error reporting
@@ -156,7 +155,6 @@ struct PrivateQPropertyDef
QByteArray setter;
QByteArray accessor;
QByteArray storage;
- bool isNotifiedProperty;
};
Q_DECLARE_TYPEINFO(PrivateQPropertyDef, Q_MOVABLE_TYPE);
@@ -202,8 +200,6 @@ struct ClassDef : BaseDef {
QList<FunctionDef> signalList, slotList, methodList, publicList;
QList<QByteArray> nonClassSignalList;
QList<PropertyDef> propertyList;
- QList<PrivateQPropertyDef> privateQProperties;
- QHash<QByteArray, bool> qPropertyMembersMaybeWithNotifier;
int revisionedMethods = 0;
bool hasQObject = false;
@@ -262,7 +258,6 @@ public:
bool parseFunction(FunctionDef *def, bool inMacro = false);
bool parseMaybeFunction(const ClassDef *cdef, FunctionDef *def);
- bool parseMaybeQProperty(ClassDef *def);
void parseSlots(ClassDef *def, FunctionDef::Access access);
void parseSignals(ClassDef *def);
@@ -280,7 +275,6 @@ public:
void parseSlotInPrivate(ClassDef *def, FunctionDef::Access access);
QByteArray parsePropertyAccessor();
void parsePrivateProperty(ClassDef *def);
- void parsePrivateQProperty(ClassDef *def);
void parseFunctionArguments(FunctionDef *def);
diff --git a/src/tools/moc/parser.h b/src/tools/moc/parser.h
index 63f4cf0d9a..f014d7e6b5 100644
--- a/src/tools/moc/parser.h
+++ b/src/tools/moc/parser.h
@@ -57,6 +57,7 @@ public:
inline bool hasNext() const { return (index < symbols.size()); }
inline Token next() { if (index >= symbols.size()) return NOTOKEN; return symbols.at(index++).token; }
+ inline Token peek() { if (index >= symbols.size()) return NOTOKEN; return symbols.at(index).token; }
bool test(Token);
void next(Token);
void next(Token, const char *msg);
diff --git a/src/tools/moc/token.h b/src/tools/moc/token.h
index 0b6e9c4f7c..c11ec6a38c 100644
--- a/src/tools/moc/token.h
+++ b/src/tools/moc/token.h
@@ -178,7 +178,6 @@ QT_BEGIN_NAMESPACE
F(Q_INVOKABLE_TOKEN) \
F(Q_SCRIPTABLE_TOKEN) \
F(Q_PRIVATE_PROPERTY_TOKEN) \
- F(Q_PRIVATE_QPROPERTY_TOKEN) \
F(Q_REVISION_TOKEN) \
F(Q_MOC_INCLUDE_TOKEN) \
F(SPECIAL_TREATMENT_MARK) \
diff --git a/src/tools/moc/util/generate_keywords.cpp b/src/tools/moc/util/generate_keywords.cpp
index 02a36c5000..c2cfe37fab 100644
--- a/src/tools/moc/util/generate_keywords.cpp
+++ b/src/tools/moc/util/generate_keywords.cpp
@@ -242,7 +242,6 @@ static const Keyword keywords[] = {
{ "Q_SLOT", "Q_SLOT_TOKEN" },
{ "Q_SCRIPTABLE", "Q_SCRIPTABLE_TOKEN" },
{ "Q_PRIVATE_PROPERTY", "Q_PRIVATE_PROPERTY_TOKEN" },
- { "Q_PRIVATE_QPROPERTY", "Q_PRIVATE_QPROPERTY_TOKEN" },
{ "Q_REVISION", "Q_REVISION_TOKEN" },
{ "Q_MOC_INCLUDE", "Q_MOC_INCLUDE_TOKEN" },
{ "\n", "NEWLINE" },