// Emit a signal.
static PyObject *pyqtBoundSignal_emit(PyObject *self, PyObject *args)
{
    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;

    if (!bs->bound_qobject->signalsBlocked())
    {
        int signal_index = bs->bound_qobject->metaObject()->indexOfSignal(bs->bound_overload->signature.constData() + 1);

        Q_ASSERT(signal_index >= 0);

        if (!qpycore_emit(bs->bound_qobject, signal_index, bs->bound_overload, args))
            return 0;
    }

    Py_INCREF(Py_None);
    return Py_None;
}
// Emit a signal.
static PyObject *pyqtBoundSignal_emit(PyObject *self, PyObject *args)
{
    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;

    if (!bs->bound_qobject->signalsBlocked())
    {
        Chimera::Signature *signature = bs->unbound_signal->signature;
        int mo_index = bs->bound_qobject->metaObject()->indexOfSignal(signature->signature.constData() + 1);

        if (mo_index < 0)
        {
            PyErr_Format(PyExc_AttributeError,
                    "signal was not defined in the first super-class of class '%s'",
                    Py_TYPE(bs->bound_pyobject)->tp_name);
            return 0;
        }

        // Use the docstring if there is one and it is auto-generated.
        const char *docstring = bs->unbound_signal->docstring;

        if (!docstring || *docstring != '\1')
        {
            docstring = signature->py_signature.constData();
        }
        else
        {
            // Skip the auto-generated marker.
            ++docstring;
        }

        if (!qpycore_emit(bs->bound_qobject, mo_index, signature, docstring, args))
            return 0;
    }

    Py_INCREF(Py_None);
    return Py_None;
}