diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2024-02-05 18:02:57 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2024-02-08 15:37:02 +0100 |
commit | fab3553165e9ee13c4853c7deeac9e456d048b3e (patch) | |
tree | 5271232443ca56ab754cb65f67412b0df8f4d032 /src/qml/qml/qqmlbuiltinfunctions.cpp | |
parent | 4e355bcd36f12a6403208b901f6482be658986e0 (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.cpp | 24 |
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) |