diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-05-08 07:31:36 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2013-05-08 11:56:29 +0200 |
commit | 87bad825daf43aaf8c09b5523c401fd32bd8489e (patch) | |
tree | 9d12fbbb191cff5af7514719c871bbcdb3fd5ec0 | |
parent | afe5bb161159ce212ee2464640e8551767573604 (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.cpp | 22 | ||||
-rw-r--r-- | src/qml/qml/v8/qv8valuetypewrapper_p.h | 8 |
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; }; |