summaryrefslogtreecommitdiffstats
path: root/src/tools/moc/generator.cpp
diff options
context:
space:
mode:
authorThiago Macieira <[email protected]>2024-09-10 08:02:23 -0700
committerThiago Macieira <[email protected]>2024-11-12 17:14:50 -0800
commit9ba20b9dc48e42a042bda8373f9197b51be96c60 (patch)
tree043904903ab03868c4030a191d46aa6eb289a52b /src/tools/moc/generator.cpp
parentadac50fbcaf76fbe5575dc677651e839a232f455 (diff)
moc: simplify signal emission with a helper in QMetaObject
This moves the ugliness of the reinterpret and const casts to the helper function. From: void QObject::objectNameChanged(const QString & _t1, QPrivateSignal _t2) { void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t2))) }; QMetaObject::activate(this, &staticMetaObject, 2, _a); } To: void QObject::objectNameChanged(const QString & _t1, QPrivateSignal _t2) { QMetaObject::activate<void>(this, &staticMetaObject, 2, nullptr, _t1, _t2); } The overloads are disambiguated by the use of explicit template parameter syntax. Note that zero-parameter void-returning signals remain as they were. Change-Id: I7b9d1870a8c80a49d207fffd00f79c6d9672cb54 Reviewed-by: Ahmad Samir <[email protected]> Reviewed-by: Fabian Kosmale <[email protected]> Reviewed-by: Thiago Macieira <[email protected]>
Diffstat (limited to 'src/tools/moc/generator.cpp')
-rw-r--r--src/tools/moc/generator.cpp17
1 files changed, 6 insertions, 11 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp
index ce3360aedc7..896a52b561e 100644
--- a/src/tools/moc/generator.cpp
+++ b/src/tools/moc/generator.cpp
@@ -1314,23 +1314,18 @@ void Generator::generateSignal(const FunctionDef *def, int index)
fprintf(out, " %s _t0{};\n", returnType.constData());
}
- fprintf(out, " void *_a[] = { ");
+ fprintf(out, " QMetaObject::activate<%s>(%s, &staticMetaObject, %d, ",
+ def->normalizedType.constData(), thisPtr.constData(), index);
if (def->normalizedType == "void") {
fprintf(out, "nullptr");
} else {
- if (def->returnTypeIsVolatile)
- fprintf(out, "const_cast<void*>(reinterpret_cast<const volatile void*>(std::addressof(_t0)))");
- else
- fprintf(out, "const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t0)))");
+ fprintf(out, "std::addressof(_t0)");
}
int i;
for (i = 1; i < offset; ++i)
- if (i <= def->arguments.size() && def->arguments.at(i - 1).type.isVolatile)
- fprintf(out, ", const_cast<void*>(reinterpret_cast<const volatile void*>(std::addressof(_t%d)))", i);
- else
- fprintf(out, ", const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t%d)))", i);
- fprintf(out, " };\n");
- fprintf(out, " QMetaObject::activate(%s, &staticMetaObject, %d, _a);\n", thisPtr.constData(), index);
+ fprintf(out, ", _t%d", i);
+ fprintf(out, ");\n");
+
if (def->normalizedType != "void")
fprintf(out, " return _t0;\n");
fprintf(out, "}\n");