aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language/scriptengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib/language/scriptengine.cpp')
-rw-r--r--src/lib/corelib/language/scriptengine.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/lib/corelib/language/scriptengine.cpp b/src/lib/corelib/language/scriptengine.cpp
index bbc84d580..7aa6138dd 100644
--- a/src/lib/corelib/language/scriptengine.cpp
+++ b/src/lib/corelib/language/scriptengine.cpp
@@ -79,6 +79,8 @@ uint qHash(const ScriptEngine::PropertyCacheKey &k, uint seed = 0)
ScriptEngine::ScriptEngine(const Logger &logger, QObject *parent)
: QScriptEngine(parent), m_logger(logger)
{
+ setProcessEventsInterval(1000); // For the cancelation mechanism to work.
+ m_cancelationError = currentContext()->throwValue(tr("Execution canceled"));
QScriptValue objectProto = globalObject().property(QLatin1String("Object"));
m_definePropertyFunction = objectProto.property(QLatin1String("defineProperty"));
QBS_ASSERT(m_definePropertyFunction.isFunction(), /* ignore */);
@@ -457,6 +459,16 @@ QScriptValueList ScriptEngine::argumentList(const QStringList &argumentNames,
return result;
}
+void ScriptEngine::cancel()
+{
+ QMetaObject::invokeMethod(this, "abort", Qt::QueuedConnection);
+}
+
+void ScriptEngine::abort()
+{
+ abortEvaluation(m_cancelationError);
+}
+
class JSTypeExtender
{
public: