summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qmetatype.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-07-14 00:30:41 +0200
committerLars Knoll <lars.knoll@qt.io>2020-08-24 00:18:17 +0200
commit2d3b31171d8fce2ab364ca2ceea4e75020933334 (patch)
tree7c9594a99d633382a07a2836608162330c9558c1 /src/corelib/kernel/qmetatype.cpp
parent53047c3623c28a3184c17120a309055d2f189a77 (diff)
Get rid of the old QVariant conversion codepath
All conversions do now happen through QMetaType::convert(). Change-Id: I70f7a883262087768acccf8361d34c0490ff2b43 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/kernel/qmetatype.cpp')
-rw-r--r--src/corelib/kernel/qmetatype.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp
index 4991cb748a..446511c14d 100644
--- a/src/corelib/kernel/qmetatype.cpp
+++ b/src/corelib/kernel/qmetatype.cpp
@@ -1236,6 +1236,10 @@ static const struct : QMetaTypeModuleHelper
result = QCborValue(QCborValue::Null);
return true;
);
+ QMETATYPE_CONVERTER(Nullptr, QCborValue,
+ result = nullptr;
+ return source.isNull();
+ );
QMETATYPE_CONVERTER_ASSIGN(QCborValue, Bool);
QMETATYPE_CONVERTER_ASSIGN(QCborValue, Int);
QMETATYPE_CONVERTER_ASSIGN(QCborValue, UInt);
@@ -1423,7 +1427,12 @@ static const struct : QMetaTypeModuleHelper
QMETATYPE_CONVERTER(QJsonValue, Nullptr,
Q_UNUSED(source);
result = QJsonValue(QJsonValue::Null);
- return true;);
+ return true;
+ );
+ QMETATYPE_CONVERTER(Nullptr, QJsonValue,
+ result = nullptr;
+ return source.isNull();
+ );
QMETATYPE_CONVERTER(QJsonValue, Bool,
result = QJsonValue(source);
return true;);
@@ -1842,6 +1851,13 @@ bool QMetaType::convert(const void *from, int fromTypeId, void *to, int toTypeId
QMetaType toType(toTypeId);
if (toType.flags() & QMetaType::IsEnumeration)
return convertToEnum(from, fromTypeId, to, toType);
+ if (toTypeId == Nullptr) {
+ *static_cast<std::nullptr_t *>(to) = nullptr;
+ if (fromType.flags() & QMetaType::IsPointer) {
+ if (*static_cast<const void * const *>(from) == nullptr)
+ return true;
+ }
+ }
return false;
}