aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/v8/qv8engine.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2014-09-08 14:06:22 +0200
committerLars Knoll <lars.knoll@digia.com>2014-09-11 09:56:48 +0200
commit91d6a63ab317817990c3b2306860adbd8916cca4 (patch)
tree44962e20ce14c594d1f77c7ac4d54d53bd1b158e /src/qml/qml/v8/qv8engine.cpp
parent8fab54a5495226b8c06d7708357a23e83444abc0 (diff)
Fix roundtrip conversion between JS var and QVariant
Always convert null to a QVariant(VoidStar) as documented in QJSValue. Make sure the reverse conversion will lead back to a null JS value. Adjusted two test cases that expected an invalid QVariant when setting the property to null, and added test cases for the correct conversion. Task-number: QTBUG-40880 Change-Id: I6eb01f0067f2c89779c53fd2cd0a1193047ed2cc Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/qml/v8/qv8engine.cpp')
-rw-r--r--src/qml/qml/v8/qv8engine.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp
index 35d31e4f1f..b56af2e7f6 100644
--- a/src/qml/qml/v8/qv8engine.cpp
+++ b/src/qml/qml/v8/qv8engine.cpp
@@ -240,6 +240,8 @@ QV4::ReturnedValue QV8Engine::fromVariant(const QVariant &variant)
case QMetaType::UnknownType:
case QMetaType::Void:
return QV4::Encode::undefined();
+ case QMetaType::VoidStar:
+ return QV4::Encode::null();
case QMetaType::Bool:
return QV4::Encode(*reinterpret_cast<const bool*>(ptr));
case QMetaType::Int:
@@ -379,8 +381,10 @@ QQmlContextData *QV8Engine::callingContext()
// [Any other object] -> QVariantMap(...)
QVariant QV8Engine::toBasicVariant(const QV4::ValueRef value)
{
- if (value->isNullOrUndefined())
+ if (value->isUndefined())
return QVariant();
+ if (value->isNull())
+ return QVariant(QMetaType::VoidStar, (void *)0);
if (value->isBoolean())
return value->booleanValue();
if (value->isInteger())
@@ -644,6 +648,8 @@ QV4::ReturnedValue QV8Engine::metaTypeToJS(int type, const void *data)
case QMetaType::UnknownType:
case QMetaType::Void:
return QV4::Encode::undefined();
+ case QMetaType::VoidStar:
+ return QV4::Encode::null();
case QMetaType::Bool:
return QV4::Encode(*reinterpret_cast<const bool*>(data));
case QMetaType::Int: