diff options
author | Lars Knoll <lars.knoll@digia.com> | 2014-05-09 15:23:18 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-07-22 13:49:19 +0200 |
commit | 2eb5416f5465d0e9b4377b1f57d3b888201d519b (patch) | |
tree | ec352316a9e3c76f7bc0f5de3aa106c81086a17e | |
parent | 903e04deadb4b8f13a77c8a741c0f937beca0640 (diff) |
Convert the last Managed types to the new constructor syntax
Change-Id: I11701c586d4715c08feba4650e12904c3fa7ca27
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
-rw-r--r-- | src/qml/jsruntime/qv4argumentsobject.cpp | 45 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4argumentsobject_p.h | 3 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 9 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4object.cpp | 17 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4object_p.h | 3 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4objectiterator_p.h | 13 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4runtime.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4sequenceobject.cpp | 60 |
8 files changed, 63 insertions, 89 deletions
diff --git a/src/qml/jsruntime/qv4argumentsobject.cpp b/src/qml/jsruntime/qv4argumentsobject.cpp index 11e15d8d1b..edd7f3ad14 100644 --- a/src/qml/jsruntime/qv4argumentsobject.cpp +++ b/src/qml/jsruntime/qv4argumentsobject.cpp @@ -46,38 +46,37 @@ using namespace QV4; DEFINE_OBJECT_VTABLE(ArgumentsObject); -ArgumentsObject::ArgumentsObject(CallContext *context) - : Object(context->d()->strictMode ? context->d()->engine->strictArgumentsObjectClass : context->d()->engine->argumentsObjectClass) +ArgumentsObject::Data::Data(CallContext *context) + : Object::Data(context->d()->strictMode ? context->d()->engine->strictArgumentsObjectClass : context->d()->engine->argumentsObjectClass) + , context(context) + , fullyCreated(false) { - d()->context = context; - d()->fullyCreated = false; + Q_ASSERT(internalClass->vtable == staticVTable()); ExecutionEngine *v4 = context->d()->engine; Scope scope(v4); - ScopedObject protectThis(scope, this); + Scoped<ArgumentsObject> args(scope, this); - setArrayType(ArrayData::Complex); + args->setArrayType(ArrayData::Complex); if (context->d()->strictMode) { - Q_ASSERT(CalleePropertyIndex == internalClass()->find(context->d()->engine->id_callee)); - Q_ASSERT(CallerPropertyIndex == internalClass()->find(context->d()->engine->id_caller)); - propertyAt(CalleePropertyIndex)->value = v4->thrower; - propertyAt(CalleePropertyIndex)->set = v4->thrower; - propertyAt(CallerPropertyIndex)->value = v4->thrower; - propertyAt(CallerPropertyIndex)->set = v4->thrower; - - arrayReserve(context->d()->callData->argc); - arrayPut(0, context->d()->callData->args, context->d()->callData->argc); - d()->fullyCreated = true; + Q_ASSERT(CalleePropertyIndex == args->internalClass()->find(context->d()->engine->id_callee)); + Q_ASSERT(CallerPropertyIndex == args->internalClass()->find(context->d()->engine->id_caller)); + args->propertyAt(CalleePropertyIndex)->value = v4->thrower; + args->propertyAt(CalleePropertyIndex)->set = v4->thrower; + args->propertyAt(CallerPropertyIndex)->value = v4->thrower; + args->propertyAt(CallerPropertyIndex)->set = v4->thrower; + + args->arrayReserve(context->d()->callData->argc); + args->arrayPut(0, context->d()->callData->args, context->d()->callData->argc); + args->d()->fullyCreated = true; } else { - setHasAccessorProperty(); - Q_ASSERT(CalleePropertyIndex == internalClass()->find(context->d()->engine->id_callee)); - memberData()[CalleePropertyIndex] = context->function->asReturnedValue(); + args->setHasAccessorProperty(); + Q_ASSERT(CalleePropertyIndex == args->internalClass()->find(context->d()->engine->id_callee)); + args->memberData()[CalleePropertyIndex] = context->function->asReturnedValue(); } - Q_ASSERT(LengthPropertyIndex == internalClass()->find(context->d()->engine->id_length)); - memberData()[LengthPropertyIndex] = Primitive::fromInt32(context->realArgumentCount); - - Q_ASSERT(internalClass()->vtable == staticVTable()); + Q_ASSERT(LengthPropertyIndex == args->internalClass()->find(context->d()->engine->id_length)); + args->memberData()[LengthPropertyIndex] = Primitive::fromInt32(context->realArgumentCount); } void ArgumentsObject::fullyCreate() diff --git a/src/qml/jsruntime/qv4argumentsobject_p.h b/src/qml/jsruntime/qv4argumentsobject_p.h index 3b03008b69..c56effee77 100644 --- a/src/qml/jsruntime/qv4argumentsobject_p.h +++ b/src/qml/jsruntime/qv4argumentsobject_p.h @@ -93,6 +93,7 @@ struct ArgumentsSetterFunction: FunctionObject struct ArgumentsObject: Object { struct Data : Object::Data { + Data(CallContext *context); CallContext *context; bool fullyCreated; Members mappedArguments; @@ -109,8 +110,6 @@ struct ArgumentsObject: Object { bool fullyCreated() const { return d()->fullyCreated; } Members &mappedArguments() { return d()->mappedArguments; } - ArgumentsObject(CallContext *context); - static bool isNonStrictArgumentsObject(Managed *m) { return m->internalClass()->vtable->type == Type_ArgumentsObject && !static_cast<ArgumentsObject *>(m)->context()->d()->strictMode; diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index a9cbdaea56..58520ad18c 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -485,13 +485,15 @@ ExecutionContext *ExecutionEngine::pushGlobalContext() Returned<Object> *ExecutionEngine::newObject() { - Object *object = new (memoryManager) Object(this); + Scope scope(this); + ScopedObject object(scope, new (this) Object::Data(this)); return object->asReturned<Object>(); } Returned<Object> *ExecutionEngine::newObject(InternalClass *internalClass) { - Object *object = new (memoryManager) Object(internalClass); + Scope scope(this); + ScopedObject object(scope, new (this) Object::Data(internalClass)); return object->asReturned<Object>(); } @@ -666,7 +668,8 @@ Returned<Object> *ExecutionEngine::newVariantObject(const QVariant &v) Returned<Object> *ExecutionEngine::newForEachIteratorObject(ExecutionContext *ctx, Object *o) { - Object *obj = new (memoryManager) ForEachIteratorObject(ctx, o); + Scope scope(this); + ScopedObject obj(scope, new (this) ForEachIteratorObject::Data(ctx, o)); return obj->asReturned<Object>(); } diff --git a/src/qml/jsruntime/qv4object.cpp b/src/qml/jsruntime/qv4object.cpp index d8570758df..e0f05a65f8 100644 --- a/src/qml/jsruntime/qv4object.cpp +++ b/src/qml/jsruntime/qv4object.cpp @@ -80,23 +80,6 @@ Object::Data::Data(InternalClass *internalClass) } } -Object::Object(ExecutionEngine *engine) - : Managed(engine->objectClass) -{ -} - -Object::Object(InternalClass *ic) - : Managed(ic) -{ - Q_ASSERT(internalClass()->vtable != &Managed::static_vtbl); - - if (internalClass()->size) { - Scope scope(engine()); - ScopedObject protectThis(scope, this); - memberData().ensureIndex(engine(), internalClass()->size); - } -} - bool Object::setPrototype(Object *proto) { Object *pp = proto; diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h index a1b107dbf0..3497f58a77 100644 --- a/src/qml/jsruntime/qv4object_p.h +++ b/src/qml/jsruntime/qv4object_p.h @@ -132,9 +132,6 @@ struct Q_QML_EXPORT Object: Managed { Property *propertyAt(uint index) const { return reinterpret_cast<Property *>(memberData().data() + index); } - Object(ExecutionEngine *engine); - Object(InternalClass *internalClass); - const ObjectVTable *vtable() const { return reinterpret_cast<const ObjectVTable *>(internalClass()->vtable); } Object *prototype() const { return internalClass()->prototype; } bool setPrototype(Object *proto); diff --git a/src/qml/jsruntime/qv4objectiterator_p.h b/src/qml/jsruntime/qv4objectiterator_p.h index 6a8431913d..fa2b2b725f 100644 --- a/src/qml/jsruntime/qv4objectiterator_p.h +++ b/src/qml/jsruntime/qv4objectiterator_p.h @@ -84,8 +84,11 @@ struct Q_QML_EXPORT ObjectIterator struct ForEachIteratorObject: Object { struct Data : Object::Data { - Data(Object *o, uint flags) - : it(workArea, workArea + 1, o, flags) {} + Data(ExecutionContext *ctx, Object *o) + : Object::Data(ctx->engine()) + , it(workArea, workArea + 1, o, ObjectIterator::EnumerableOnly|ObjectIterator::WithProtoChain) { + setVTable(staticVTable()); + } ObjectIterator it; Value workArea[2]; }; @@ -98,12 +101,6 @@ struct ForEachIteratorObject: Object { V4_OBJECT Q_MANAGED_TYPE(ForeachIteratorObject) - ForEachIteratorObject(ExecutionContext *ctx, Object *o) - : Object(ctx->d()->engine) - , __data(o, ObjectIterator::EnumerableOnly|ObjectIterator::WithProtoChain) { - setVTable(staticVTable()); - } - ReturnedValue nextPropertyName() { return d()->it.nextPropertyNameAsString(); } protected: diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp index e84e85c149..6dc3b1cd51 100644 --- a/src/qml/jsruntime/qv4runtime.cpp +++ b/src/qml/jsruntime/qv4runtime.cpp @@ -1192,7 +1192,7 @@ QV4::ReturnedValue Runtime::setupArgumentsObject(ExecutionContext *ctx) { Q_ASSERT(ctx->d()->type >= ExecutionContext::Type_CallContext); CallContext *c = static_cast<CallContext *>(ctx); - return (new (c->engine()->memoryManager) ArgumentsObject(c))->asReturnedValue(); + return (new (c->engine()) ArgumentsObject::Data(c))->asReturnedValue(); } #endif // V4_BOOTSTRAP diff --git a/src/qml/jsruntime/qv4sequenceobject.cpp b/src/qml/jsruntime/qv4sequenceobject.cpp index 9995bcc9a5..ed6e49034a 100644 --- a/src/qml/jsruntime/qv4sequenceobject.cpp +++ b/src/qml/jsruntime/qv4sequenceobject.cpp @@ -163,9 +163,33 @@ template <> bool convertValueToElement(const ValueRef value) } template <typename Container> -class QQmlSequence : public QV4::Object +struct QQmlSequence : public QV4::Object { - struct Data : QV4::Object::Data { + struct Data : Object::Data { + Data(QV4::ExecutionEngine *engine, const Container &container) + : Object::Data(InternalClass::create(engine, staticVTable(), engine->sequencePrototype.asObject())) + , container(container) + , propertyIndex(-1) + , isReference(false) + { + QV4::Scope scope(engine); + QV4::Scoped<QQmlSequence<Container> > o(scope, this); + o->setArrayType(ArrayData::Custom); + o->init(); + } + + Data(QV4::ExecutionEngine *engine, QObject *object, int propertyIndex) + : Object::Data(InternalClass::create(engine, staticVTable(), engine->sequencePrototype.asObject())) + , object(object) + , propertyIndex(propertyIndex) + , isReference(true) + { + QV4::Scope scope(engine); + QV4::Scoped<QQmlSequence<Container> > o(scope, this); + o->setArrayType(ArrayData::Custom); + o->loadReference(); + o->init(); + } mutable Container container; QPointer<QObject> object; int propertyIndex; @@ -181,34 +205,6 @@ class QQmlSequence : public QV4::Object V4_OBJECT Q_MANAGED_TYPE(QmlSequence) public: - QQmlSequence(QV4::ExecutionEngine *engine, const Container &container) - : QV4::Object(InternalClass::create(engine, staticVTable(), engine->sequencePrototype.asObject())) - { - d()->container = container; - d()->propertyIndex = -1; - d()->isReference = false; - - QV4::Scope scope(engine); - QV4::ScopedObject protectThis(scope, this); - Q_UNUSED(protectThis); - setArrayType(ArrayData::Custom); - init(); - } - - QQmlSequence(QV4::ExecutionEngine *engine, QObject *object, int propertyIndex) - : QV4::Object(InternalClass::create(engine, staticVTable(), engine->sequencePrototype.asObject())) - { - d()->object = object; - d()->propertyIndex = propertyIndex; - d()->isReference = true; - - QV4::Scope scope(engine); - QV4::ScopedObject protectThis(scope, this); - Q_UNUSED(protectThis); - setArrayType(ArrayData::Custom); - loadReference(); - init(); - } void init() { @@ -591,7 +587,7 @@ bool SequencePrototype::isSequenceType(int sequenceTypeId) #define NEW_REFERENCE_SEQUENCE(ElementType, ElementTypeName, SequenceType, unused) \ if (sequenceType == qMetaTypeId<SequenceType>()) { \ - QV4::Scoped<QV4::Object> obj(scope, new (engine->memoryManager) QQml##ElementTypeName##List(engine, object, propertyIndex)); \ + QV4::Scoped<QV4::Object> obj(scope, new (engine) QQml##ElementTypeName##List::Data(engine, object, propertyIndex)); \ return obj.asReturnedValue(); \ } else @@ -609,7 +605,7 @@ ReturnedValue SequencePrototype::newSequence(QV4::ExecutionEngine *engine, int s #define NEW_COPY_SEQUENCE(ElementType, ElementTypeName, SequenceType, unused) \ if (sequenceType == qMetaTypeId<SequenceType>()) { \ - QV4::Scoped<QV4::Object> obj(scope, new (engine->memoryManager) QQml##ElementTypeName##List(engine, v.value<SequenceType >())); \ + QV4::Scoped<QV4::Object> obj(scope, new (engine) QQml##ElementTypeName##List::Data(engine, v.value<SequenceType >())); \ return obj.asReturnedValue(); \ } else |