diff options
| author | Ahmad Samir <a.samirh78@gmail.com> | 2025-04-11 23:51:52 +0200 |
|---|---|---|
| committer | Ahmad Samir <a.samirh78@gmail.com> | 2025-06-23 23:21:01 +0300 |
| commit | 8635b9c2955fe80add75e982647cd3e7883347fa (patch) | |
| tree | 6de186eb0af9211607dd29224699397684d7bb95 /src/corelib/kernel/qmetaobject.cpp | |
| parent | 43c5f40dfd3e35590c7e27c4619d4992426a2cfa (diff) | |
QMetaObjectPrivate: simplify parameterTypeNamesFromSignature()
Take by QByteArrayView instead of `const char *`, this method is only
called on a QByteArray so the size is already known. Use the length to
check for the end of iteration instead of checking for the closing ')'
in multiple places in the while-loops' conditions.
Pick-to: 6.10
Change-Id: I272231293d07ae699083d2a38898ea2d3cf0e7a0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/kernel/qmetaobject.cpp')
| -rw-r--r-- | src/corelib/kernel/qmetaobject.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index bee788f1d5b..d3d71ccf5d3 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -4578,15 +4578,22 @@ int QMetaObjectPrivate::originalClone(const QMetaObject *mobj, int local_method_ Returns the parameter type names extracted from the given \a signature. */ -QList<QByteArray> QMetaObjectPrivate::parameterTypeNamesFromSignature(const char *signature) +QList<QByteArray> QMetaObjectPrivate::parameterTypeNamesFromSignature(QByteArrayView sig) { QList<QByteArray> list; - while (*signature && *signature != '(') - ++signature; - while (*signature && *signature != ')' && *++signature != ')') { + const char *signature = static_cast<const char *>(memchr(sig.begin(), '(', sig.size())); + if (!signature) + return {}; + ++signature; // skip '(' + if (!sig.endsWith(')')) + return {}; + const char *end = sig.end() - 1; // exclude ')' + while (signature != end) { + if (*signature == ',') + ++signature; const char *begin = signature; int level = 0; - while (*signature && (level > 0 || *signature != ',') && *signature != ')') { + while (signature != end && (level > 0 || *signature != ',')) { if (*signature == '<') ++level; else if (*signature == '>') |
