Convert qqmltypeloader to use QV4::PersistentValue
authorLars Knoll <lars.knoll@digia.com>
Wed, 8 May 2013 09:06:31 +0000 (11:06 +0200)
committerSimon Hausmann <simon.hausmann@digia.com>
Wed, 8 May 2013 13:11:34 +0000 (15:11 +0200)
Change-Id: Ifc4e2aea870a3a8ab37cd4d0674c672f0850f98f
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
src/qml/qml/qqmltypeloader.cpp
src/qml/qml/qqmltypeloader_p.h
src/qml/qml/qqmlvme.cpp

index bbce8e6..db893c1 100644 (file)
@@ -2270,9 +2270,6 @@ void QQmlScriptData::clear()
         scripts.at(ii)->release();
     scripts.clear();
 
-    qPersistentDispose(m_program);
-    qPersistentDispose(m_value);
-
     // An addref() was made when the QQmlCleanup was added to the engine.
     release();
 }
index 68b8f33..d59cef6 100644 (file)
@@ -69,6 +69,8 @@
 #include <private/qqmlbundle_p.h>
 #include <private/qflagpointer_p.h>
 
+#include <private/qv4value_p.h>
+
 QT_BEGIN_NAMESPACE
 
 class QQmlScriptData;
@@ -508,8 +510,8 @@ private:
 
     bool m_loaded;
     QByteArray m_programSource;
-    v8::Persistent<v8::Script> m_program;
-    v8::Persistent<v8::Object> m_value;
+    QExplicitlySharedDataPointer<v8::Script> m_program;
+    QV4::PersistentValue m_value;
     QQmlError m_error;
 };
 
index d97058e..fa56756 100644 (file)
@@ -1158,7 +1158,7 @@ void QQmlVME::reset()
 // Must be called with a handle scope and context
 void QQmlScriptData::initialize(QQmlEngine *engine)
 {
-    Q_ASSERT(m_program.IsEmpty());
+    Q_ASSERT(!m_program);
     Q_ASSERT(engine);
     Q_ASSERT(!hasEngine());
 
@@ -1171,7 +1171,7 @@ void QQmlScriptData::initialize(QQmlEngine *engine)
     if (program.IsEmpty())
         return;
 
-    m_program = qPersistentNew<v8::Script>(program);
+    m_program = program.get();
     m_programSource.clear(); // We don't need this anymore
 
     addToEngine(engine);
@@ -1182,7 +1182,7 @@ void QQmlScriptData::initialize(QQmlEngine *engine)
 QV4::PersistentValue QQmlVME::run(QQmlContextData *parentCtxt, QQmlScriptData *script)
 {
     if (script->m_loaded)
-        return script->m_value->v4Value();
+        return script->m_value;
 
     QV4::PersistentValue rv;
 
@@ -1242,7 +1242,7 @@ QV4::PersistentValue QQmlVME::run(QQmlContextData *parentCtxt, QQmlScriptData *s
     v8::Handle<v8::Object> qmlglobal = v8engine->qmlScope(ctxt, 0);
     v8engine->contextWrapper()->takeContextOwnership(qmlglobal);
 
-    if (!script->m_program.IsEmpty()) {
+    if (!!script->m_program) {
         script->m_program->Run(qmlglobal);
     } else {
         // Compilation failed.
@@ -1260,7 +1260,7 @@ QV4::PersistentValue QQmlVME::run(QQmlContextData *parentCtxt, QQmlScriptData *s
 
     rv = qmlglobal->v4Value();
     if (shared) {
-        script->m_value = qPersistentNew<v8::Object>(qmlglobal);
+        script->m_value = rv;
         script->m_loaded = true;
     }