diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2023-05-16 17:14:03 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2023-05-17 08:49:05 +0000 |
commit | 610508fcbf95b16567a17f53fd370f9b0ae3505b (patch) | |
tree | 5812c8e4c691e808cb340cc55a92038abda35142 /src/lib/corelib/tools/scripttools.cpp | |
parent | 36887c42052e92eb8d0576e6d25699e0a49bc1f9 (diff) | |
download | qbs-2.0.tar.gz |
Properly handle non-string exceptions2.0
Fixes: QBS-1734
Change-Id: If7901dc698fdd5ee44021a3b92cf28295123eccc
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
Diffstat (limited to 'src/lib/corelib/tools/scripttools.cpp')
-rw-r--r-- | src/lib/corelib/tools/scripttools.cpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/lib/corelib/tools/scripttools.cpp b/src/lib/corelib/tools/scripttools.cpp index 109b74486..cf2d1424f 100644 --- a/src/lib/corelib/tools/scripttools.cpp +++ b/src/lib/corelib/tools/scripttools.cpp @@ -43,6 +43,9 @@ #include <tools/error.h> #include <QtCore/qdatastream.h> +#include <QtCore/qjsonarray.h> +#include <QtCore/qjsondocument.h> +#include <QtCore/qjsonobject.h> namespace qbs { namespace Internal { @@ -89,9 +92,22 @@ JsException::~JsException() { JS_FreeValue(m_ctx, m_exception); } QString JsException::message() const { - if (JS_IsString(m_exception)) - return getJsString(m_ctx, m_exception); - return getJsStringProperty(m_ctx, m_exception, QStringLiteral("message")); + if (JS_IsError(m_ctx, m_exception)) + return getJsStringProperty(m_ctx, m_exception, QStringLiteral("message")); + const QVariant v = getJsVariant(m_ctx, m_exception); + switch (static_cast<QMetaType::Type>(v.userType())) { + case QMetaType::QVariantMap: + return QString::fromUtf8(QJsonDocument(QJsonObject::fromVariantMap(v.toMap())) + .toJson(QJsonDocument::Indented)); + case QMetaType::QStringList: + return QString::fromUtf8(QJsonDocument(QJsonArray::fromStringList(v.toStringList())) + .toJson(QJsonDocument::Indented)); + case QMetaType::QVariantList: + return QString::fromUtf8(QJsonDocument(QJsonArray::fromVariantList(v.toList())) + .toJson(QJsonDocument::Indented)); + default: + return v.toString(); + } } const QStringList JsException::stackTrace() const |