aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2014-05-09 15:23:18 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2014-07-22 13:49:19 +0200
commit2eb5416f5465d0e9b4377b1f57d3b888201d519b (patch)
treeec352316a9e3c76f7bc0f5de3aa106c81086a17e
parent903e04deadb4b8f13a77c8a741c0f937beca0640 (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.cpp45
-rw-r--r--src/qml/jsruntime/qv4argumentsobject_p.h3
-rw-r--r--src/qml/jsruntime/qv4engine.cpp9
-rw-r--r--src/qml/jsruntime/qv4object.cpp17
-rw-r--r--src/qml/jsruntime/qv4object_p.h3
-rw-r--r--src/qml/jsruntime/qv4objectiterator_p.h13
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp2
-rw-r--r--src/qml/jsruntime/qv4sequenceobject.cpp60
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