summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/debuggerprotocol.cpp
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2023-02-24 11:06:54 +0100
committerhjk <hjk@qt.io>2023-02-24 14:58:20 +0000
commitf53f006301c1a4e241bfb9867615f087adc3b32e (patch)
tree7e71947325059fd5b763db2f05d471e38a666d02 /src/plugins/debugger/debuggerprotocol.cpp
parenta1e967054157e8ad65142295868f2e5c9826ba08 (diff)
downloadqt-creator-f53f006301c1a4e241bfb9867615f087adc3b32e.tar.gz
Debugger: Use QVarLengthArray for local buffer
Change-Id: I1bca338e0ffb850ca23bf5e1d1cd2fb85227ddda Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/debugger/debuggerprotocol.cpp')
-rw-r--r--src/plugins/debugger/debuggerprotocol.cpp60
1 files changed, 32 insertions, 28 deletions
diff --git a/src/plugins/debugger/debuggerprotocol.cpp b/src/plugins/debugger/debuggerprotocol.cpp
index 301949f822..8ab7a71b33 100644
--- a/src/plugins/debugger/debuggerprotocol.cpp
+++ b/src/plugins/debugger/debuggerprotocol.cpp
@@ -105,7 +105,7 @@ void GdbMi::parseResultOrValue(DebuggerOutputParser &parser)
}
// Reads one \ooo entity.
-static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QByteArray &buffer)
+static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, DebuggerOutputParser::Buffer &buffer)
{
if (parser.remainingChars() < 4)
return false;
@@ -121,7 +121,7 @@ static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QByteArray &bu
return true;
}
-static bool parseHexEscapedHelper(DebuggerOutputParser &parser, QByteArray &buffer)
+static bool parseHexEscapedHelper(DebuggerOutputParser &parser, DebuggerOutputParser::Buffer &buffer)
{
if (parser.remainingChars() < 4)
return false;
@@ -138,7 +138,7 @@ static bool parseHexEscapedHelper(DebuggerOutputParser &parser, QByteArray &buff
return true;
}
-static void parseSimpleEscape(DebuggerOutputParser &parser, QByteArray &result)
+static void parseSimpleEscape(DebuggerOutputParser &parser, DebuggerOutputParser::Buffer &buffer)
{
if (parser.isAtEnd()) {
qDebug() << "MI Parse Error, unterminated backslash escape";
@@ -148,60 +148,64 @@ static void parseSimpleEscape(DebuggerOutputParser &parser, QByteArray &result)
const QChar c = parser.current();
parser.advance();
switch (c.unicode()) {
- case 'a': result += '\a'; break;
- case 'b': result += '\b'; break;
- case 'f': result += '\f'; break;
- case 'n': result += '\n'; break;
- case 'r': result += '\r'; break;
- case 't': result += '\t'; break;
- case 'v': result += '\v'; break;
- case '"': result += '"'; break;
- case '\'': result += '\''; break;
- case '\\': result += '\\'; break;
- default:
- qDebug() << "MI Parse Error, unrecognized backslash escape";
+ case 'a': buffer += '\a'; break;
+ case 'b': buffer += '\b'; break;
+ case 'f': buffer += '\f'; break;
+ case 'n': buffer += '\n'; break;
+ case 'r': buffer += '\r'; break;
+ case 't': buffer += '\t'; break;
+ case 'v': buffer += '\v'; break;
+ case '"': buffer += '"'; break;
+ case '\'': buffer += '\''; break;
+ case '\\': buffer += '\\'; break;
+ default:
+ qDebug() << "MI Parse Error, unrecognized backslash escape";
}
}
// Reads one \123 or \x12 entity, *or* one escaped char, *or* one unescaped char.
-static void parseCharOrEscape(DebuggerOutputParser &parser, QByteArray &result)
+static void parseCharOrEscape(DebuggerOutputParser &parser, DebuggerOutputParser::Buffer &buffer)
{
if (parser.isCurrent('\\')) {
- if (parseOctalEscapedHelper(parser, result))
+ if (parseOctalEscapedHelper(parser, buffer))
return;
- if (parseHexEscapedHelper(parser, result))
+ if (parseHexEscapedHelper(parser, buffer))
return;
parser.advance();
- parseSimpleEscape(parser, result);
+ parseSimpleEscape(parser, buffer);
} else {
- result += char(parser.readChar().unicode());
+ buffer += char(parser.readChar().unicode());
}
}
-QString DebuggerOutputParser::readCString()
+void DebuggerOutputParser::readCStringData(Buffer &buffer)
{
if (isAtEnd())
- return QString();
+ return;
if (*from != '"') {
qDebug() << "MI Parse Error, double quote expected";
++from; // So we don't hang
- return QString();
+ return;
}
++from; // Skip initial quote.
- QByteArray result;
- result.reserve(30);
while (from < to) {
if (*from == '"') {
++from;
- return QString::fromUtf8(result);
+ return;
}
- parseCharOrEscape(*this, result);
+ parseCharOrEscape(*this, buffer);
}
qDebug() << "MI Parse Error, unfinished string";
- return QString();
+}
+
+QString DebuggerOutputParser::readCString()
+{
+ Buffer buffer;
+ readCStringData(buffer);
+ return QString::fromUtf8(buffer);
}
void GdbMi::parseValue(DebuggerOutputParser &parser)