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.
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 {