diff options
author | Lars Knoll <lars.knoll@digia.com> | 2014-04-29 11:10:35 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-07-22 13:49:03 +0200 |
commit | fdc26425024132c5ffe37a53b7420da57b6af187 (patch) | |
tree | d7eef50fd7499a06960a3f3a7a26454ce344828d /src | |
parent | eedd22f7dd8330a767b73d008d3a60eed77cd900 (diff) |
Convert ObjectIterator to new storage scheme
Change-Id: I35631089e6791349ade08c6ed063f1e8ab1bdaea
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/jsapi/qjsvalueiterator.cpp | 10 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4objectiterator.cpp | 4 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4objectiterator_p.h | 28 |
3 files changed, 22 insertions, 20 deletions
diff --git a/src/qml/jsapi/qjsvalueiterator.cpp b/src/qml/jsapi/qjsvalueiterator.cpp index f186dde630..7e2ea5d104 100644 --- a/src/qml/jsapi/qjsvalueiterator.cpp +++ b/src/qml/jsapi/qjsvalueiterator.cpp @@ -108,8 +108,8 @@ QJSValueIterator::QJSValueIterator(const QJSValue& object) return; QV4::Scope scope(v4); QV4::Scoped<QV4::ForEachIteratorObject> it(scope, d_ptr->iterator.value()); - it->data.it.flags = QV4::ObjectIterator::NoFlags; - it->data.it.next(d_ptr->nextName, &d_ptr->nextIndex, &d_ptr->nextProperty, &d_ptr->nextAttributes); + it->d()->it.flags = QV4::ObjectIterator::NoFlags; + it->d()->it.next(d_ptr->nextName, &d_ptr->nextIndex, &d_ptr->nextProperty, &d_ptr->nextAttributes); } /*! @@ -155,7 +155,7 @@ bool QJSValueIterator::next() return false; QV4::Scope scope(v4); QV4::Scoped<QV4::ForEachIteratorObject> it(scope, d_ptr->iterator.value()); - it->data.it.next(d_ptr->nextName, &d_ptr->nextIndex, &d_ptr->nextProperty, &d_ptr->nextAttributes); + it->d()->it.next(d_ptr->nextName, &d_ptr->nextIndex, &d_ptr->nextProperty, &d_ptr->nextAttributes); return !!d_ptr->currentName || d_ptr->currentIndex != UINT_MAX; } @@ -229,8 +229,8 @@ QJSValueIterator& QJSValueIterator::operator=(QJSValue& object) QV4::ScopedObject o(scope, jsp->value); d_ptr->iterator = v4->newForEachIteratorObject(v4->currentContext(), o)->asReturnedValue(); QV4::Scoped<QV4::ForEachIteratorObject> it(scope, d_ptr->iterator.value()); - it->data.it.flags = QV4::ObjectIterator::NoFlags; - it->data.it.next(d_ptr->nextName, &d_ptr->nextIndex, &d_ptr->nextProperty, &d_ptr->nextAttributes); + it->d()->it.flags = QV4::ObjectIterator::NoFlags; + it->d()->it.next(d_ptr->nextName, &d_ptr->nextIndex, &d_ptr->nextProperty, &d_ptr->nextAttributes); return *this; } diff --git a/src/qml/jsruntime/qv4objectiterator.cpp b/src/qml/jsruntime/qv4objectiterator.cpp index e5f693c323..b0219cdff4 100644 --- a/src/qml/jsruntime/qv4objectiterator.cpp +++ b/src/qml/jsruntime/qv4objectiterator.cpp @@ -197,7 +197,7 @@ DEFINE_OBJECT_VTABLE(ForEachIteratorObject); void ForEachIteratorObject::markObjects(Managed *that, ExecutionEngine *e) { ForEachIteratorObject *o = static_cast<ForEachIteratorObject *>(that); - o->workArea[0].mark(e); - o->workArea[1].mark(e); + o->d()->workArea[0].mark(e); + o->d()->workArea[1].mark(e); Object::markObjects(that, e); } diff --git a/src/qml/jsruntime/qv4objectiterator_p.h b/src/qml/jsruntime/qv4objectiterator_p.h index b914990ccd..05909742f7 100644 --- a/src/qml/jsruntime/qv4objectiterator_p.h +++ b/src/qml/jsruntime/qv4objectiterator_p.h @@ -83,29 +83,31 @@ struct Q_QML_EXPORT ObjectIterator }; struct ForEachIteratorObject: Object { - V4_OBJECT - Q_MANAGED_TYPE(ForeachIteratorObject) - struct Data { - Data(Value *scratch1, Value *scratch2, const ObjectRef o, uint flags) - : it(scratch1, scratch2, o, flags) {} - Data(Scope &scope, const ObjectRef o, uint flags) - : it (scope, o, flags) {} + struct Data : Object::Data { + Data(const ObjectRef o, uint flags) + : it(workArea, workArea + 1, o, flags) {} ObjectIterator it; + Value workArea[2]; }; - Data data; + struct _Data { + _Data(const ObjectRef o, uint flags) + : it(workArea, workArea + 1, o, flags) {} + ObjectIterator it; + Value workArea[2]; + } __data; + V4_OBJECT_NEW + Q_MANAGED_TYPE(ForeachIteratorObject) ForEachIteratorObject(ExecutionContext *ctx, const ObjectRef o) - : Object(ctx->engine), data(workArea, workArea + 1, - o, ObjectIterator::EnumerableOnly|ObjectIterator::WithProtoChain) { + : Object(ctx->engine) + , __data(o, ObjectIterator::EnumerableOnly|ObjectIterator::WithProtoChain) { setVTable(staticVTable()); } - ReturnedValue nextPropertyName() { return data.it.nextPropertyNameAsString(); } + ReturnedValue nextPropertyName() { return d()->it.nextPropertyNameAsString(); } protected: static void markObjects(Managed *that, ExecutionEngine *e); - - Value workArea[2]; }; |