diff options
Diffstat (limited to 'src/declarative/qml/v8/qv8engine.cpp')
-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))); |