diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2016-08-05 10:02:52 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2016-08-08 12:45:38 +0000 |
commit | 3e5152be4100cbe649d252bb5d95dc98be5df2f0 (patch) | |
tree | 6c81cd4eb1def724c564547755f87c987b04e353 /src | |
parent | f9f4f1cbda1b4ac19819f21dc3af33f0b7ebf071 (diff) |
QJSValue: Adapt to introduction of QMetaType::Nullptr
[ChangeLog][QtQml][Important Behavior Changes] A JS null value converted
to a QVariant now has type QMetaType::Nullptr rather than
QMetaType::VoidStar.
Change-Id: I91a64e444ada0f1884fe807f9973348ba1a878ff
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/jsapi/qjsvalue.cpp | 11 | ||||
-rw-r--r-- | src/qml/jsapi/qjsvalue_p.h | 1 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 4 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4qobjectwrapper.cpp | 1 | ||||
-rw-r--r-- | src/qml/qml/qqmlbinding.cpp | 9 | ||||
-rw-r--r-- | src/qml/qml/qqmlvaluetype.cpp | 1 |
6 files changed, 18 insertions, 9 deletions
diff --git a/src/qml/jsapi/qjsvalue.cpp b/src/qml/jsapi/qjsvalue.cpp index e5c1dcdb80..a4a96a96a7 100644 --- a/src/qml/jsapi/qjsvalue.cpp +++ b/src/qml/jsapi/qjsvalue.cpp @@ -178,7 +178,7 @@ QJSValue::QJSValue(SpecialValue value) : d(0) { if (value == NullValue) - QJSValuePrivate::setVariant(this, QVariant(QMetaType::VoidStar, (void *)0)); + QJSValuePrivate::setVariant(this, QVariant::fromValue(nullptr)); } /*! @@ -293,7 +293,10 @@ bool QJSValue::isNull() const if (val) return val->isNull(); QVariant *variant = QJSValuePrivate::getVariant(this); - return variant && variant->userType() == QMetaType::VoidStar; + if (!variant) + return false; + const int type = variant->userType(); + return type == QMetaType::Nullptr || type == QMetaType::VoidStar; } /*! @@ -582,7 +585,7 @@ quint32 QJSValue::toUInt() const \table \header \li Input Type \li Result \row \li Undefined \li An invalid QVariant. - \row \li Null \li A QVariant containing a null pointer (QMetaType::VoidStar). + \row \li Null \li A QVariant containing a null pointer (QMetaType::Nullptr). \row \li Boolean \li A QVariant containing the value of the boolean. \row \li Number \li A QVariant containing the value of the number. \row \li String \li A QVariant containing the value of the string. @@ -619,7 +622,7 @@ QVariant QJSValue::toVariant() const return QVariant(val->asDouble()); } if (val->isNull()) - return QVariant(QMetaType::VoidStar, 0); + return QVariant(QMetaType::Nullptr, 0); Q_ASSERT(val->isUndefined()); return QVariant(); } diff --git a/src/qml/jsapi/qjsvalue_p.h b/src/qml/jsapi/qjsvalue_p.h index 25afd9275c..c4761ad6ea 100644 --- a/src/qml/jsapi/qjsvalue_p.h +++ b/src/qml/jsapi/qjsvalue_p.h @@ -132,6 +132,7 @@ public: case QMetaType::Void: *v = QV4::Encode::undefined(); break; + case QMetaType::Nullptr: case QMetaType::VoidStar: *v = QV4::Encode::null(); break; diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index f5bae4b258..20294700f6 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -1130,7 +1130,7 @@ static QVariant toVariant(QV4::ExecutionEngine *e, const QV4::Value &value, int if (value.isUndefined()) return QVariant(); if (value.isNull()) - return QVariant(QMetaType::VoidStar, (void *)0); + return QVariant::fromValue(nullptr); if (value.isBoolean()) return value.booleanValue(); if (value.isInteger()) @@ -1255,6 +1255,7 @@ QV4::ReturnedValue QV4::ExecutionEngine::fromVariant(const QVariant &variant) case QMetaType::UnknownType: case QMetaType::Void: return QV4::Encode::undefined(); + case QMetaType::Nullptr: case QMetaType::VoidStar: return QV4::Encode::null(); case QMetaType::Bool: @@ -1426,6 +1427,7 @@ QV4::ReturnedValue ExecutionEngine::metaTypeToJS(int type, const void *data) case QMetaType::UnknownType: case QMetaType::Void: return QV4::Encode::undefined(); + case QMetaType::Nullptr: case QMetaType::VoidStar: return QV4::Encode::null(); case QMetaType::Bool: diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index 074d3bf866..9cfc5dcb1f 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -1247,6 +1247,7 @@ static int MatchScore(const QV4::Value &actual, int conversionType) } } else if (actual.isNull()) { switch (conversionType) { + case QMetaType::Nullptr: case QMetaType::VoidStar: case QMetaType::QObjectStar: case QMetaType::QJsonValue: diff --git a/src/qml/qml/qqmlbinding.cpp b/src/qml/qml/qqmlbinding.cpp index d4a8b87aaa..5c9b14ba74 100644 --- a/src/qml/qml/qqmlbinding.cpp +++ b/src/qml/qml/qqmlbinding.cpp @@ -386,7 +386,8 @@ Q_NEVER_INLINE bool QQmlBinding::slowWrite(const QQmlPropertyData &core, const Q const char *valueType = 0; const char *propertyType = 0; - if (value.userType() == QMetaType::QObjectStar) { + const int userType = value.userType(); + if (userType == QMetaType::QObjectStar) { if (QObject *o = *(QObject *const *)value.constData()) { valueType = o->metaObject()->className(); @@ -394,11 +395,11 @@ Q_NEVER_INLINE bool QQmlBinding::slowWrite(const QQmlPropertyData &core, const Q if (!propertyMetaObject.isNull()) propertyType = propertyMetaObject.className(); } - } else if (value.userType() != QVariant::Invalid) { - if (value.userType() == QMetaType::VoidStar) + } else if (userType != QVariant::Invalid) { + if (userType == QMetaType::Nullptr || userType == QMetaType::VoidStar) valueType = "null"; else - valueType = QMetaType::typeName(value.userType()); + valueType = QMetaType::typeName(userType); } if (!valueType) diff --git a/src/qml/qml/qqmlvaluetype.cpp b/src/qml/qml/qqmlvaluetype.cpp index 8e87ec7f63..eefe7a5fb8 100644 --- a/src/qml/qml/qqmlvaluetype.cpp +++ b/src/qml/qml/qqmlvaluetype.cpp @@ -88,6 +88,7 @@ bool QQmlValueTypeFactoryImpl::isValueType(int idx) && idx != QVariant::StringList && idx != QMetaType::QObjectStar && idx != QMetaType::VoidStar + && idx != QMetaType::Nullptr && idx != QMetaType::QVariant && idx != QMetaType::QLocale) { return true; |