summaryrefslogtreecommitdiff
path: root/src/lib/corelib/tools/scripttools.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2023-05-16 17:14:03 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2023-05-17 08:49:05 +0000
commit610508fcbf95b16567a17f53fd370f9b0ae3505b (patch)
tree5812c8e4c691e808cb340cc55a92038abda35142 /src/lib/corelib/tools/scripttools.cpp
parent36887c42052e92eb8d0576e6d25699e0a49bc1f9 (diff)
downloadqbs-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.cpp22
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