aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-09-25 13:34:23 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-28 13:33:27 +0200
commitabd82c68d564c97a4452a3afa2d63320e7292b30 (patch)
tree794e7b5b4549ac84aac63e6dae429283a36b1d79 /src/qml/qml
parentcf2a253f2f60c9f0c61682527d80143e72b355d4 (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.cpp22
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:
;
}