From bdc8778d7a9cc904564567a3b5bff1e74694c7d2 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 4 Nov 2022 18:09:04 -0700 Subject: [PATCH] QVariant: add support for numeric comparisons for char16_t and char32_t Change-Id: I3d74c753055744deb8acfffd17248af45fd20556 Reviewed-by: Fabian Kosmale --- src/corelib/kernel/qvariant.cpp | 8 +++++++- tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 9fb30c6f28e..3c3a5a84b03 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -157,6 +157,8 @@ static std::optional qConvertToNumber(const QVariant::Private *d, boo case QMetaType::ULongLong: case QMetaType::UInt: case QMetaType::UChar: + case QMetaType::Char16: + case QMetaType::Char32: case QMetaType::UShort: case QMetaType::ULong: return qlonglong(qMetaTypeUNumber(d)); @@ -184,6 +186,8 @@ static std::optional qConvertToRealNumber(const QVariant::Private *d) case QMetaType::ULongLong: case QMetaType::UInt: case QMetaType::UChar: + case QMetaType::Char16: + case QMetaType::Char32: case QMetaType::UShort: case QMetaType::ULong: return qreal(qMetaTypeUNumber(d)); @@ -2140,6 +2144,8 @@ static bool qIsNumericType(uint tp) Q_UINT64_C(1) << QMetaType::Double | Q_UINT64_C(1) << QMetaType::Float | Q_UINT64_C(1) << QMetaType::Char | + Q_UINT64_C(1) << QMetaType::Char16 | + Q_UINT64_C(1) << QMetaType::Char32 | Q_UINT64_C(1) << QMetaType::SChar | Q_UINT64_C(1) << QMetaType::UChar | Q_UINT64_C(1) << QMetaType::Short | @@ -2227,7 +2233,7 @@ static int numericTypePromotion(const QtPrivate::QMetaTypeInterface *iface1, auto isUnsigned = [](uint tp) { // only types for which sizeof(T) >= sizeof(int); lesser ones promote to int return tp == QMetaType::ULongLong || tp == QMetaType::ULong || - tp == QMetaType::UInt; + tp == QMetaType::UInt || tp == QMetaType::Char32; }; bool isUnsigned1 = isUnsigned(t1); bool isUnsigned2 = isUnsigned(t2); diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index ccb79524072..ff41873a85a 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -2836,6 +2836,8 @@ QT_WARNING_POP addList(std::array{ false, true }); addList(std::array{ QCborSimpleType{}, QCborSimpleType::False, QCborSimpleType(0xff) }); addSingleType(char(0)); + addSingleType(char16_t(0)); + addSingleType(char32_t(0)); addSingleType(qint8(0)); addSingleType(quint8(0)); addSingleType(qint16(0)); @@ -2856,6 +2858,10 @@ QT_WARNING_POP addComparePair(char(127), qint8(127)); addComparePair(char(127), quint8(127)); addComparePair(qint8(-1), quint8(255)); + addComparePair(char16_t(256), qint8(-1)); + addComparePair(char16_t(256), short(-1)); + addComparePair(char16_t(256), int(-1)); + addComparePair(char32_t(256), int(-1)); addComparePair(0U, -1); addComparePair(~0U, -1); addComparePair(Q_UINT64_C(0), -1);