Debugger: Avoid some temporary containers when parsing escaped chars

Change-Id: Ia9af6801de6f745388e464fc806297d396c66160
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
hjk
2022-11-08 16:57:14 +01:00
parent 06838e3e5e
commit 19ef8e5c7a

View File

@@ -112,7 +112,7 @@ void GdbMi::parseResultOrValue(DebuggerOutputParser &parser)
} }
// Reads one \ooo entity. // Reads one \ooo entity.
static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QByteArray &buffer) static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QString &buffer)
{ {
if (parser.remainingChars() < 4) if (parser.remainingChars() < 4)
return false; return false;
@@ -130,7 +130,7 @@ static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QByteArray &bu
return true; return true;
} }
static bool parseHexEscapedHelper(DebuggerOutputParser &parser, QByteArray &buffer) static bool parseHexEscapedHelper(DebuggerOutputParser &parser, QString &buffer)
{ {
if (parser.remainingChars() < 4) if (parser.remainingChars() < 4)
return false; return false;
@@ -178,15 +178,16 @@ static void parseSimpleEscape(DebuggerOutputParser &parser, QString &result)
// *or* one escaped char, *or* one unescaped char. // *or* one escaped char, *or* one unescaped char.
static void parseCharOrEscape(DebuggerOutputParser &parser, QString &result) static void parseCharOrEscape(DebuggerOutputParser &parser, QString &result)
{ {
QByteArray buffer; const int oldSize = result.size();
while (parseOctalEscapedHelper(parser, buffer)) while (parseOctalEscapedHelper(parser, result))
; ;
while (parseHexEscapedHelper(parser, buffer)) while (parseHexEscapedHelper(parser, result))
; ;
if (!buffer.isEmpty()) { if (result.size() != oldSize)
result.append(QString::fromUtf8(buffer)); return;
} else if (parser.isCurrent('\\')) {
if (parser.isCurrent('\\')) {
parser.advance(); parser.advance();
parseSimpleEscape(parser, result); parseSimpleEscape(parser, result);
} else { } else {