diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-08-01 16:31:53 +0200 |
---|---|---|
committer | Jani Heikkinen <jani.heikkinen@qt.io> | 2018-10-30 12:41:54 +0000 |
commit | 7f0db6d0472037a3ec005f9066f6222d78de60e1 (patch) | |
tree | 30e2acee27523678f56ae2a9dc61847cace7c287 /src/qml/jsapi/qjsengine.cpp | |
parent | b190d0d160e1cf5bbe65f8ff54752e8a7d33b49b (diff) |
Add convenience functions for creating and inspecting error objects
Serves to simplify porting from QtScript by replacing
QScriptContext::Error and QScriptContext::throwError().
Change-Id: I4bfe404c358c50aaf3b5469a4304fec97552bf24
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsapi/qjsengine.cpp')
-rw-r--r-- | src/qml/jsapi/qjsengine.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/qml/jsapi/qjsengine.cpp b/src/qml/jsapi/qjsengine.cpp index 69e1436c0a..3bde6a60c4 100644 --- a/src/qml/jsapi/qjsengine.cpp +++ b/src/qml/jsapi/qjsengine.cpp @@ -45,6 +45,7 @@ #include "private/qv4engine_p.h" #include "private/qv4mm_p.h" +#include "private/qv4errorobject_p.h" #include "private/qv4globalobject_p.h" #include "private/qv4script_p.h" #include "private/qv4runtime_p.h" @@ -583,6 +584,46 @@ QJSValue QJSEngine::newObject() } /*! + \since 5.12 + Creates a JavaScript object of class Error. + + The prototype of the created object will be \a errorType. + + \sa newObject(), throwError(), QJSValue::isError() +*/ +QJSValue QJSEngine::newErrorObject(QJSValue::ErrorType errorType, const QString &message) +{ + QV4::Scope scope(m_v4Engine); + QV4::ScopedObject error(scope); + switch (errorType) { + case QJSValue::RangeError: + error = m_v4Engine->newRangeErrorObject(message); + break; + case QJSValue::SyntaxError: + error = m_v4Engine->newSyntaxErrorObject(message); + break; + case QJSValue::TypeError: + error = m_v4Engine->newTypeErrorObject(message); + break; + case QJSValue::URIError: + error = m_v4Engine->newURIErrorObject(message); + break; + case QJSValue::ReferenceError: + error = m_v4Engine->newReferenceErrorObject(message); + break; + case QJSValue::EvalError: + error = m_v4Engine->newEvalErrorObject(message); + break; + case QJSValue::GenericError: + error = m_v4Engine->newErrorObject(message); + break; + case QJSValue::NoError: + return QJSValue::UndefinedValue; + } + return QJSValue(m_v4Engine, error->asReturnedValue()); +} + +/*! Creates a JavaScript object of class Array with the given \a length. \sa newObject() @@ -894,6 +935,37 @@ void QJSEngine::throwError(const QString &message) m_v4Engine->throwError(message); } +/*! + Throws a run-time error (exception) with the given \a errorType and + \a message. + + \code + // Assuming that DataEntry is a QObject-derived class that has been + // registered as a singleton type and provides an invokable method + // setAge(). + + void DataEntry::setAge(int age) { + if (age < 0 || age > 200) { + jsEngine->throwError(QJSValue::RangeError, + "Age must be between 0 and 200"); + } + ... + } + \endcode + + \since Qt 5.12 + \sa {Script Exceptions}, newErrorObject() +*/ +void QJSEngine::throwError(QJSValue::ErrorType errorType, const QString &message) +{ + QV4::Scope scope(m_v4Engine); + QJSValue error = newErrorObject(errorType, message); + QV4::ScopedObject e(scope, QJSValuePrivate::getValue(&error)); + if (!e) + return; + m_v4Engine->throwError(e); +} + QJSEnginePrivate *QJSEnginePrivate::get(QV4::ExecutionEngine *e) { return e->jsEngine()->d_func(); |