diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2023-11-15 12:24:57 +0100 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2023-11-16 16:18:51 +0100 |
| commit | 6816114494a2555121ffe4fba22f7845daf0c748 (patch) | |
| tree | 0fabf15d3f930b2971a2fbbd31f5e4c829e13bb6 /sources/pyside6/libpyside/pysidesignal.cpp | |
| parent | 9f7b808f64be9c01a17153839c368626edac32ed (diff) | |
libpyside: Port the signal signature code from QString to QByteArray
Since the name ends up in QMetaObject::addSlot() taking a QByteArray
anyways, there is no point in constructing the name using QString.
Task-number: PYSIDE-2524
Change-Id: Ib27a55efa8b22eb983d5e27e3a981efd72e9996f
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
Diffstat (limited to 'sources/pyside6/libpyside/pysidesignal.cpp')
| -rw-r--r-- | sources/pyside6/libpyside/pysidesignal.cpp | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/sources/pyside6/libpyside/pysidesignal.cpp b/sources/pyside6/libpyside/pysidesignal.cpp index 4653e3940..503044f24 100644 --- a/sources/pyside6/libpyside/pysidesignal.cpp +++ b/sources/pyside6/libpyside/pysidesignal.cpp @@ -530,7 +530,7 @@ static PyObject *signalInstanceConnect(PyObject *self, PyObject *args, PyObject // Get signature args bool isShortCircuit = false; - QStringList argsSignature = PySide::Signal::getArgsFromSignature(it->d->signature, + QByteArrayList argsSignature = PySide::Signal::getArgsFromSignature(it->d->signature, &isShortCircuit); qsizetype signatureArgs = argsSignature.size(); @@ -1214,29 +1214,30 @@ EmitterData getEmitterData(PySideSignalInstance *signal) return result; } -QStringList getArgsFromSignature(const char *signature, bool *isShortCircuit) +QByteArrayList getArgsFromSignature(const char *signature, bool *isShortCircuit) { - QString qsignature = QString::fromLatin1(signature).trimmed(); - QStringList result; + QByteArray qsignature = QByteArray(signature).trimmed(); + QByteArrayList result; if (isShortCircuit) *isShortCircuit = !qsignature.contains(u'('); - if (qsignature.contains(u"()") || qsignature.contains(u"(void)")) + if (qsignature.contains("()") || qsignature.contains("(void)")) return result; - if (qsignature.endsWith(u')')) { - const int paren = qsignature.indexOf(u'('); + if (qsignature.endsWith(')')) { + const auto paren = qsignature.indexOf('('); if (paren >= 0) { qsignature.chop(1); qsignature.remove(0, paren + 1); result = qsignature.split(u','); - for (QString &type : result) + for (auto &type : result) type = type.trimmed(); } } return result; } -QString getCallbackSignature(const char *signal, QObject *receiver, PyObject *callback, bool encodeName) +QByteArray getCallbackSignature(const char *signal, QObject *receiver, + PyObject *callback, bool encodeName) { QByteArray functionName; qsizetype numArgs = -1; @@ -1309,9 +1310,8 @@ QString getCallbackSignature(const char *signal, QObject *receiver, PyObject *ca functionName[0] = '_'; functionName[functionName.size() - 1] = '_'; } - const QString functionNameS = QLatin1String(functionName); - QString signature = encodeName ? codeCallbackName(callback, functionNameS) : functionNameS; - QStringList args = getArgsFromSignature(signal, &isShortCircuit); + QByteArray signature = encodeName ? codeCallbackName(callback, functionName) : functionName; + QByteArrayList args = getArgsFromSignature(signal, &isShortCircuit); if (!isShortCircuit) { signature.append(u'('); @@ -1319,8 +1319,8 @@ QString getCallbackSignature(const char *signal, QObject *receiver, PyObject *ca numArgs = std::numeric_limits<qsizetype>::max(); while (!args.isEmpty() && (args.size() > (numArgs - useSelf))) args.removeLast(); - signature.append(args.join(u',')); - signature.append(u')'); + signature.append(args.join(',')); + signature.append(')'); } return signature; } @@ -1339,21 +1339,21 @@ bool checkQtSignal(const char *signal) return true; } -QString codeCallbackName(PyObject *callback, const QString &funcName) +QByteArray codeCallbackName(PyObject *callback, const QByteArray &funcName) { if (PyMethod_Check(callback)) { PyObject *self = PyMethod_GET_SELF(callback); PyObject *func = PyMethod_GET_FUNCTION(callback); - return funcName + QString::number(quint64(self), 16) + QString::number(quint64(func), 16); + return funcName + QByteArray::number(quint64(self), 16) + QByteArray::number(quint64(func), 16); } // PYSIDE-1523: Handle the compiled case. if (PySide::isCompiledMethod(callback)) { // Not retaining references inline with what PyMethod_GET_(SELF|FUNC) does. Shiboken::AutoDecRef self(PyObject_GetAttr(callback, PySide::PySideName::im_self())); Shiboken::AutoDecRef func(PyObject_GetAttr(callback, PySide::PySideName::im_func())); - return funcName + QString::number(quint64(self), 16) + QString::number(quint64(func), 16); + return funcName + QByteArray::number(quint64(self), 16) + QByteArray::number(quint64(func), 16); } - return funcName + QString::number(quint64(callback), 16); + return funcName + QByteArray::number(quint64(callback), 16); } QByteArray voidType() |
