aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/types
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-09-11 21:48:23 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-18 13:13:36 +0200
commit6c9f1c8ed93374c16ca6ac540f39e98b451be0d8 (patch)
tree476d0046c6016a8cd62bfc29ed9697d98e98f738 /src/qml/types
parentbdb27b96acbd38531879378c48959a5a1cd60963 (diff)
Use a ReturnedValue for Managed::getIndexed()
Change-Id: I0371ed21c4ef99564d3ffa1082dd109e890a78bf Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/types')
-rw-r--r--src/qml/types/qqmldelegatemodel.cpp11
-rw-r--r--src/qml/types/qqmllistmodel.cpp39
2 files changed, 34 insertions, 16 deletions
diff --git a/src/qml/types/qqmldelegatemodel.cpp b/src/qml/types/qqmldelegatemodel.cpp
index bb75a47eef..3e7b23161c 100644
--- a/src/qml/types/qqmldelegatemodel.cpp
+++ b/src/qml/types/qqmldelegatemodel.cpp
@@ -1676,9 +1676,12 @@ int QQmlDelegateModelItemMetaType::parseGroups(const QV4::Value &groups) const
if (index != -1)
groupFlags |= 2 << index;
} else if (QV4::ArrayObject *array = groups.asArrayObject()) {
+ QV4::Scope scope(array->engine());
+ QV4::ScopedValue v(scope);
uint arrayLength = array->arrayLength();
for (uint i = 0; i < arrayLength; ++i) {
- const QString groupName = array->getIndexed(i).toQStringNoThrow();
+ v = array->getIndexed(i);
+ const QString groupName = v->toQStringNoThrow();
int index = groupNames.indexOf(groupName);
if (index != -1)
groupFlags |= 2 << index;
@@ -3143,7 +3146,7 @@ public:
virtual quint32 count() const = 0;
virtual const QQmlChangeSet::Change &at(int index) const = 0;
- static QV4::Value getIndexed(QV4::Managed *m, uint index, bool *hasProperty)
+ static QV4::ReturnedValue getIndexed(QV4::Managed *m, uint index, bool *hasProperty)
{
QV4::ExecutionEngine *v4 = m->engine();
QQmlDelegateModelGroupChangeArray *array = m->as<QQmlDelegateModelGroupChangeArray>();
@@ -3153,7 +3156,7 @@ public:
if (index >= array->count()) {
if (hasProperty)
*hasProperty = false;
- return QV4::Value::undefinedValue();
+ return QV4::Value::undefinedValue().asReturnedValue();
}
const QQmlChangeSet::Change &change = array->at(index);
@@ -3165,7 +3168,7 @@ public:
if (hasProperty)
*hasProperty = true;
- return QV4::Value::fromObject(object);
+ return QV4::Value::fromObject(object).asReturnedValue();
}
static QV4::ReturnedValue get(QV4::Managed *m, QV4::String *name, bool *hasProperty)
diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp
index 067d91ea7f..87e907e244 100644
--- a/src/qml/types/qqmllistmodel.cpp
+++ b/src/qml/types/qqmllistmodel.cpp
@@ -414,6 +414,9 @@ void ListModel::set(int elementIndex, QV4::Object *object, QVector<int> *roles,
ListElement *e = elements[elementIndex];
QV4::ExecutionEngine *v4 = object->engine();
+ QV4::Scope scope(v4);
+ QV4::Scoped<QV4::Object> o(scope);
+
QV4::ObjectIterator it(object, QV4::ObjectIterator::WithProtoChain|QV4::ObjectIterator::EnumerableOnly);
while (1) {
QV4::Value propertyValue;
@@ -437,8 +440,8 @@ void ListModel::set(int elementIndex, QV4::Object *object, QVector<int> *roles,
int arrayLength = a->arrayLength();
for (int j=0 ; j < arrayLength ; ++j) {
- QV4::Object *subObject = a->getIndexed(j).asObject();
- subModel->append(subObject, eng);
+ o = a->getIndexed(j);
+ subModel->append(o.getPointer(), eng);
}
roleIndex = e->setListProperty(r, subModel);
@@ -480,6 +483,9 @@ void ListModel::set(int elementIndex, QV4::Object *object, QV8Engine *eng)
ListElement *e = elements[elementIndex];
QV4::ExecutionEngine *v4 = object->engine();
+ QV4::Scope scope(v4);
+ QV4::Scoped<QV4::Object> o(scope);
+
QV4::ObjectIterator it(object, QV4::ObjectIterator::WithProtoChain|QV4::ObjectIterator::EnumerableOnly);
while (1) {
QV4::Value propertyValue;
@@ -504,8 +510,8 @@ void ListModel::set(int elementIndex, QV4::Object *object, QV8Engine *eng)
int arrayLength = a->arrayLength();
for (int j=0 ; j < arrayLength ; ++j) {
- QV4::Object *subObject = a->getIndexed(j).asObject();
- subModel->append(subObject, eng);
+ o = a->getIndexed(j);
+ subModel->append(o.getPointer(), eng);
}
e->setListPropertyFast(r, subModel);
@@ -1164,11 +1170,14 @@ int ListElement::setJsProperty(const ListLayout::Role &role, const QV4::Value &d
roleIndex = setDoubleProperty(role, d.asDouble());
} else if (QV4::ArrayObject *a = d.asArrayObject()) {
if (role.type == ListLayout::Role::List) {
+ QV4::Scope scope(a->engine());
+ QV4::Scoped<QV4::Object> o(scope);
+
ListModel *subModel = new ListModel(role.subLayout, 0, -1);
int arrayLength = a->arrayLength();
for (int j=0 ; j < arrayLength ; ++j) {
- QV4::Object *subObject = a->getIndexed(j).asObject();
- subModel->append(subObject, eng);
+ o = a->getIndexed(j);
+ subModel->append(o.getPointer(), eng);
}
roleIndex = setListProperty(role, subModel);
} else {
@@ -1924,14 +1933,17 @@ void QQmlListModel::insert(QQmlV4Function *args)
QV4::Value arg1 = (*args)[1];
if (QV4::ArrayObject *objectArray = arg1.asArrayObject()) {
+ QV4::Scope scope(objectArray->engine());
+ QV4::Scoped<QV4::Object> argObject(scope);
+
int objectArrayLength = objectArray->arrayLength();
for (int i=0 ; i < objectArrayLength ; ++i) {
- QV4::Object *argObject = objectArray->getIndexed(i).asObject();
+ argObject = objectArray->getIndexed(i);
if (m_dynamicRoles) {
- m_modelObjects.insert(index+i, DynamicRoleModelNode::create(args->engine()->variantMapFromJS(argObject), this));
+ m_modelObjects.insert(index+i, DynamicRoleModelNode::create(args->engine()->variantMapFromJS(argObject.getPointer()), this));
} else {
- m_listModel->insert(index+i, argObject, args->engine());
+ m_listModel->insert(index+i, argObject.getPointer(), args->engine());
}
}
emitItemsInserted(index, objectArrayLength);
@@ -2022,16 +2034,19 @@ void QQmlListModel::append(QQmlV4Function *args)
QV4::Value arg = (*args)[0];
if (QV4::ArrayObject *objectArray = arg.asArrayObject()) {
+ QV4::Scope scope(objectArray->engine());
+ QV4::Scoped<QV4::Object> argObject(scope);
+
int objectArrayLength = objectArray->arrayLength();
int index = count();
for (int i=0 ; i < objectArrayLength ; ++i) {
- QV4::Object *argObject = objectArray->getIndexed(i).asObject();
+ argObject = objectArray->getIndexed(i);
if (m_dynamicRoles) {
- m_modelObjects.append(DynamicRoleModelNode::create(args->engine()->variantMapFromJS(argObject), this));
+ m_modelObjects.append(DynamicRoleModelNode::create(args->engine()->variantMapFromJS(argObject.getPointer()), this));
} else {
- m_listModel->append(argObject, args->engine());
+ m_listModel->append(argObject.getPointer(), args->engine());
}
}