aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlbuiltinfunctions.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2024-02-05 18:02:57 +0100
committerUlf Hermann <ulf.hermann@qt.io>2024-02-08 15:37:02 +0100
commitfab3553165e9ee13c4853c7deeac9e456d048b3e (patch)
tree5271232443ca56ab754cb65f67412b0df8f4d032 /src/qml/qml/qqmlbuiltinfunctions.cpp
parent4e355bcd36f12a6403208b901f6482be658986e0 (diff)
QtQml: Omit nonsensical line numbers from console.trace()
If the line number has been marked as missing we cannot print it. Pick-to: 6.7 6.6 6.5 Task-number: QTBUG-119459 Change-Id: I598820033011de67cc2c1a4e81910bd3539dcf5b Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlbuiltinfunctions.cpp')
-rw-r--r--src/qml/qml/qqmlbuiltinfunctions.cpp24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/qml/qml/qqmlbuiltinfunctions.cpp b/src/qml/qml/qqmlbuiltinfunctions.cpp
index 61370b401d..debf3fc949 100644
--- a/src/qml/qml/qqmlbuiltinfunctions.cpp
+++ b/src/qml/qml/qqmlbuiltinfunctions.cpp
@@ -1753,19 +1753,21 @@ enum ConsoleLogTypes {
static QString jsStack(QV4::ExecutionEngine *engine) {
QString stack;
- QVector<QV4::StackFrame> stackTrace = engine->stackTrace(10);
-
- for (int i = 0; i < stackTrace.size(); i++) {
- const QV4::StackFrame &frame = stackTrace.at(i);
-
+ int i = 0;
+ for (CppStackFrame *f = engine->currentStackFrame; f && i < 10; f = f->parentFrame(), ++i) {
QString stackFrame;
- if (frame.column >= 0) {
- stackFrame = QStringLiteral("%1 (%2:%3:%4)").arg(
- frame.function, frame.source,
- QString::number(qAbs(frame.line)), QString::number(frame.column));
+
+ if (f->isJSTypesFrame() && static_cast<JSTypesStackFrame *>(f)->isTailCalling()) {
+ stackFrame = QStringLiteral("[elided tail calls]");
} else {
- stackFrame = QStringLiteral("%1 (%2:%3)").arg(
- frame.function, frame.source, QString::number(qAbs(frame.line)));
+ const int line = f->lineNumber();
+ if (line != f->missingLineNumber()) {
+ stackFrame = QStringLiteral("%1 (%2:%3)").arg(
+ f->function(), f->source(), QString::number(qAbs(line)));
+ } else {
+ stackFrame = QStringLiteral("%1 (%2)").arg(
+ f->function(), f->source());
+ }
}
if (i)