diff options
author | Lars Knoll <[email protected]> | 2014-04-29 16:46:12 +0200 |
---|---|---|
committer | Simon Hausmann <[email protected]> | 2014-07-22 13:49:05 +0200 |
commit | f78e0a52c46fd79794e3b2c04361babc2f06761a (patch) | |
tree | a4fba8a910a67c2c9201bf82c15f61aa72a713cf /src/qml | |
parent | 6d0dc43ee9c4b1bd337ef56503d4de35d8fff40d (diff) |
Move VariantObject over to new storage layout
Change-Id: I96a4ce5d3a3e4fdd29ba0aac1bd3361588457580
Reviewed-by: Simon Hausmann <[email protected]>
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/jsruntime/qv4engine_p.h | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4variantobject.cpp | 37 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4variantobject_p.h | 16 | ||||
-rw-r--r-- | src/qml/qml/qqmlvaluetypewrapper.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/v8/qv8engine.cpp | 10 |
5 files changed, 36 insertions, 31 deletions
diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h index 070aec7f6a..aa0825de7b 100644 --- a/src/qml/jsruntime/qv4engine_p.h +++ b/src/qml/jsruntime/qv4engine_p.h @@ -286,7 +286,7 @@ public: // calling preserve() on the object which removes it from this scarceResource list. class ScarceResourceData { public: - ScarceResourceData(const QVariant &data) : data(data) {} + ScarceResourceData(const QVariant &data = QVariant()) : data(data) {} QVariant data; QIntrusiveListNode node; }; diff --git a/src/qml/jsruntime/qv4variantobject.cpp b/src/qml/jsruntime/qv4variantobject.cpp index 6937368f87..269a2b4b48 100644 --- a/src/qml/jsruntime/qv4variantobject.cpp +++ b/src/qml/jsruntime/qv4variantobject.cpp @@ -53,18 +53,15 @@ DEFINE_OBJECT_VTABLE(VariantObject); VariantObject::VariantObject(InternalClass *ic) : Object(ic) - , ExecutionEngine::ScarceResourceData(QVariant()) - , m_vmePropertyReferenceCount(0) { } VariantObject::VariantObject(ExecutionEngine *engine, const QVariant &value) : Object(engine->variantClass) - , ExecutionEngine::ScarceResourceData(value) - , m_vmePropertyReferenceCount(0) { + d()->data = value; if (isScarce()) - engine->scarceResources.insert(this); + engine->scarceResources.insert(d()); } QVariant VariantObject::toVariant(const QV4::ValueRef v) @@ -91,7 +88,7 @@ QVariant VariantObject::toVariant(const QV4::ValueRef v) bool VariantObject::isScarce() const { - QVariant::Type t = ExecutionEngine::ScarceResourceData::data.type(); + QVariant::Type t = d()->data.type(); return t == QVariant::Pixmap || t == QVariant::Image; } @@ -99,7 +96,7 @@ void VariantObject::destroy(Managed *that) { VariantObject *v = static_cast<VariantObject *>(that); if (v->isScarce()) - v->node.remove(); + v->d()->node.remove(); v->~VariantObject(); } @@ -109,31 +106,31 @@ bool VariantObject::isEqualTo(Managed *m, Managed *other) assert(lv); if (QV4::VariantObject *rv = other->as<QV4::VariantObject>()) - return lv->ExecutionEngine::ScarceResourceData::data == rv->ExecutionEngine::ScarceResourceData::data; + return lv->d()->data == rv->d()->data; if (QV4::QmlValueTypeWrapper *v = other->as<QmlValueTypeWrapper>()) - return v->isEqual(lv->ExecutionEngine::ScarceResourceData::data); + return v->isEqual(lv->d()->data); return false; } void VariantObject::addVmePropertyReference() { - if (isScarce() && ++m_vmePropertyReferenceCount == 1) { + if (isScarce() && ++d()->vmePropertyReferenceCount == 1) { // remove from the ep->scarceResources list // since it is now no longer eligible to be // released automatically by the engine. - node.remove(); + d()->node.remove(); } } void VariantObject::removeVmePropertyReference() { - if (isScarce() && --m_vmePropertyReferenceCount == 0) { + if (isScarce() && --d()->vmePropertyReferenceCount == 0) { // and add to the ep->scarceResources list // since it is now eligible to be released // automatically by the engine. - internalClass()->engine->scarceResources.insert(this); + internalClass()->engine->scarceResources.insert(d()); } } @@ -156,7 +153,7 @@ QV4::ReturnedValue VariantPrototype::method_preserve(CallContext *ctx) Scope scope(ctx); Scoped<VariantObject> o(scope, ctx->callData->thisObject.as<QV4::VariantObject>()); if (o && o->isScarce()) - o->node.remove(); + o->d()->node.remove(); return Encode::undefined(); } @@ -166,8 +163,8 @@ QV4::ReturnedValue VariantPrototype::method_destroy(CallContext *ctx) Scoped<VariantObject> o(scope, ctx->callData->thisObject.as<QV4::VariantObject>()); if (o) { if (o->isScarce()) - o->node.remove(); - o->ExecutionEngine::ScarceResourceData::data = QVariant(); + o->d()->node.remove(); + o->d()->data = QVariant(); } return Encode::undefined(); } @@ -178,9 +175,9 @@ QV4::ReturnedValue VariantPrototype::method_toString(CallContext *ctx) Scoped<VariantObject> o(scope, ctx->callData->thisObject.as<QV4::VariantObject>()); if (!o) return Encode::undefined(); - QString result = o->ExecutionEngine::ScarceResourceData::data.toString(); - if (result.isEmpty() && !o->ExecutionEngine::ScarceResourceData::data.canConvert(QVariant::String)) - result = QString::fromLatin1("QVariant(%0)").arg(QString::fromLatin1(o->ExecutionEngine::ScarceResourceData::data.typeName())); + QString result = o->d()->data.toString(); + if (result.isEmpty() && !o->d()->data.canConvert(QVariant::String)) + result = QString::fromLatin1("QVariant(%0)").arg(QString::fromLatin1(o->d()->data.typeName())); return Encode(ctx->engine->newString(result)); } @@ -189,7 +186,7 @@ QV4::ReturnedValue VariantPrototype::method_valueOf(CallContext *ctx) Scope scope(ctx); Scoped<VariantObject> o(scope, ctx->callData->thisObject.as<QV4::VariantObject>()); if (o) { - QVariant v = o->ExecutionEngine::ScarceResourceData::data; + QVariant v = o->d()->data; switch (v.type()) { case QVariant::Invalid: return Encode::undefined(); diff --git a/src/qml/jsruntime/qv4variantobject_p.h b/src/qml/jsruntime/qv4variantobject_p.h index 656608d49b..ab2ef55e15 100644 --- a/src/qml/jsruntime/qv4variantobject_p.h +++ b/src/qml/jsruntime/qv4variantobject_p.h @@ -64,10 +64,19 @@ QT_BEGIN_NAMESPACE namespace QV4 { -struct VariantObject : Object, public ExecutionEngine::ScarceResourceData +struct VariantObject : Object { - V4_OBJECT -public: + struct Data : Object::Data, public ExecutionEngine::ScarceResourceData + { + int vmePropertyReferenceCount; + }; + struct __Data : public ExecutionEngine::ScarceResourceData + { + int vmePropertyReferenceCount; + } __data; + + V4_OBJECT_NEW + VariantObject(InternalClass *ic); VariantObject(ExecutionEngine *engine, const QVariant &value); @@ -76,7 +85,6 @@ public: void addVmePropertyReference(); void removeVmePropertyReference(); bool isScarce() const; - int m_vmePropertyReferenceCount; static void destroy(Managed *that); static bool isEqualTo(Managed *m, Managed *other); diff --git a/src/qml/qml/qqmlvaluetypewrapper.cpp b/src/qml/qml/qqmlvaluetypewrapper.cpp index db35171528..b56b379488 100644 --- a/src/qml/qml/qqmlvaluetypewrapper.cpp +++ b/src/qml/qml/qqmlvaluetypewrapper.cpp @@ -197,7 +197,7 @@ bool QmlValueTypeWrapper::isEqualTo(Managed *m, Managed *other) assert(lv); if (QV4::VariantObject *rv = other->as<VariantObject>()) - return lv->isEqual(rv->ExecutionEngine::ScarceResourceData::data); + return lv->isEqual(rv->d()->data); if (QV4::QmlValueTypeWrapper *v = other->as<QmlValueTypeWrapper>()) return lv->isEqual(v->toVariant()); diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp index e5189202c5..178eeb2c64 100644 --- a/src/qml/qml/v8/qv8engine.cpp +++ b/src/qml/qml/v8/qv8engine.cpp @@ -130,7 +130,7 @@ QVariant QV8Engine::toVariant(const QV4::ValueRef value, int typeHint) QV4::Scope scope(m_v4Engine); if (QV4::VariantObject *v = value->as<QV4::VariantObject>()) - return v->QV4::ExecutionEngine::ScarceResourceData::data; + return v->d()->data; if (typeHint == QVariant::Bool) return QVariant(value->toBoolean()); @@ -882,7 +882,7 @@ bool QV8Engine::metaTypeFromJS(const QV4::ValueRef value, int type, void *data) return true; if (value->as<QV4::VariantObject>() && name.endsWith('*')) { int valueType = QMetaType::type(name.left(name.size()-1)); - QVariant &var = value->as<QV4::VariantObject>()->QV4::ExecutionEngine::ScarceResourceData::data; + QVariant &var = value->as<QV4::VariantObject>()->d()->data; if (valueType == var.userType()) { // We have T t, T* is requested, so return &t. *reinterpret_cast<void* *>(data) = var.data(); @@ -893,7 +893,7 @@ bool QV8Engine::metaTypeFromJS(const QV4::ValueRef value, int type, void *data) while (proto) { bool canCast = false; if (QV4::VariantObject *vo = proto->as<QV4::VariantObject>()) { - const QVariant &v = vo->QV4::ExecutionEngine::ScarceResourceData::data; + const QVariant &v = vo->d()->data; canCast = (type == v.userType()) || (valueType && (valueType == v.userType())); } else if (proto->as<QV4::QObjectWrapper>()) { @@ -969,7 +969,7 @@ QVariant QV8Engine::variantFromJS(const QV4::ValueRef value, if (QV4::RegExpObject *re = value->as<QV4::RegExpObject>()) return re->toQRegExp(); if (QV4::VariantObject *v = value->as<QV4::VariantObject>()) - return v->QV4::ExecutionEngine::ScarceResourceData::data; + return v->d()->data; if (value->as<QV4::QObjectWrapper>()) return qVariantFromValue(qtObjectFromJS(value)); if (QV4::QmlValueTypeWrapper *v = value->as<QV4::QmlValueTypeWrapper>()) @@ -1003,7 +1003,7 @@ QObject *QV8Engine::qtObjectFromJS(const QV4::ValueRef value) QV4::Scoped<QV4::VariantObject> v(scope, value); if (v) { - QVariant variant = v->QV4::ExecutionEngine::ScarceResourceData::data; + QVariant variant = v->d()->data; int type = variant.userType(); if (type == QMetaType::QObjectStar) return *reinterpret_cast<QObject* const *>(variant.constData()); |