aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/libpyside/pyside.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2023-09-25 14:49:14 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2023-09-26 07:37:31 +0200
commit7dee9d7737542800d693d28c7a7bd4d1e258a2ee (patch)
treec7e1285fe9eaf56da45b4cf362fede32cdfd2abe /sources/pyside6/libpyside/pyside.cpp
parent2e05404b77db17dc9577da19df723e3819377eda (diff)
Improve libpyside debug operators
Output True/False directly. Also output methods and functions. Amends 74a2ec0202af250828c10dfb10b71036a3af9dd8. Task-number: PYSIDE-229 Pick-to: 6.6 Change-Id: I3625853ec5deef03cb6f94f24e0a2e80d4ac30a7 Reviewed-by: Christian Tismer <tismer@stackless.com> Reviewed-by: Adrian Herrmann <adrian.herrmann@qt.io>
Diffstat (limited to 'sources/pyside6/libpyside/pyside.cpp')
-rw-r--r--sources/pyside6/libpyside/pyside.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/sources/pyside6/libpyside/pyside.cpp b/sources/pyside6/libpyside/pyside.cpp
index 77cc303c7..eb2cd9559 100644
--- a/sources/pyside6/libpyside/pyside.cpp
+++ b/sources/pyside6/libpyside/pyside.cpp
@@ -1036,6 +1036,25 @@ static inline const char *pyTypeName(PyObject *obj)
return Py_TYPE(obj)->tp_name;
}
+static QString getQualName(PyObject *obj)
+{
+ Shiboken::AutoDecRef result(PyObject_GetAttr(obj, Shiboken::PyMagicName::qualname()));
+ return result.object() != nullptr
+ ? pyStringToQString(result.object()) : QString{};
+}
+
+static void formatPyFunction(PyObject *obj, QDebug &debug)
+{
+ debug << '"' << getQualName(obj) << "()\"";
+}
+
+static void formatPyMethod(PyObject *obj, QDebug &debug)
+{
+ if (auto *func = PyMethod_Function(obj))
+ formatPyFunction(func, debug);
+ debug << ", instance=" << PyMethod_Self(obj);
+}
+
static void formatPyObjectValue(PyObject *obj, QDebug &debug)
{
if (PyType_Check(obj) != 0)
@@ -1046,6 +1065,10 @@ static void formatPyObjectValue(PyObject *obj, QDebug &debug)
debug << PyFloat_AsDouble(obj);
else if (PyUnicode_Check(obj) != 0)
debug << '"' << pyStringToQString(obj) << '"';
+ else if (PyFunction_Check(obj) != 0)
+ formatPyFunction(obj, debug);
+ else if (PyMethod_Check(obj) != 0)
+ formatPyMethod(obj, debug);
else if (PySequence_Check(obj) != 0)
formatPySequence(obj, debug);
else if (PyDict_Check(obj) != 0)
@@ -1064,6 +1087,14 @@ static void formatPyObject(PyObject *obj, QDebug &debug)
debug << "None";
return;
}
+ if (obj == Py_True) {
+ debug << "True";
+ return;
+ }
+ if (obj == Py_False) {
+ debug << "False";
+ return;
+ }
if (PyType_Check(obj) == 0)
debug << pyTypeName(obj) << ": ";
formatPyObjectValue(obj, debug);