diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-10-21 09:50:27 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-29 10:38:55 +0100 |
commit | e0284ab41f7a1889f28e719212df66e942959f4c (patch) | |
tree | dfbd27e96968c07d49372c6ed06f0b51f2c6c8b8 /src/qml/qml | |
parent | 59cc901d3d15079b3666e5902b4c8b1a83ff1fd2 (diff) |
Properly propagate parse errors
Replace all try/catch statements used when parsing
with checks for engine->hasException.
Change-Id: I4493cb600d5a3eb095c2003bb88bd031403e47c9
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/qml')
-rw-r--r-- | src/qml/qml/qqmlcomponent.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmljavascriptexpression.cpp | 18 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 9 | ||||
-rw-r--r-- | src/qml/qml/qqmlvmemetaobject.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlxmlhttprequest.cpp | 2 |
5 files changed, 16 insertions, 17 deletions
diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp index ab08fb78e3..0314e4d2a9 100644 --- a/src/qml/qml/qqmlcomponent.cpp +++ b/src/qml/qml/qqmlcomponent.cpp @@ -1573,7 +1573,7 @@ void QmlIncubatorObject::statusChanged(QQmlIncubator::Status s) callData->args[0] = QV4::Primitive::fromUInt32(s); f->call(callData); } catch (...) { - QQmlError error = QV4::ExecutionEngine::convertJavaScriptException(ctx); + QQmlError error = QV4::ExecutionEngine::catchExceptionAsQmlError(ctx); QQmlEnginePrivate::warning(QQmlEnginePrivate::get(v8->engine()), error); } } diff --git a/src/qml/qml/qqmljavascriptexpression.cpp b/src/qml/qml/qqmljavascriptexpression.cpp index 37a9e398f8..d115268ab0 100644 --- a/src/qml/qml/qqmljavascriptexpression.cpp +++ b/src/qml/qml/qqmljavascriptexpression.cpp @@ -86,7 +86,7 @@ void QQmlDelayedError::setErrorObject(QObject *object) void QQmlDelayedError::catchJavaScriptException(QV4::ExecutionContext *context) { - m_error = QV4::ExecutionEngine::convertJavaScriptException(context); + m_error = QV4::ExecutionEngine::catchExceptionAsQmlError(context); } @@ -302,11 +302,11 @@ QQmlJavaScriptExpression::evalFunction(QQmlContextData *ctxt, QObject *scopeObje QV4::ScopedObject qmlScopeObject(scope, QV4::QmlContextWrapper::qmlScope(ep->v8engine(), ctxt, scopeObject)); QV4::Script script(v4, qmlScopeObject, code, filename, line); QV4::ScopedValue result(scope); - try { - script.parse(); + script.parse(); + if (!v4->hasException) result = script.run(); - } catch (...) { - QQmlError error = QV4::ExecutionEngine::convertJavaScriptException(ctx); + if (v4->hasException) { + QQmlError error = QV4::ExecutionEngine::catchExceptionAsQmlError(ctx); if (error.description().isEmpty()) error.setDescription(QLatin1String("Exception occurred during function evaluation")); if (error.line() == -1) @@ -336,11 +336,11 @@ QV4::ReturnedValue QQmlJavaScriptExpression::qmlBinding(QQmlContextData *ctxt, Q QV4::ScopedObject qmlScopeObject(scope, QV4::QmlContextWrapper::qmlScope(ep->v8engine(), ctxt, qmlScope)); QV4::Script script(v4, qmlScopeObject, code, filename, line); QV4::ScopedValue result(scope); - try { - script.parse(); + script.parse(); + if (!v4->hasException) result = script.qmlBinding(); - } catch (...) { - QQmlError error = QV4::ExecutionEngine::convertJavaScriptException(ctx); + if (v4->hasException) { + QQmlError error = QV4::ExecutionEngine::catchExceptionAsQmlError(ctx); if (error.description().isEmpty()) error.setDescription(QLatin1String("Exception occurred during function evaluation")); if (error.line() == -1) diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index eb565babf4..733f057aee 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -2786,11 +2786,10 @@ QV4::PersistentValue QQmlScriptData::scriptValueForContext(QQmlContextData *pare QV4::QmlContextWrapper::takeContextOwnership(qmlglobal); QV4::ExecutionContext *ctx = QV8Engine::getV4(v8engine)->current; - try { - m_program->qml = qmlglobal; - m_program->run(); - } catch (...) { - QQmlError error = QV4::ExecutionEngine::convertJavaScriptException(ctx); + m_program->qml = qmlglobal; + m_program->run(); + if (scope.engine->hasException) { + QQmlError error = QV4::ExecutionEngine::catchExceptionAsQmlError(ctx); if (error.isValid()) ep->warning(error); } diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp index 5752033744..4b141b5594 100644 --- a/src/qml/qml/qqmlvmemetaobject.cpp +++ b/src/qml/qml/qqmlvmemetaobject.cpp @@ -960,7 +960,7 @@ int QQmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a) result = function->call(callData); if (a[0]) *(QVariant *)a[0] = ep->v8engine()->toVariant(result, 0); } catch (...) { - QQmlError error = QV4::ExecutionEngine::convertJavaScriptException(ctx); + QQmlError error = QV4::ExecutionEngine::catchExceptionAsQmlError(ctx); if (error.isValid()) ep->warning(error); if (a[0]) *(QVariant *)a[0] = QVariant(); diff --git a/src/qml/qml/qqmlxmlhttprequest.cpp b/src/qml/qml/qqmlxmlhttprequest.cpp index aff0cf2b59..8445b58430 100644 --- a/src/qml/qml/qqmlxmlhttprequest.cpp +++ b/src/qml/qml/qqmlxmlhttprequest.cpp @@ -1572,7 +1572,7 @@ void QQmlXMLHttpRequest::dispatchCallback(const ValueRef me) // the source is changed). We do nothing in this case, as the evaluation // cannot succeed. } catch (...) { - QQmlError error = QV4::ExecutionEngine::convertJavaScriptException(ctx); + QQmlError error = QV4::ExecutionEngine::catchExceptionAsQmlError(ctx); QQmlEnginePrivate::warning(QQmlEnginePrivate::get(v4->v8Engine->engine()), error); } } |