aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmljavascriptexpression_p.h
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2012-05-30 10:24:14 +1000
committerQt by Nokia <qt-info@nokia.com>2012-06-05 04:35:50 +0200
commitc734706c69ed5b38cc97aea5be3f0553c194aa0a (patch)
treeec95a87fd3e3d9ad5d9b35c79b4beee291b99088 /src/qml/qml/qqmljavascriptexpression_p.h
parent751c1ca09305a15acc37cb28cb4687e1bb32e1d2 (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.h21
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