diff options
author | Thiago Macieira <[email protected]> | 2024-09-10 08:02:23 -0700 |
---|---|---|
committer | Thiago Macieira <[email protected]> | 2024-11-12 17:14:50 -0800 |
commit | 9ba20b9dc48e42a042bda8373f9197b51be96c60 (patch) | |
tree | 043904903ab03868c4030a191d46aa6eb289a52b /src/tools/moc/generator.cpp | |
parent | adac50fbcaf76fbe5575dc677651e839a232f455 (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.cpp | 17 |
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"); |