aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside2/libpyside/pysidesignal.cpp
diff options
context:
space:
mode:
authorChristian Tismer <tismer@stackless.com>2020-09-17 10:54:45 +0200
committerChristian Tismer <tismer@stackless.com>2020-09-18 09:20:38 +0200
commitdc7acd1f2dc750c3c8602203ae1558b0e60a3c17 (patch)
tree1703b77a58308dfb718d4555c8648c5349da1c10 /sources/pyside2/libpyside/pysidesignal.cpp
parent81b487553674efc10654fc10088c132b4c4fa93a (diff)
signal: perform a cleanup before fixing __get__
Task-number: PYSIDE-68 Change-Id: I8245260cadf6c71167bff51829f2851ab8403248 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'sources/pyside2/libpyside/pysidesignal.cpp')
-rw-r--r--sources/pyside2/libpyside/pysidesignal.cpp103
1 files changed, 51 insertions, 52 deletions
diff --git a/sources/pyside2/libpyside/pysidesignal.cpp b/sources/pyside2/libpyside/pysidesignal.cpp
index aa215aa45..ff1d6002c 100644
--- a/sources/pyside2/libpyside/pysidesignal.cpp
+++ b/sources/pyside2/libpyside/pysidesignal.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt for Python.
@@ -107,10 +107,10 @@ static PyMethodDef MetaSignal_methods[] = {
};
static PyType_Slot PySideMetaSignalType_slots[] = {
- {Py_tp_methods, (void *)MetaSignal_methods},
- {Py_tp_base, (void *)&PyType_Type},
- {Py_tp_free, (void *)PyObject_GC_Del},
- {Py_tp_dealloc, (void *)Sbk_object_dealloc},
+ {Py_tp_methods, reinterpret_cast<void *>(MetaSignal_methods)},
+ {Py_tp_base, reinterpret_cast<void *>(&PyType_Type)},
+ {Py_tp_free, reinterpret_cast<void *>(PyObject_GC_Del)},
+ {Py_tp_dealloc, reinterpret_cast<void *>(Sbk_object_dealloc)},
{0, 0}
};
static PyType_Spec PySideMetaSignalType_spec = {
@@ -124,7 +124,7 @@ static PyType_Spec PySideMetaSignalType_spec = {
};
-PyTypeObject *PySideMetaSignalTypeF(void)
+static PyTypeObject *PySideMetaSignalTypeF(void)
{
static PyTypeObject *type = nullptr;
if (!type) {
@@ -136,13 +136,13 @@ PyTypeObject *PySideMetaSignalTypeF(void)
}
static PyType_Slot PySideSignalType_slots[] = {
- {Py_mp_subscript, (void *)signalGetItem},
- {Py_tp_call, (void *)signalCall},
- {Py_tp_str, (void *)signalToString},
- {Py_tp_init, (void *)signalTpInit},
- {Py_tp_new, (void *)PyType_GenericNew},
- {Py_tp_free, (void *)signalFree},
- {Py_tp_dealloc, (void *)Sbk_object_dealloc},
+ {Py_mp_subscript, reinterpret_cast<void *>(signalGetItem)},
+ {Py_tp_call, reinterpret_cast<void *>(signalCall)},
+ {Py_tp_str, reinterpret_cast<void *>(signalToString)},
+ {Py_tp_init, reinterpret_cast<void *>(signalTpInit)},
+ {Py_tp_new, reinterpret_cast<void *>(PyType_GenericNew)},
+ {Py_tp_free, reinterpret_cast<void *>(signalFree)},
+ {Py_tp_dealloc, reinterpret_cast<void *>(Sbk_object_dealloc)},
{0, 0}
};
static PyType_Spec PySideSignalType_spec = {
@@ -175,13 +175,12 @@ static PyMethodDef SignalInstance_methods[] = {
};
static PyType_Slot PySideSignalInstanceType_slots[] = {
- //{Py_tp_as_mapping, (void *)&SignalInstance_as_mapping},
- {Py_mp_subscript, (void *)signalInstanceGetItem},
- {Py_tp_call, (void *)signalInstanceCall},
- {Py_tp_methods, (void *)SignalInstance_methods},
- {Py_tp_new, (void *)PyType_GenericNew},
- {Py_tp_free, (void *)signalInstanceFree},
- {Py_tp_dealloc, (void *)Sbk_object_dealloc},
+ {Py_mp_subscript, reinterpret_cast<void *>(signalInstanceGetItem)},
+ {Py_tp_call, reinterpret_cast<void *>(signalInstanceCall)},
+ {Py_tp_methods, reinterpret_cast<void *>(SignalInstance_methods)},
+ {Py_tp_new, reinterpret_cast<void *>(PyType_GenericNew)},
+ {Py_tp_free, reinterpret_cast<void *>(signalInstanceFree)},
+ {Py_tp_dealloc, reinterpret_cast<void *>(Sbk_object_dealloc)},
{0, 0}
};
static PyType_Spec PySideSignalInstanceType_spec = {
@@ -200,7 +199,7 @@ PyTypeObject *PySideSignalInstanceTypeF(void)
return type;
}
-int signalTpInit(PyObject *self, PyObject *args, PyObject *kwds)
+static int signalTpInit(PyObject *self, PyObject *args, PyObject *kwds)
{
static PyObject *emptyTuple = nullptr;
static const char *kwlist[] = {"name", "arguments", nullptr};
@@ -260,7 +259,7 @@ int signalTpInit(PyObject *self, PyObject *args, PyObject *kwds)
return 0;
}
-void signalFree(void *self)
+static void signalFree(void *self)
{
auto pySelf = reinterpret_cast<PyObject *>(self);
auto data = reinterpret_cast<PySideSignal *>(self);
@@ -272,7 +271,7 @@ void signalFree(void *self)
Py_TYPE(pySelf)->tp_base->tp_free(self);
}
-PyObject *signalGetItem(PyObject *self, PyObject *key)
+static PyObject *signalGetItem(PyObject *self, PyObject *key)
{
auto data = reinterpret_cast<PySideSignal *>(self);
QByteArray sigKey;
@@ -287,12 +286,12 @@ PyObject *signalGetItem(PyObject *self, PyObject *key)
}
-PyObject *signalToString(PyObject *self)
+static PyObject *signalToString(PyObject *self)
{
return signalGetItem(self, 0);
}
-void signalInstanceFree(void *self)
+static void signalInstanceFree(void *self)
{
auto pySelf = reinterpret_cast<PyObject *>(self);
auto data = reinterpret_cast<PySideSignalInstance *>(self);
@@ -310,7 +309,7 @@ void signalInstanceFree(void *self)
Py_TYPE(pySelf)->tp_base->tp_free(self);
}
-PyObject *signalInstanceConnect(PyObject *self, PyObject *args, PyObject *kwds)
+static PyObject *signalInstanceConnect(PyObject *self, PyObject *args, PyObject *kwds)
{
PyObject *slot = nullptr;
PyObject *type = nullptr;
@@ -430,12 +429,12 @@ PyObject *signalInstanceConnect(PyObject *self, PyObject *args, PyObject *kwds)
return 0;
}
-int argCountInSignature(const char *signature)
+static int argCountInSignature(const char *signature)
{
return QByteArray(signature).count(",") + 1;
}
-PyObject *signalInstanceEmit(PyObject *self, PyObject *args)
+static PyObject *signalInstanceEmit(PyObject *self, PyObject *args)
{
PySideSignalInstance *source = reinterpret_cast<PySideSignalInstance *>(self);
@@ -474,7 +473,7 @@ PyObject *signalInstanceEmit(PyObject *self, PyObject *args)
return PyObject_CallObject(pyMethod, tupleArgs);
}
-PyObject *signalInstanceGetItem(PyObject *self, PyObject *key)
+static PyObject *signalInstanceGetItem(PyObject *self, PyObject *key)
{
auto data = reinterpret_cast<PySideSignalInstance *>(self);
const auto sigName = data->d->signalName;
@@ -494,7 +493,7 @@ PyObject *signalInstanceGetItem(PyObject *self, PyObject *key)
return 0;
}
-PyObject *signalInstanceDisconnect(PyObject *self, PyObject *args)
+static PyObject *signalInstanceDisconnect(PyObject *self, PyObject *args)
{
auto source = reinterpret_cast<PySideSignalInstance *>(self);
Shiboken::AutoDecRef pyArgs(PyList_New(0));
@@ -547,7 +546,7 @@ PyObject *signalInstanceDisconnect(PyObject *self, PyObject *args)
return 0;
}
-PyObject *signalCall(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *signalCall(PyObject *self, PyObject *args, PyObject *kw)
{
auto signal = reinterpret_cast<PySideSignal *>(self);
@@ -579,7 +578,7 @@ PyObject *signalCall(PyObject *self, PyObject *args, PyObject *kw)
return callFunc(homonymousMethod, args, kw);
}
-PyObject *signalInstanceCall(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *signalInstanceCall(PyObject *self, PyObject *args, PyObject *kw)
{
auto PySideSignal = reinterpret_cast<PySideSignalInstance *>(self);
if (!PySideSignal->d->homonymousMethod) {
@@ -704,12 +703,12 @@ QByteArray getTypeName(PyObject *type)
return QByteArray();
}
-QByteArray buildSignature(const QByteArray &name, const QByteArray &signature)
+static QByteArray buildSignature(const QByteArray &name, const QByteArray &signature)
{
return QMetaObject::normalizedSignature(name + '(' + signature + ')');
}
-QByteArray parseSignature(PyObject *args)
+static QByteArray parseSignature(PyObject *args)
{
if (args && (Shiboken::String::check(args) || !PySequence_Check(args)))
return getTypeName(args);
@@ -727,22 +726,12 @@ QByteArray parseSignature(PyObject *args)
return signature;
}
-void appendSignature(PySideSignal *self, const SignalSignature &signature)
+static void appendSignature(PySideSignal *self, const SignalSignature &signature)
{
self->data->signatures.append({signature.m_parameterTypes, signature.m_attributes});
}
-PySideSignalInstance *initialize(PySideSignal *self, PyObject *name, PyObject *object)
-{
- PySideSignalInstance *instance = PyObject_New(PySideSignalInstance, PySideSignalInstanceTypeF());
- auto sbkObj = reinterpret_cast<SbkObject *>(object);
- if (!Shiboken::Object::wasCreatedByPython(sbkObj))
- Py_INCREF(object); // PYSIDE-79: this flag was crucial for a wrapper call.
- instanceInitialize(instance, name, self, object, 0);
- return instance;
-}
-
-void instanceInitialize(PySideSignalInstance *self, PyObject *name, PySideSignal *data, PyObject *source, int index)
+static void instanceInitialize(PySideSignalInstance *self, PyObject *name, PySideSignal *data, PyObject *source, int index)
{
self->d = new PySideSignalInstancePrivate;
PySideSignalInstancePrivate *selfPvt = self->d;
@@ -768,6 +757,16 @@ void instanceInitialize(PySideSignalInstance *self, PyObject *name, PySideSignal
}
}
+PySideSignalInstance *initialize(PySideSignal *self, PyObject *name, PyObject *object)
+{
+ PySideSignalInstance *instance = PyObject_New(PySideSignalInstance, PySideSignalInstanceTypeF());
+ auto sbkObj = reinterpret_cast<SbkObject *>(object);
+ if (!Shiboken::Object::wasCreatedByPython(sbkObj))
+ Py_INCREF(object); // PYSIDE-79: this flag was crucial for a wrapper call.
+ instanceInitialize(instance, name, self, object, 0);
+ return instance;
+}
+
bool connect(PyObject *source, const char *signal, PyObject *callback)
{
Shiboken::AutoDecRef pyMethod(PyObject_GetAttr(source,
@@ -851,6 +850,12 @@ static bool compareSignals(const SignalSignature &sig1, const SignalSignature &)
return sig1.m_parameterTypes.isEmpty();
}
+static PyObject *buildQtCompatible(const QByteArray &signature)
+{
+ const auto ba = QT_SIGNAL_SENTINEL + signature;
+ return Shiboken::String::fromStringAndSize(ba, ba.size());
+}
+
void registerSignals(SbkObjectType *pyObj, const QMetaObject *metaObject)
{
typedef QHash<QByteArray, QList<SignalSignature> > SignalSigMap;
@@ -891,12 +896,6 @@ void registerSignals(SbkObjectType *pyObj, const QMetaObject *metaObject)
}
}
-PyObject *buildQtCompatible(const QByteArray &signature)
-{
- const auto ba = QT_SIGNAL_SENTINEL + signature;
- return Shiboken::String::fromStringAndSize(ba, ba.size());
-}
-
PyObject *getObject(PySideSignalInstance *signal)
{
return signal->d->source;