From 19ef8e5c7a5348e4b47feed09cefcc2b4651be32 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 8 Nov 2022 16:57:14 +0100 Subject: [PATCH] Debugger: Avoid some temporary containers when parsing escaped chars Change-Id: Ia9af6801de6f745388e464fc806297d396c66160 Reviewed-by: Reviewed-by: David Schulz --- src/plugins/debugger/debuggerprotocol.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/plugins/debugger/debuggerprotocol.cpp b/src/plugins/debugger/debuggerprotocol.cpp index 0bf60c3a4f5..9aebe53f343 100644 --- a/src/plugins/debugger/debuggerprotocol.cpp +++ b/src/plugins/debugger/debuggerprotocol.cpp @@ -112,7 +112,7 @@ void GdbMi::parseResultOrValue(DebuggerOutputParser &parser) } // Reads one \ooo entity. -static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QByteArray &buffer) +static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QString &buffer) { if (parser.remainingChars() < 4) return false; @@ -130,7 +130,7 @@ static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QByteArray &bu return true; } -static bool parseHexEscapedHelper(DebuggerOutputParser &parser, QByteArray &buffer) +static bool parseHexEscapedHelper(DebuggerOutputParser &parser, QString &buffer) { if (parser.remainingChars() < 4) return false; @@ -178,15 +178,16 @@ static void parseSimpleEscape(DebuggerOutputParser &parser, QString &result) // *or* one escaped char, *or* one unescaped char. static void parseCharOrEscape(DebuggerOutputParser &parser, QString &result) { - QByteArray buffer; - while (parseOctalEscapedHelper(parser, buffer)) + const int oldSize = result.size(); + while (parseOctalEscapedHelper(parser, result)) ; - while (parseHexEscapedHelper(parser, buffer)) + while (parseHexEscapedHelper(parser, result)) ; - if (!buffer.isEmpty()) { - result.append(QString::fromUtf8(buffer)); - } else if (parser.isCurrent('\\')) { + if (result.size() != oldSize) + return; + + if (parser.isCurrent('\\')) { parser.advance(); parseSimpleEscape(parser, result); } else {