diff options
author | Michael Brasser <michael.brasser@nokia.com> | 2012-05-30 10:24:14 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-05 04:35:50 +0200 |
commit | c734706c69ed5b38cc97aea5be3f0553c194aa0a (patch) | |
tree | ec95a87fd3e3d9ad5d9b35c79b4beee291b99088 /src/qml/qml/qqmljavascriptexpression_p.h | |
parent | 751c1ca09305a15acc37cb28cb4687e1bb32e1d2 (diff) |
Delay conversion of v8 exceptions to QQmlErrors.
This conversion in relatively expensive, and not required for transient
exceptions that occur during startup due to the order of binding
evaluation.
Change-Id: I29a16c075890c8966c0bad0a77412ad232c791bb
Reviewed-by: Matthew Vogt <matthew.vogt@nokia.com>
Diffstat (limited to 'src/qml/qml/qqmljavascriptexpression_p.h')
-rw-r--r-- | src/qml/qml/qqmljavascriptexpression_p.h | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/qml/qml/qqmljavascriptexpression_p.h b/src/qml/qml/qqmljavascriptexpression_p.h index 4208584d47..4c89a086a3 100644 --- a/src/qml/qml/qqmljavascriptexpression_p.h +++ b/src/qml/qml/qqmljavascriptexpression_p.h @@ -65,9 +65,7 @@ class QQmlDelayedError { public: inline QQmlDelayedError() : nextError(0), prevError(0) {} - inline ~QQmlDelayedError() { removeError(); } - - QQmlError error; + inline ~QQmlDelayedError() { qPersistentDispose(m_message); removeError(); } bool addError(QQmlEnginePrivate *); @@ -79,7 +77,20 @@ public: prevError = 0; } + inline bool isValid() const { return !m_message.IsEmpty() || m_error.isValid(); } + inline const QQmlError &error(QQmlEngine *engine) const { convertMessageToError(engine); return m_error; } + inline void clearError() { qPersistentDispose(m_message); m_error = QQmlError(); } + + void setMessage(v8::Handle<v8::Message> message); + void setErrorLocation(const QUrl &url, int line, int column); + void setErrorDescription(const QString &description); + private: + void convertMessageToError(QQmlEngine *engine) const; + + mutable QQmlError m_error; + mutable v8::Persistent<v8::Message> m_message; + QQmlDelayedError *nextError; QQmlDelayedError **prevError; }; @@ -128,7 +139,7 @@ public: inline bool hasError() const; inline bool hasDelayedError() const; - QQmlError error() const; + QQmlError error(QQmlEngine *) const; void clearError(); QQmlDelayedError *delayedError(); @@ -242,7 +253,7 @@ void QQmlJavaScriptExpression::setScopeObject(QObject *v) bool QQmlJavaScriptExpression::hasError() const { - return m_vtable.hasValue() && m_vtable.constValue()->error.isValid(); + return m_vtable.hasValue() && m_vtable.constValue()->isValid(); } bool QQmlJavaScriptExpression::hasDelayedError() const |