diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-09-25 13:34:23 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-28 13:33:27 +0200 |
commit | abd82c68d564c97a4452a3afa2d63320e7292b30 (patch) | |
tree | 794e7b5b4549ac84aac63e6dae429283a36b1d79 /src/qml/qml | |
parent | cf2a253f2f60c9f0c61682527d80143e72b355d4 (diff) |
Make API of QV4::JsonObject GC clean
Change-Id: Ie7f2d63402c9486b30caf5866af8c747026c091d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/qml')
-rw-r--r-- | src/qml/qml/v8/qv8engine.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp index e87f1b3dc0..c6bce579a2 100644 --- a/src/qml/qml/v8/qv8engine.cpp +++ b/src/qml/qml/v8/qv8engine.cpp @@ -121,7 +121,6 @@ QVariant QV8Engine::toVariant(const QV4::ValueRef value, int typeHint) { Q_ASSERT (!value->isEmpty()); QV4::Scope scope(m_v4Engine); -// QV4::ScopedValue v(scope, value); if (QV4::VariantObject *v = value->as<QV4::VariantObject>()) return v->data; @@ -135,7 +134,8 @@ QVariant QV8Engine::toVariant(const QV4::ValueRef value, int typeHint) if (typeHint == qMetaTypeId<QJSValue>()) return QVariant::fromValue(QJSValue(new QJSValuePrivate(m_v4Engine, value))); - if (QV4::Object *object = value->asObject()) { + if (value->asObject()) { + QV4::ScopedObject object(scope, value); if (typeHint == QMetaType::QJsonObject && !value->asArrayObject() && !value->asFunctionObject()) { return QVariant::fromValue(QV4::JsonObject::toJsonObject(object)); @@ -150,11 +150,11 @@ QVariant QV8Engine::toVariant(const QV4::ValueRef value, int typeHint) } else if (QV4::QmlListWrapper *l = object->as<QV4::QmlListWrapper>()) { return l->toVariant(); } else if (object->isListType()) - return QV4::SequencePrototype::toVariant(object); + return QV4::SequencePrototype::toVariant(object.getPointer()); } - if (QV4::ArrayObject *a = value->asArrayObject()) { - QV4::Scope scope(a->engine()); + if (value->asArrayObject()) { + QV4::ScopedArrayObject a(scope, value); if (typeHint == qMetaTypeId<QList<QObject *> >()) { QList<QObject *> list; uint32_t length = a->arrayLength(); @@ -814,12 +814,16 @@ bool QV8Engine::metaTypeFromJS(const QV4::ValueRef value, int type, void *data) case QMetaType::QJsonValue: *reinterpret_cast<QJsonValue *>(data) = QV4::JsonObject::toJsonValue(value); return true; - case QMetaType::QJsonObject: - *reinterpret_cast<QJsonObject *>(data) = QV4::JsonObject::toJsonObject(value->asObject()); + case QMetaType::QJsonObject: { + QV4::ScopedObject o(scope, value); + *reinterpret_cast<QJsonObject *>(data) = QV4::JsonObject::toJsonObject(o); return true; - case QMetaType::QJsonArray: - *reinterpret_cast<QJsonArray *>(data) = QV4::JsonObject::toJsonArray(value->asArrayObject()); + } + case QMetaType::QJsonArray: { + QV4::ScopedArrayObject a(scope, value); + *reinterpret_cast<QJsonArray *>(data) = QV4::JsonObject::toJsonArray(a); return true; + } default: ; } |