Convert qqmljavascriptexpression to use QV4::PersistentValue
authorLars Knoll <lars.knoll@digia.com>
Wed, 8 May 2013 10:31:23 +0000 (12:31 +0200)
committerSimon Hausmann <simon.hausmann@digia.com>
Wed, 8 May 2013 13:13:42 +0000 (15:13 +0200)
Change-Id: Idd704b55be61dd78c59fffdf966fc8497af852d6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
src/qml/qml/qqmljavascriptexpression.cpp
src/qml/qml/qqmljavascriptexpression_p.h

index cd88370..759955f 100644 (file)
@@ -64,8 +64,7 @@ bool QQmlDelayedError::addError(QQmlEnginePrivate *e)
 
 void QQmlDelayedError::setMessage(v8::Handle<v8::Message> message)
 {
-    qPersistentDispose(m_message);
-    m_message = qPersistentNew<v8::Message>(message);
+    m_message = message.get();
 }
 
 void QQmlDelayedError::setErrorLocation(const QUrl &url, quint16 line, quint16 column)
@@ -90,9 +89,9 @@ void QQmlDelayedError::setErrorDescription(const QString &description)
 */
 void QQmlDelayedError::convertMessageToError(QQmlEngine *engine) const
 {
-    if (!m_message.IsEmpty() && engine) {
-        QQmlExpressionPrivate::exceptionToError(m_message, m_error);
-        qPersistentDispose(m_message);
+    if (!!m_message && engine) {
+        QQmlExpressionPrivate::exceptionToError(v8::Handle<v8::Message>(m_message.data()), m_error);
+        m_message.reset();
     }
 }
 
index 0d3b7b9..cfdb5b0 100644 (file)
@@ -65,7 +65,7 @@ class QQmlDelayedError
 {
 public:
     inline QQmlDelayedError() : nextError(0), prevError(0) {}
-    inline ~QQmlDelayedError() { qPersistentDispose(m_message); removeError(); }
+    inline ~QQmlDelayedError() { removeError(); }
 
     bool addError(QQmlEnginePrivate *);
 
@@ -77,9 +77,9 @@ public:
         prevError = 0;
     }
 
-    inline bool isValid() const { return !m_message.IsEmpty() || m_error.isValid(); }
+    inline bool isValid() const { return !!m_message || m_error.isValid(); }
     inline const QQmlError &error(QQmlEngine *engine) const { convertMessageToError(engine); return m_error; }
-    inline void clearError() { qPersistentDispose(m_message); m_error = QQmlError(); }
+    inline void clearError() { m_message.reset(); m_error = QQmlError(); }
 
     void setMessage(v8::Handle<v8::Message> message);
     void setErrorLocation(const QUrl &url, quint16 line, quint16 column);
@@ -89,7 +89,7 @@ private:
     void convertMessageToError(QQmlEngine *engine) const;
 
     mutable QQmlError m_error;
-    mutable v8::Persistent<v8::Message> m_message;
+    mutable QExplicitlySharedDataPointer<v8::Message> m_message;
 
     QQmlDelayedError  *nextError;
     QQmlDelayedError **prevError;