diff options
author | Erik Verbruggen <[email protected]> | 2016-10-05 12:18:20 +0200 |
---|---|---|
committer | Erik Verbruggen <[email protected]> | 2016-10-05 10:51:29 +0000 |
commit | a166367bd877a55e552e3dfe5cf2ee7fa1561100 (patch) | |
tree | 390b4596474306a1df94e0bd9bfe208f621f6be0 /src/qml/jsruntime/qv4variantobject.cpp | |
parent | 54765de17916948ef56a3fd1111e8c765c07155a (diff) |
QML: Move the ScarceResourceData from VariantObject onto the heap
So now VariantObject is nearly a trivial struct.
Change-Id: Ifc54c04d9686c03e12066c5287823dd3b1315d2a
Reviewed-by: Simon Hausmann <[email protected]>
Diffstat (limited to 'src/qml/jsruntime/qv4variantobject.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4variantobject.cpp | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/src/qml/jsruntime/qv4variantobject.cpp b/src/qml/jsruntime/qv4variantobject.cpp index 444c0a37e0..eff4db268c 100644 --- a/src/qml/jsruntime/qv4variantobject.cpp +++ b/src/qml/jsruntime/qv4variantobject.cpp @@ -52,18 +52,19 @@ DEFINE_OBJECT_VTABLE(VariantObject); Heap::VariantObject::VariantObject() { + scarceData = new ExecutionEngine::ScarceResourceData; } Heap::VariantObject::VariantObject(const QVariant &value) { - data = value; + scarceData = new ExecutionEngine::ScarceResourceData(value); if (isScarce()) - internalClass->engine->scarceResources.insert(this); + removeVmePropertyReference(); } bool VariantObject::Data::isScarce() const { - QVariant::Type t = data.type(); + QVariant::Type t = data().type(); return t == QVariant::Pixmap || t == QVariant::Image; } @@ -73,10 +74,10 @@ bool VariantObject::isEqualTo(Managed *m, Managed *other) QV4::VariantObject *lv = static_cast<QV4::VariantObject *>(m); if (QV4::VariantObject *rv = other->as<QV4::VariantObject>()) - return lv->d()->data == rv->d()->data; + return lv->d()->data() == rv->d()->data(); if (QV4::QQmlValueTypeWrapper *v = other->as<QQmlValueTypeWrapper>()) - return v->isEqual(lv->d()->data); + return v->isEqual(lv->d()->data()); return false; } @@ -87,7 +88,7 @@ void VariantObject::addVmePropertyReference() // remove from the ep->scarceResources list // since it is now no longer eligible to be // released automatically by the engine. - d()->node.remove(); + d()->addVmePropertyReference(); } } @@ -97,7 +98,7 @@ void VariantObject::removeVmePropertyReference() // and add to the ep->scarceResources list // since it is now eligible to be released // automatically by the engine. - internalClass()->engine->scarceResources.insert(d()); + d()->removeVmePropertyReference(); } } @@ -115,7 +116,7 @@ QV4::ReturnedValue VariantPrototype::method_preserve(CallContext *ctx) Scope scope(ctx); Scoped<VariantObject> o(scope, ctx->thisObject().as<QV4::VariantObject>()); if (o && o->d()->isScarce()) - o->d()->node.remove(); + o->d()->addVmePropertyReference(); return Encode::undefined(); } @@ -125,8 +126,8 @@ QV4::ReturnedValue VariantPrototype::method_destroy(CallContext *ctx) Scoped<VariantObject> o(scope, ctx->thisObject().as<QV4::VariantObject>()); if (o) { if (o->d()->isScarce()) - o->d()->node.remove(); - o->d()->data = QVariant(); + o->d()->addVmePropertyReference(); + o->d()->data() = QVariant(); } return Encode::undefined(); } @@ -137,9 +138,9 @@ QV4::ReturnedValue VariantPrototype::method_toString(CallContext *ctx) Scoped<VariantObject> o(scope, ctx->thisObject().as<QV4::VariantObject>()); if (!o) return Encode::undefined(); - QString result = o->d()->data.toString(); - if (result.isEmpty() && !o->d()->data.canConvert(QVariant::String)) - result = QStringLiteral("QVariant(%0)").arg(QString::fromLatin1(o->d()->data.typeName())); + QString result = o->d()->data().toString(); + if (result.isEmpty() && !o->d()->data().canConvert(QVariant::String)) + result = QStringLiteral("QVariant(%0)").arg(QString::fromLatin1(o->d()->data().typeName())); return Encode(ctx->d()->engine->newString(result)); } @@ -148,7 +149,7 @@ QV4::ReturnedValue VariantPrototype::method_valueOf(CallContext *ctx) Scope scope(ctx); Scoped<VariantObject> o(scope, ctx->thisObject().as<QV4::VariantObject>()); if (o) { - QVariant v = o->d()->data; + QVariant v = o->d()->data(); switch (v.type()) { case QVariant::Invalid: return Encode::undefined(); |