aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsapi/qjsengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsapi/qjsengine.cpp')
-rw-r--r--src/qml/jsapi/qjsengine.cpp72
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();