aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-05-08 07:32:45 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2013-05-08 11:58:59 +0200
commit9712236e07667c453cc88b45830bb692415c57ae (patch)
tree83ffee3f798e19e82b04a5b16145206d5c63c8b2
parentdc88c92f7beaa4bf4252e5dc4d18e328c7b9e165 (diff)
convert qv8sequencewrapper to use QV4::PersistentValue
Change-Id: I211121a1cd389e7973ca1395e46c8f96f73d3a50 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
-rw-r--r--src/qml/qml/v8/qv8sequencewrapper.cpp36
-rw-r--r--src/qml/qml/v8/qv8sequencewrapper_p.h14
2 files changed, 24 insertions, 26 deletions
diff --git a/src/qml/qml/v8/qv8sequencewrapper.cpp b/src/qml/qml/v8/qv8sequencewrapper.cpp
index c4579fd73c..eacafeab3c 100644
--- a/src/qml/qml/v8/qv8sequencewrapper.cpp
+++ b/src/qml/qml/v8/qv8sequencewrapper.cpp
@@ -45,6 +45,8 @@
#include "qv8sequencewrapper_p_p.h"
#include "qv8engine_p.h"
+#include <private/qv4functionobject_p.h>
+
QT_BEGIN_NAMESPACE
QV8SequenceWrapper::QV8SequenceWrapper()
@@ -62,8 +64,8 @@ void QV8SequenceWrapper::init(QV8Engine *engine)
FOREACH_QML_SEQUENCE_TYPE(REGISTER_QML_SEQUENCE_METATYPE)
m_engine = engine;
- m_toString = qPersistentNew<v8::Function>(v8::FunctionTemplate::New(ToString)->GetFunction());
- m_valueOf = qPersistentNew<v8::Function>(v8::FunctionTemplate::New(ValueOf)->GetFunction());
+ m_toString = v8::FunctionTemplate::New(ToString)->GetFunction()->v4Value();
+ m_valueOf = v8::FunctionTemplate::New(ValueOf)->GetFunction()->v4Value();
QString defaultSortString = QLatin1String(
"(function compare(x,y) {"
@@ -74,10 +76,10 @@ void QV8SequenceWrapper::init(QV8Engine *engine)
" else return x < y ? -1 : 1;"
"})");
- m_sort = qPersistentNew<v8::Function>(v8::FunctionTemplate::New(Sort)->GetFunction());
- m_arrayPrototype = qPersistentNew<v8::Value>(v8::Array::New(1)->GetPrototype());
+ m_sort = v8::FunctionTemplate::New(Sort)->GetFunction()->v4Value();
+ m_arrayPrototype = v8::Array::New(1)->GetPrototype()->v4Value();
v8::Handle<v8::Script> defaultSortCompareScript = v8::Script::Compile(engine->toString(defaultSortString));
- m_defaultSortComparer = qPersistentNew<v8::Function>(v8::Handle<v8::Function>(v8::Function::Cast(defaultSortCompareScript->Run().get())));
+ m_defaultSortComparer = defaultSortCompareScript->Run()->v4Value();
v8::Handle<v8::FunctionTemplate> ft = v8::FunctionTemplate::New();
ft->InstanceTemplate()->SetFallbackPropertyHandler(Getter, Setter);
@@ -86,28 +88,22 @@ void QV8SequenceWrapper::init(QV8Engine *engine)
v8::Handle<v8::Value>(), v8::DEFAULT,
v8::PropertyAttribute(v8::DontDelete | v8::DontEnum));
ft->InstanceTemplate()->SetAccessor(v8::String::New("toString"), ToStringGetter, 0,
- m_toString, v8::DEFAULT,
+ m_toString.value(), v8::DEFAULT,
v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete | v8::DontEnum));
ft->InstanceTemplate()->SetAccessor(v8::String::New("valueOf"), ValueOfGetter, 0,
- m_valueOf, v8::DEFAULT,
+ m_valueOf.value(), v8::DEFAULT,
v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete | v8::DontEnum));
ft->InstanceTemplate()->SetAccessor(v8::String::New("sort"), SortGetter, 0,
- m_sort, v8::DEFAULT,
+ m_sort.value(), v8::DEFAULT,
v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete | v8::DontEnum));
ft->InstanceTemplate()->SetHasExternalResource(true);
ft->InstanceTemplate()->MarkAsUseUserObjectComparison();
- m_constructor = qPersistentNew<v8::Function>(ft->GetFunction());
+ m_constructor = ft->GetFunction()->v4Value();
}
#undef REGISTER_QML_SEQUENCE_METATYPE
void QV8SequenceWrapper::destroy()
{
- qPersistentDispose(m_defaultSortComparer);
- qPersistentDispose(m_sort);
- qPersistentDispose(m_arrayPrototype);
- qPersistentDispose(m_toString);
- qPersistentDispose(m_valueOf);
- qPersistentDispose(m_constructor);
}
#define IS_SEQUENCE(unused1, unused2, SequenceType, unused3) \
@@ -152,9 +148,9 @@ v8::Handle<v8::Object> QV8SequenceWrapper::newSequence(int sequenceType, QObject
QV8SequenceResource *r = 0;
FOREACH_QML_SEQUENCE_TYPE(NEW_REFERENCE_SEQUENCE) { /* else */ *succeeded = false; return v8::Handle<v8::Object>(); }
- v8::Handle<v8::Object> rv = m_constructor->NewInstance();
+ v8::Handle<v8::Object> rv = m_constructor.value().asFunctionObject()->newInstance();
rv->SetExternalResource(r);
- rv->SetPrototype(m_arrayPrototype);
+ rv->SetPrototype(m_arrayPrototype.value());
return rv;
}
#undef NEW_REFERENCE_SEQUENCE
@@ -175,9 +171,9 @@ v8::Handle<v8::Object> QV8SequenceWrapper::fromVariant(const QVariant& v, bool *
QV8SequenceResource *r = 0;
FOREACH_QML_SEQUENCE_TYPE(NEW_COPY_SEQUENCE) { /* else */ *succeeded = false; return v8::Handle<v8::Object>(); }
- v8::Handle<v8::Object> rv = m_constructor->NewInstance();
+ v8::Handle<v8::Object> rv = m_constructor.value().asFunctionObject()->newInstance();
rv->SetExternalResource(r);
- rv->SetPrototype(m_arrayPrototype);
+ rv->SetPrototype(m_arrayPrototype.value());
return rv;
}
#undef NEW_COPY_SEQUENCE
@@ -275,7 +271,7 @@ QV4::Value QV8SequenceWrapper::Sort(const v8::Arguments &args)
qint32 length = sr->lengthGetter();
if (length > 1) {
- v8::Handle<v8::Function> jsCompareFn = sr->engine->sequenceWrapper()->m_defaultSortComparer;
+ v8::Handle<v8::Function> jsCompareFn = sr->engine->sequenceWrapper()->m_defaultSortComparer.value();
if (argCount == 1 && args[0]->IsFunction())
jsCompareFn = v8::Handle<v8::Function>(v8::Function::Cast(args[0].get()));
diff --git a/src/qml/qml/v8/qv8sequencewrapper_p.h b/src/qml/qml/v8/qv8sequencewrapper_p.h
index 2408e4a2ae..b5cc721f4a 100644
--- a/src/qml/qml/v8/qv8sequencewrapper_p.h
+++ b/src/qml/qml/v8/qv8sequencewrapper_p.h
@@ -57,6 +57,8 @@
#include <QtCore/qvariant.h>
#include <private/qv8_p.h>
+#include <private/qv4value_p.h>
+
QT_BEGIN_NAMESPACE
class QV8Engine;
@@ -85,12 +87,12 @@ public:
private:
QV8Engine *m_engine;
- v8::Persistent<v8::Function> m_constructor;
- v8::Persistent<v8::Function> m_toString;
- v8::Persistent<v8::Function> m_valueOf;
- v8::Persistent<v8::Function> m_sort;
- v8::Persistent<v8::Value> m_arrayPrototype;
- v8::Persistent<v8::Function> m_defaultSortComparer;
+ QV4::PersistentValue m_constructor;
+ QV4::PersistentValue m_toString;
+ QV4::PersistentValue m_valueOf;
+ QV4::PersistentValue m_sort;
+ QV4::PersistentValue m_arrayPrototype;
+ QV4::PersistentValue m_defaultSortComparer;
static v8::Handle<v8::Value> IndexedGetter(quint32 index, const v8::AccessorInfo &info);
static v8::Handle<v8::Value> IndexedSetter(quint32 index, v8::Handle<v8::Value> value, const v8::AccessorInfo &info);