aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-05-08 07:31:36 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2013-05-08 11:56:29 +0200
commit87bad825daf43aaf8c09b5523c401fd32bd8489e (patch)
tree9d12fbbb191cff5af7514719c871bbcdb3fd5ec0
parentafe5bb161159ce212ee2464640e8551767573604 (diff)
Convert qv8Valuetypewrapper to use QV4::PersistentValue
Change-Id: I175bd2d84425c5ae9497a5a3644474bee34e1a5b Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
-rw-r--r--src/qml/qml/v8/qv8valuetypewrapper.cpp22
-rw-r--r--src/qml/qml/v8/qv8valuetypewrapper_p.h8
2 files changed, 16 insertions, 14 deletions
diff --git a/src/qml/qml/v8/qv8valuetypewrapper.cpp b/src/qml/qml/v8/qv8valuetypewrapper.cpp
index 2215c99241..124a49d5e9 100644
--- a/src/qml/qml/v8/qv8valuetypewrapper.cpp
+++ b/src/qml/qml/v8/qv8valuetypewrapper.cpp
@@ -46,6 +46,9 @@
#include <private/qqmlbinding_p.h>
#include <private/qqmlglobal_p.h>
+#include <private/qv4engine_p.h>
+#include <private/qv4functionobject_p.h>
+
QT_BEGIN_NAMESPACE
class QV8ValueTypeResource : public QV8ObjectResource
@@ -104,9 +107,6 @@ QV8ValueTypeWrapper::~QV8ValueTypeWrapper()
void QV8ValueTypeWrapper::destroy()
{
- qPersistentDispose(m_toString);
- qPersistentDispose(m_constructor);
- qPersistentDispose(m_toStringSymbol);
}
static quint32 toStringHash = -1;
@@ -114,25 +114,25 @@ static quint32 toStringHash = -1;
void QV8ValueTypeWrapper::init(QV8Engine *engine)
{
m_engine = engine;
- m_toString = qPersistentNew<v8::Function>(v8::FunctionTemplate::New(ToString)->GetFunction());
+ m_toString = v8::FunctionTemplate::New(ToString)->GetFunction()->v4Value();
v8::Handle<v8::FunctionTemplate> ft = v8::FunctionTemplate::New();
ft->InstanceTemplate()->SetNamedPropertyHandler(Getter, Setter);
ft->InstanceTemplate()->SetHasExternalResource(true);
ft->InstanceTemplate()->MarkAsUseUserObjectComparison();
ft->InstanceTemplate()->SetAccessor(v8::String::New("toString"), ToStringGetter, 0,
- m_toString, v8::DEFAULT,
+ m_toString.value(), v8::DEFAULT,
v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete));
- m_constructor = qPersistentNew<v8::Function>(ft->GetFunction());
+ m_constructor = ft->GetFunction()->v4Value();
- m_toStringSymbol = qPersistentNew<v8::String>(v8::String::NewSymbol("toString"));
- m_toStringString = QHashedV8String(m_toStringSymbol);
+ m_toStringSymbol = QV4::Value::fromString(QV8Engine::getV4(engine)->newIdentifier(QStringLiteral("toString")));
+ m_toStringString = QHashedV8String(m_toStringSymbol.value());
toStringHash = m_toStringString.hash();
}
v8::Handle<v8::Object> QV8ValueTypeWrapper::newValueType(QObject *object, int property, QQmlValueType *type)
{
// XXX NewInstance() should be optimized
- v8::Handle<v8::Object> rv = m_constructor->NewInstance();
+ v8::Handle<v8::Object> rv = m_constructor.value().asFunctionObject()->newInstance();
QV8ValueTypeReferenceResource *r = new QV8ValueTypeReferenceResource(m_engine);
r->type = type; r->object = object; r->property = property;
rv->SetExternalResource(r);
@@ -142,7 +142,7 @@ v8::Handle<v8::Object> QV8ValueTypeWrapper::newValueType(QObject *object, int pr
v8::Handle<v8::Object> QV8ValueTypeWrapper::newValueType(const QVariant &value, QQmlValueType *type)
{
// XXX NewInstance() should be optimized
- v8::Handle<v8::Object> rv = m_constructor->NewInstance();
+ v8::Handle<v8::Object> rv = m_constructor.value().asFunctionObject()->newInstance();
QV8ValueTypeCopyResource *r = new QV8ValueTypeCopyResource(m_engine);
r->type = type; r->value = value;
rv->SetExternalResource(r);
@@ -289,7 +289,7 @@ v8::Handle<v8::Value> QV8ValueTypeWrapper::Getter(v8::Handle<v8::String> propert
quint32 hash = propertystring.hash();
if (hash == toStringHash &&
r->engine->valueTypeWrapper()->m_toStringString == propertystring) {
- return r->engine->valueTypeWrapper()->m_toString;
+ return r->engine->valueTypeWrapper()->m_toString.value();
}
}
diff --git a/src/qml/qml/v8/qv8valuetypewrapper_p.h b/src/qml/qml/v8/qv8valuetypewrapper_p.h
index 132ae1ad9c..ed97b1325d 100644
--- a/src/qml/qml/v8/qv8valuetypewrapper_p.h
+++ b/src/qml/qml/v8/qv8valuetypewrapper_p.h
@@ -59,6 +59,8 @@
#include <private/qv8_p.h>
#include <private/qhashedstring_p.h>
+#include <private/qv4value_p.h>
+
QT_BEGIN_NAMESPACE
class QV8Engine;
@@ -95,9 +97,9 @@ private:
const v8::AccessorInfo &info);
QV8Engine *m_engine;
- v8::Persistent<v8::Function> m_constructor;
- v8::Persistent<v8::Function> m_toString;
- v8::Persistent<v8::String> m_toStringSymbol;
+ QV4::PersistentValue m_constructor;
+ QV4::PersistentValue m_toString;
+ QV4::PersistentValue m_toStringSymbol;
QHashedV8String m_toStringString;
};