diff options
author | Matthew Vogt <matthew.vogt@nokia.com> | 2012-01-19 15:54:24 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-19 23:19:26 +0100 |
commit | b1da5cb07922e786bd3223317651284b73159e82 (patch) | |
tree | 92804932e350688e161db58613f013832a18b1a8 /src/declarative | |
parent | 3121a0d41006d4b5f12c6a119b99f9917ceea760 (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/declarative')
-rw-r--r-- | src/declarative/qml/v8/qv8engine.cpp | 15 |
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))); |