aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4objectiterator_p.h
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-09-08 22:29:47 +0200
committerLars Knoll <lars.knoll@qt.io>2018-09-09 15:52:02 +0000
commit009a125d07448428a00abec70a894febe759adec (patch)
treec3c7411073517ce1931e4968f9928085d00782f6 /src/qml/jsruntime/qv4objectiterator_p.h
parent5d470f51214b273951cc7612ee018fc347716836 (diff)
Fix ownKey iteration over Proxy objects
Change-Id: I045a4844c06df9232cc8b04485ab0a39bb990e3f Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4objectiterator_p.h')
-rw-r--r--src/qml/jsruntime/qv4objectiterator_p.h9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/qml/jsruntime/qv4objectiterator_p.h b/src/qml/jsruntime/qv4objectiterator_p.h
index 8d7b5512d4..0a5bcfc7ed 100644
--- a/src/qml/jsruntime/qv4objectiterator_p.h
+++ b/src/qml/jsruntime/qv4objectiterator_p.h
@@ -75,7 +75,8 @@ struct Q_QML_EXPORT ObjectIterator
object = static_cast<Object *>(scope.alloc());
this->flags = flags;
object->setM(o ? o->m() : nullptr);
- iterator = object->ownPropertyKeys();
+ if (o)
+ iterator = object->ownPropertyKeys(object);
}
~ObjectIterator()
{
@@ -93,6 +94,7 @@ namespace Heap {
#define ForInIteratorObjectMembers(class, Member) \
Member(class, Pointer, Object *, object) \
Member(class, Pointer, Object *, current) \
+ Member(class, Pointer, Object *, target) \
Member(class, NoMark, OwnPropertyKeyIterator *, iterator)
DECLARE_HEAP_OBJECT(ForInIteratorObject, Object) {
@@ -130,7 +132,10 @@ void Heap::ForInIteratorObject::init(QV4::Object *o)
return;
object.set(o->engine(), o->d());
current.set(o->engine(), o->d());
- iterator = o->ownPropertyKeys();
+ Scope scope(o);
+ ScopedObject obj(scope);
+ iterator = o->ownPropertyKeys(obj.getRef());
+ target.set(o->engine(), obj->d());
}