From 36a9cd48344c8cfb776dea78c60e7d6760711197 Mon Sep 17 00:00:00 2001 From: Cristian Maureira-Fredes Date: Thu, 29 Nov 2018 09:29:48 +0100 Subject: Move add-conversion and native-to-target code Now we are able to include snippets for the previously mentioned typesystem's tags, so this patch removes the current C/C++ code from the typesystems. Task-number: PYSIDE-834 Change-Id: I2929020fa1dc0859db780dffb12fa292627697b0 Reviewed-by: Friedemann Kleint Reviewed-by: Qt CI Bot --- .../PySide2/QtCore/typesystem_core_common.xml | 315 ++++----------------- 1 file changed, 50 insertions(+), 265 deletions(-) (limited to 'sources/pyside2/PySide2/QtCore/typesystem_core_common.xml') diff --git a/sources/pyside2/PySide2/QtCore/typesystem_core_common.xml b/sources/pyside2/PySide2/QtCore/typesystem_core_common.xml index 8aade34af..ca9a56c6e 100644 --- a/sources/pyside2/PySide2/QtCore/typesystem_core_common.xml +++ b/sources/pyside2/PySide2/QtCore/typesystem_core_common.xml @@ -206,13 +206,9 @@ - - return PyBool_FromLong((bool)%in); - + - - %out = %OUTTYPE(%in == Py_True); - + @@ -220,37 +216,25 @@ - - return PyLong_FromLong(%in); - + - - %out = %OUTTYPE(PyLong_AsLong(%in)); - + - - return PyLong_FromUnsignedLong(%in); - + - - %out = %OUTTYPE(PyLong_AsUnsignedLong(%in)); - + - - return PyLong_FromLong(%in); - + - - %out = %OUTTYPE(PyLong_AsLong(%in)); - + @@ -260,201 +244,61 @@ - - QByteArray ba = %in.toUtf8(); - PyObject *%out = PyUnicode_FromStringAndSize(ba.constData(), ba.size()); - return %out; - + - - #ifndef Py_LIMITED_API - Py_UNICODE* unicode = PyUnicode_AS_UNICODE(%in); - # if defined(Py_UNICODE_WIDE) - // cast as Py_UNICODE can be a different type - %out = QString::fromUcs4((const uint*)unicode); - # else - %out = QString::fromUtf16((const ushort*)unicode, PyUnicode_GET_SIZE(%in)); - # endif - #else - wchar_t *temp = PyUnicode_AsWideCharString(%in, NULL); - %out = QString::fromWCharArray(temp); - PyMem_Free(temp); - #endif - - - #ifndef IS_PY3K - const char* str = %CONVERTTOCPP[const char*](%in); - %out = %OUTTYPE(str); - #endif - - - %out = %OUTTYPE(); - + + + - - const int N = %in.toString().length(); - wchar_t *str = new wchar_t[N]; - %in.toString().toWCharArray(str); - PyObject *%out = PyUnicode_FromWideChar(str, N); - delete[] str; - return %out; - + - - wchar_t c = (wchar_t)%in.unicode(); - return PyUnicode_FromWideChar(&c, 1); - + - - char c = %CONVERTTOCPP[char](%in); - %out = %OUTTYPE(c); - - - int i = %CONVERTTOCPP[int](%in); - %out = %OUTTYPE(i); - - - %out = %OUTTYPE(); - + + + - - if (!%in.isValid()) - Py_RETURN_NONE; - - if (qstrcmp(%in.typeName(), "QVariantList") == 0) { - QList<QVariant> var = %in.value<QVariantList>(); - return %CONVERTTOPYTHON[QList<QVariant>](var); - } - - if (qstrcmp(%in.typeName(), "QStringList") == 0) { - QStringList var = %in.value<QStringList>(); - return %CONVERTTOPYTHON[QList<QString>](var); - } - - if (qstrcmp(%in.typeName(), "QVariantMap") == 0) { - QMap<QString, QVariant> var = %in.value<QVariantMap>(); - return %CONVERTTOPYTHON[QMap<QString, QVariant>](var); - } - - Shiboken::Conversions::SpecificConverter converter(cppInRef.typeName()); - if (converter) { - void *ptr = cppInRef.data(); - return converter.toPython(ptr); - } - PyErr_Format(PyExc_RuntimeError, "Can't find converter for '%s'.", %in.typeName()); - return 0; - + - - %out = %OUTTYPE(%in == Py_True); - - - %out = %OUTTYPE(); - - - QString in = %CONVERTTOCPP[QString](%in); - %out = %OUTTYPE(in); - - - QByteArray in = %CONVERTTOCPP[QByteArray](%in); - %out = %OUTTYPE(in); - - - double in = %CONVERTTOCPP[double](%in); - %out = %OUTTYPE(in); - + + + + + - - qlonglong in = %CONVERTTOCPP[qlonglong](%in); - %out = %OUTTYPE(in); - - - qlonglong in = %CONVERTTOCPP[qlonglong](%in); - %out = %OUTTYPE(in); - - - int in = %CONVERTTOCPP[int](%in); - %out = %OUTTYPE(in); - - - // a class supported by QVariant? - int typeCode; - const char *typeName = QVariant_resolveMetaType(Py_TYPE(%in), &typeCode); - if (!typeCode || !typeName) - return; - QVariant var(typeCode, (void*)0); - Shiboken::Conversions::SpecificConverter converter(typeName); - converter.toCpp(pyIn, var.data()); - %out = var; - - - QVariant ret = QVariant_convertToVariantMap(%in); - %out = ret.isValid() ? ret : QVariant::fromValue(PySide::PyObjectWrapper(%in)); - - - QVariant ret = QVariant_convertToVariantList(%in); - %out = ret.isValid() ? ret : QVariant::fromValue(PySide::PyObjectWrapper(%in)); - - - // Is a shiboken type not known by Qt - %out = QVariant::fromValue(PySide::PyObjectWrapper(%in)); - + + + + + + + - - const char *typeName = QVariant::typeToName(%in); - PyObject *%out; - PyTypeObject *pyType = nullptr; - if (typeName) - pyType = Shiboken::Conversions::getPythonTypeObject(typeName); - %out = pyType ? (reinterpret_cast<PyObject*>(pyType)) : Py_None; - Py_INCREF(%out); - return %out; - + - - %out = QVariant::Invalid; - - - const char *typeName; - if (Shiboken::String::checkType(reinterpret_cast<PyTypeObject *>(%in))) - typeName = "QString"; - else if (%in == reinterpret_cast<PyObject*>(&PyFloat_Type)) - typeName = "double"; // float is a UserType in QVariant. - else if (%in == reinterpret_cast<PyObject*>(&PyLong_Type)) - typeName = "int"; // long is a UserType in QVariant. - else if (Py_TYPE(%in) == SbkObjectType_TypeF()) - typeName = Shiboken::ObjectType::getOriginalName((SbkObjectType*)%in); - else - typeName = reinterpret_cast<PyTypeObject *>(%in)->tp_name; - %out = QVariant::nameToType(typeName); - - - %out = QVariant::nameToType(Shiboken::String::toCString(%in)); - - - %out = QVariant::nameToType("QVariantMap"); - - - %out = QVariantType_isStringList(%in) ? QVariant::StringList : QVariant::List; - + + + + + @@ -515,22 +359,9 @@ - - // The QVariantMap returned by QJsonObject seems to cause a segfault, so - // using QJsonObject.toVariantMap() won't work. - // Wrapping it in a QJsonValue first allows it to work - QJsonValue val(%in); - QVariant ret = val.toVariant(); - - return %CONVERTTOPYTHON[QVariant](ret); - + - - QVariant dict = QVariant_convertToVariantMap(%in); - QJsonValue val = QJsonValue::fromVariant(dict); - - %out = val.toObject(); - + @@ -683,17 +514,9 @@ - - PyObject *%out = PyTuple_New(2); - PyTuple_SET_ITEM(%out, 0, %CONVERTTOPYTHON[%INTYPE_0](%in.first)); - PyTuple_SET_ITEM(%out, 1, %CONVERTTOPYTHON[%INTYPE_1](%in.second)); - return %out; - + - - %out.first = %CONVERTTOCPP[%OUTTYPE_0](PySequence_Fast_GET_ITEM(%in, 0)); - %out.second = %CONVERTTOCPP[%OUTTYPE_1](PySequence_Fast_GET_ITEM(%in, 1)); - + @@ -995,15 +818,8 @@ - - %out = %OUTTYPE(); - - - int day = PyDateTime_GET_DAY(%in); - int month = PyDateTime_GET_MONTH(%in); - int year = PyDateTime_GET_YEAR(%in); - %out = %OUTTYPE(year, month, day); - + + @@ -1063,19 +879,8 @@ - - %out = %OUTTYPE(); - - - int day = PyDateTime_GET_DAY(%in); - int month = PyDateTime_GET_MONTH(%in); - int year = PyDateTime_GET_YEAR(%in); - int hour = PyDateTime_DATE_GET_HOUR(%in); - int min = PyDateTime_DATE_GET_MINUTE(%in); - int sec = PyDateTime_DATE_GET_SECOND(%in); - int usec = PyDateTime_DATE_GET_MICROSECOND(%in); - %out = %OUTTYPE(QDate(year, month, day), QTime(hour, min, sec, usec/1000)); - + + @@ -1398,16 +1203,8 @@ - - %out = %OUTTYPE(); - - - int hour = PyDateTime_TIME_GET_HOUR(%in); - int min = PyDateTime_TIME_GET_MINUTE(%in); - int sec = PyDateTime_TIME_GET_SECOND(%in); - int usec = PyDateTime_TIME_GET_MICROSECOND(%in); - %out = %OUTTYPE(hour, min, sec, usec/1000); - + + @@ -2045,22 +1842,10 @@ - - %out = %OUTTYPE(); - - - #ifdef IS_PY3K - %out = %OUTTYPE(PyBytes_AS_STRING(%in), PyBytes_GET_SIZE(%in)); - #else - %out = %OUTTYPE(Shiboken::String::toCString(%in), Shiboken::String::len(%in)); - #endif - - - %out = %OUTTYPE(PyByteArray_AsString(%in), PyByteArray_Size(%in)); - - - %out = %OUTTYPE(Shiboken::String::toCString(%in), Shiboken::String::len(%in)); - + + + + -- cgit v1.2.3