diff options
| author | Ahmad Samir <a.samirh78@gmail.com> | 2025-05-31 21:09:53 +0300 |
|---|---|---|
| committer | Ahmad Samir <a.samirh78@gmail.com> | 2025-09-08 03:36:44 +0300 |
| commit | 285adfd59cc290d0bfd36d32a9802c8b9b9086c8 (patch) | |
| tree | d6295fbeb4ad0c5086d1e42a4f8ad50ca77dd52f /src/corelib/kernel/qobject.cpp | |
| parent | c119f9ce0622ee645199bb5bdc87a1b7931ea167 (diff) | |
QMetaObjectPrivate: calculate the length of a `const char *` once
Port QMetaObjectPrivate::decodeMethodSignature() to QByteArrayView.
Add QMetaObjectPrivate::normalizedSignature() that takes a QBAV,
QObject::connect() can use that until the QMetaObject public API methods
are ported.
Change-Id: I180e84f499faad4a200333128c9e0971d8c4ff98
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/kernel/qobject.cpp')
| -rw-r--r-- | src/corelib/kernel/qobject.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 7e5078bf58c..a10c4258f53 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -3060,18 +3060,19 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign const QMetaObject *smeta = sender->metaObject(); const char *signal_arg = signal; ++signal; // skip code + QByteArrayView signalView{signal}; // after skipping code QArgumentTypeArray signalTypes; Q_ASSERT(QMetaObjectPrivate::get(smeta)->revision >= 7); - QByteArrayView signalName = QMetaObjectPrivate::decodeMethodSignature(signal, signalTypes); + QByteArrayView signalName = QMetaObjectPrivate::decodeMethodSignature(signalView, signalTypes); int signal_index = QMetaObjectPrivate::indexOfSignalRelative( &smeta, signalName, signalTypes.size(), signalTypes.constData()); if (signal_index < 0) { // check for normalized signatures - pinnedSignal = QMetaObject::normalizedSignature(signal); - signal = pinnedSignal.constData(); + pinnedSignal = QMetaObjectPrivate::normalizedSignature(signalView); + signalView = pinnedSignal; signalTypes.clear(); - signalName = QMetaObjectPrivate::decodeMethodSignature(signal, signalTypes); + signalName = QMetaObjectPrivate::decodeMethodSignature(signalView, signalTypes); smeta = sender->metaObject(); signal_index = QMetaObjectPrivate::indexOfSignalRelative( &smeta, signalName, signalTypes.size(), signalTypes.constData()); @@ -3087,9 +3088,10 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign QByteArray pinnedMethod; const char *method_arg = method; ++method; // skip code + QByteArrayView methodView{method}; // after skipping code QArgumentTypeArray methodTypes; - QByteArrayView methodName = QMetaObjectPrivate::decodeMethodSignature(method, methodTypes); + QByteArrayView methodName = QMetaObjectPrivate::decodeMethodSignature(methodView, methodTypes); const QMetaObject *rmeta = receiver->metaObject(); int method_index_relative = -1; Q_ASSERT(QMetaObjectPrivate::get(rmeta)->revision >= 7); @@ -3105,11 +3107,11 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign } if (method_index_relative < 0) { // check for normalized methods - pinnedMethod = QMetaObject::normalizedSignature(method); - method = pinnedMethod.constData(); + pinnedMethod = QMetaObjectPrivate::normalizedSignature(methodView); + methodView = pinnedMethod; methodTypes.clear(); - methodName = QMetaObjectPrivate::decodeMethodSignature(method, methodTypes); + methodName = QMetaObjectPrivate::decodeMethodSignature(methodView, methodTypes); // rmeta may have been modified above rmeta = receiver->metaObject(); switch (membcode) { @@ -3135,8 +3137,8 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign qCWarning(lcConnect, "QObject::connect: Incompatible sender/receiver arguments" "\n %s::%s --> %s::%s", - sender->metaObject()->className(), signal, receiver->metaObject()->className(), - method); + sender->metaObject()->className(), signalView.constData(), + receiver->metaObject()->className(), methodView.constData()); return QMetaObject::Connection(nullptr); } |
