aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4value.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-09-16 22:02:27 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-22 01:06:20 +0200
commite441692b0b8f8fffdfdfa8a21c570adcd5cbae7a (patch)
tree9b764401d87682012328c46dc947721f47b428b2 /src/qml/jsruntime/qv4value.cpp
parenta0f8be4021caa9bb5055923f0eea3bee0e345235 (diff)
Further work towards an exact GC
Add some more convenience in the helper classes in qscopedvalue_p.h Make accesses to CallData safer, and change ExecutionEngine::newObject() to return a safe pointer. Change-Id: I980909754ce9681cf6faa1355bab3a1e5d6dd186 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4value.cpp')
-rw-r--r--src/qml/jsruntime/qv4value.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/qml/jsruntime/qv4value.cpp b/src/qml/jsruntime/qv4value.cpp
index f97aa66669..570ba9e82e 100644
--- a/src/qml/jsruntime/qv4value.cpp
+++ b/src/qml/jsruntime/qv4value.cpp
@@ -288,6 +288,11 @@ PersistentValue::PersistentValue(const Value &val)
{
}
+PersistentValue::PersistentValue(const ScopedValue &val)
+ : d(new PersistentValuePrivate(*val.operator ->()))
+{
+}
+
PersistentValue::PersistentValue(ReturnedValue val)
: d(new PersistentValuePrivate(Value::fromReturnedValue(val)))
{
@@ -326,6 +331,16 @@ PersistentValue &PersistentValue::operator =(const Value &other)
return *this;
}
+PersistentValue &PersistentValue::operator =(const ScopedValue &other)
+{
+ return operator=(*other.operator ->());
+}
+
+PersistentValue &PersistentValue::operator =(const ValueRef other)
+{
+ return operator=(*other.operator ->());
+}
+
PersistentValue &PersistentValue::operator =(const ReturnedValue &other)
{
if (!d) {
@@ -354,6 +369,11 @@ WeakValue::WeakValue(const WeakValue &other)
d->ref();
}
+WeakValue::WeakValue(ReturnedValue val)
+ : d(new PersistentValuePrivate(Value::fromReturnedValue(val), /*engine*/0, /*weak*/true))
+{
+}
+
WeakValue &WeakValue::operator=(const WeakValue &other)
{
if (d == other.d)
@@ -380,6 +400,16 @@ WeakValue &WeakValue::operator =(const Value &other)
return *this;
}
+WeakValue &WeakValue::operator =(const ReturnedValue &other)
+{
+ if (!d) {
+ d = new PersistentValuePrivate(Value::fromReturnedValue(other), /*engine*/0, /*weak*/true);
+ return *this;
+ }
+ d = d->detach(Value::fromReturnedValue(other), /*weak*/true);
+ return *this;
+}
+
WeakValue::~WeakValue()
{