aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthew Vogt <matthew.vogt@nokia.com>2012-01-19 15:54:24 +1000
committerQt by Nokia <qt-info@nokia.com>2012-01-19 23:19:26 +0100
commitb1da5cb07922e786bd3223317651284b73159e82 (patch)
tree92804932e350688e161db58613f013832a18b1a8 /src
parent3121a0d41006d4b5f12c6a119b99f9917ceea760 (diff)
Assigning empty object to Q_PROPERTY(QVariantMap)
Correct the evaluation of an empty javascript object during assignment to a QVariantMap property. Task-number: QTBUG-23586 Change-Id: Ifa891a017690a36bd5837bc6b4dd0e47eb515a46 Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/declarative/qml/v8/qv8engine.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/declarative/qml/v8/qv8engine.cpp b/src/declarative/qml/v8/qv8engine.cpp
index 448734638f..dbe8fbe774 100644
--- a/src/declarative/qml/v8/qv8engine.cpp
+++ b/src/declarative/qml/v8/qv8engine.cpp
@@ -501,10 +501,6 @@ QVariant QV8Engine::toBasicVariant(v8::Handle<v8::Value> value)
if (!value->IsFunction()) {
v8::Context::Scope scope(context());
v8::Handle<v8::Object> object = value->ToObject();
- v8::Local<v8::Array> properties = object->GetPropertyNames();
- int length = properties->Length();
- if (length == 0)
- return QVariant();
return variantMapFromJS(object);
}
@@ -1088,14 +1084,19 @@ v8::Local<v8::Object> QV8Engine::variantMapToJS(const QVariantMap &vmap)
QVariantMap QV8Engine::variantMapFromJS(v8::Handle<v8::Object> jsObject)
{
QVariantMap result;
+
+ v8::HandleScope handleScope;
+ v8::Handle<v8::Array> propertyNames = jsObject->GetPropertyNames();
+ uint32_t length = propertyNames->Length();
+ if (length == 0)
+ return result;
+
int hash = jsObject->GetIdentityHash();
if (visitedConversionObjects.contains(hash))
return result; // Avoid recursion.
+
visitedConversionObjects.insert(hash);
- v8::HandleScope handleScope;
// TODO: Only object's own property names. Include non-enumerable properties.
- v8::Handle<v8::Array> propertyNames = jsObject->GetPropertyNames();
- uint32_t length = propertyNames->Length();
for (uint32_t i = 0; i < length; ++i) {
v8::Handle<v8::Value> name = propertyNames->Get(i);
result.insert(QJSConverter::toString(name->ToString()), variantFromJS(jsObject->Get(name)));