summaryrefslogtreecommitdiffstats
path: root/src/tools/moc/generator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/moc/generator.cpp')
-rw-r--r--src/tools/moc/generator.cpp44
1 files changed, 28 insertions, 16 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp
index b60b65d5fb5..1c3e529e531 100644
--- a/src/tools/moc/generator.cpp
+++ b/src/tools/moc/generator.cpp
@@ -628,11 +628,11 @@ void Generator::addFunctions(const QList<FunctionDef> &list, const char *functyp
if (f.isConstructor)
fprintf(out, "Constructor(");
else
- fprintf(out, "%s(", f.type.name.constData()); // return type
+ fprintf(out, "%s(", disambiguatedTypeName(f.type.name).constData()); // return type
const char *comma = "";
for (const auto &argument : f.arguments) {
- fprintf(out, "%s%s", comma, argument.type.name.constData());
+ fprintf(out, "%s%s", comma, disambiguatedTypeName(argument.type.name).constData());
comma = ", ";
}
@@ -725,7 +725,7 @@ void Generator::addProperties()
for (const PropertyDef &p : std::as_const(cdef->propertyList)) {
fprintf(out, " // property '%s'\n"
" QtMocHelpers::PropertyData<%s%s>(%d, ",
- p.name.constData(), cxxTypeTag(p.typeTag), p.type.constData(), stridx(p.name));
+ p.name.constData(), cxxTypeTag(p.typeTag), disambiguatedTypeName(p.type).constData(), stridx(p.name));
generateTypeInfo(p.type);
fputc(',', out);
@@ -810,7 +810,7 @@ void Generator::addEnums()
fprintf(out, " // %s '%s'\n"
" QtMocHelpers::EnumData<%s>(%d, %d,",
e.flags & EnumIsFlag ? "flag" : "enum", e.name.constData(),
- e.name.constData(), stridx(e.name), stridx(typeName));
+ disambiguatedTypeName(e.name).constData(), stridx(e.name), stridx(typeName));
if (e.flags) {
const char *separator = "";
@@ -959,7 +959,7 @@ void Generator::generateStaticMetacall()
if (it != begin)
fprintf(out, ",");
fprintf(out, "(*reinterpret_cast<%s>(_a[%d]))",
- a.typeNameForCast.constData(), offset++);
+ disambiguatedTypeNameForCast(a.normalizedType).constData(), offset++);
}
};
@@ -1006,7 +1006,7 @@ void Generator::generateStaticMetacall()
Q_ASSERT(!f.normalizedType.isEmpty());
fprintf(out, " case %d: ", methodindex);
if (f.normalizedType != "void")
- fprintf(out, "{ %s _r = ", noRef(f.normalizedType).constData());
+ fprintf(out, "{ %s _r = ", disambiguatedTypeName(noRef(f.normalizedType)).constData());
fprintf(out, "_t->");
if (f.inPrivateClass.size())
fprintf(out, "%s->", f.inPrivateClass.constData());
@@ -1023,7 +1023,7 @@ void Generator::generateStaticMetacall()
const ArgumentDef &a = *it;
if (it != begin)
fprintf(out, ",");
- fprintf(out, "(*reinterpret_cast< %s>(_a[%d]))",a.typeNameForCast.constData(), offset++);
+ fprintf(out, "(*reinterpret_cast< %s>(_a[%d]))", disambiguatedTypeNameForCast(a.normalizedType).constData(), offset++);
usedArgs |= UsedA;
}
if (f.isPrivateSignal) {
@@ -1035,7 +1035,7 @@ void Generator::generateStaticMetacall()
fprintf(out, ");");
if (f.normalizedType != "void") {
fprintf(out, "\n if (_a[0]) *reinterpret_cast< %s*>(_a[0]) = std::move(_r); } ",
- noRef(f.normalizedType).constData());
+ disambiguatedTypeName(noRef(f.normalizedType)).constData());
usedArgs |= UsedA;
}
fprintf(out, " break;\n");
@@ -1169,19 +1169,19 @@ void Generator::generateStaticMetacall()
#if QT_VERSION <= QT_VERSION_CHECK(7, 0, 0)
else if (auto eflags = cdef->enumDeclarations.value(p.type); eflags & EnumIsFlag)
fprintf(out, " case %d: QtMocHelpers::assignFlags<%s>(_v, %s%s()); break;\n",
- propindex, p.type.constData(), prefix.constData(), p.read.constData());
+ propindex, disambiguatedTypeName(p.type).constData(), prefix.constData(), p.read.constData());
#endif
else if (p.read == "default")
fprintf(out, " case %d: *reinterpret_cast<%s%s*>(_v) = %s%s().value(); break;\n",
- propindex, cxxTypeTag(p.typeTag), p.type.constData(),
+ propindex, cxxTypeTag(p.typeTag), disambiguatedTypeName(p.type).constData(),
prefix.constData(), p.bind.constData());
else if (!p.read.isEmpty())
fprintf(out, " case %d: *reinterpret_cast<%s%s*>(_v) = %s%s(); break;\n",
- propindex, cxxTypeTag(p.typeTag), p.type.constData(),
+ propindex, cxxTypeTag(p.typeTag), disambiguatedTypeName(p.type).constData(),
prefix.constData(), p.read.constData());
else
fprintf(out, " case %d: *reinterpret_cast<%s%s*>(_v) = %s%s; break;\n",
- propindex, cxxTypeTag(p.typeTag), p.type.constData(),
+ propindex, cxxTypeTag(p.typeTag), disambiguatedTypeName(p.type).constData(),
prefix.constData(), p.member.constData());
}
fprintf(out, " default: break;\n");
@@ -1206,21 +1206,21 @@ void Generator::generateStaticMetacall()
if (p.write == "default") {
fprintf(out, " case %d: {\n", propindex);
fprintf(out, " %s%s().setValue(*reinterpret_cast<%s%s*>(_v));\n",
- prefix.constData(), p.bind.constData(), cxxTypeTag(p.typeTag), p.type.constData());
+ prefix.constData(), p.bind.constData(), cxxTypeTag(p.typeTag), disambiguatedTypeName(p.type).constData());
fprintf(out, " break;\n");
fprintf(out, " }\n");
} else if (!p.write.isEmpty()) {
fprintf(out, " case %d: %s%s(*reinterpret_cast<%s%s*>(_v)); break;\n",
propindex, prefix.constData(), p.write.constData(),
- cxxTypeTag(p.typeTag), p.type.constData());
+ cxxTypeTag(p.typeTag), disambiguatedTypeName(p.type).constData());
} else {
fprintf(out, " case %d:", propindex);
if (p.notify.isEmpty()) {
fprintf(out, " QtMocHelpers::setProperty(%s%s, *reinterpret_cast<%s%s*>(_v)); break;\n",
- prefix.constData(), p.member.constData(), cxxTypeTag(p.typeTag), p.type.constData());
+ prefix.constData(), p.member.constData(), cxxTypeTag(p.typeTag), disambiguatedTypeName(p.type).constData());
} else {
fprintf(out, "\n if (QtMocHelpers::setProperty(%s%s, *reinterpret_cast<%s%s*>(_v)))\n",
- prefix.constData(), p.member.constData(), cxxTypeTag(p.typeTag), p.type.constData());
+ prefix.constData(), p.member.constData(), cxxTypeTag(p.typeTag), disambiguatedTypeName(p.type).constData());
fprintf(out, " Q_EMIT _t->%s(", p.notify.constData());
if (p.notifyId > -1) {
const FunctionDef &f = cdef->signalList.at(p.notifyId);
@@ -1483,6 +1483,18 @@ void Generator::generatePluginMetaData()
fputs("\n", out);
}
+QByteArray Generator::disambiguatedTypeName(const QByteArray &name)
+{
+ if (cdef->allEnumNames.contains(name))
+ return "enum " + name;
+ return name;
+}
+
+QByteArray Generator::disambiguatedTypeNameForCast(const QByteArray &name)
+{
+ return QByteArray("std::add_pointer_t<"+ disambiguatedTypeName(name) +">");
+}
+
QT_WARNING_DISABLE_GCC("-Wunused-function")
QT_WARNING_DISABLE_CLANG("-Wunused-function")
QT_WARNING_DISABLE_CLANG("-Wundefined-internal")