summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>2009-11-30 15:17:34 +0100
committerOswald Buddenhagen <oswald.buddenhagen@nokia.com>2009-11-30 15:55:11 +0100
commit9c66c068201feab7035b5991b199b37fa8c9ddc2 (patch)
treef0a3e3c971c571adfe6799f6433b01fd296f539e /src
parentb4be611e1bb7c0a58dccf754c228174631a47512 (diff)
downloadqt-creator-9c66c068201feab7035b5991b199b37fa8c9ddc2.tar.gz
mi parser: don't construct dummy tuples, but parse lists directly
Diffstat (limited to 'src')
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp7
-rw-r--r--src/plugins/debugger/gdb/gdbmi.cpp7
-rw-r--r--src/plugins/debugger/gdb/gdbmi.h2
-rw-r--r--src/plugins/debugger/watchutils.cpp14
4 files changed, 15 insertions, 15 deletions
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index b8fa6fa674..7a2c00b12d 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -155,9 +155,8 @@ static bool parseConsoleStream(const GdbResponse &response, GdbMi *contents)
out = out.left(out.lastIndexOf('"'));
// optimization: dumper output never needs real C unquoting
out.replace('\\', "");
- out = "dummy={" + out + "}";
- contents->fromString(out);
+ contents->fromStringMultiple(out);
//qDebug() << "CONTENTS" << contents->toString(true);
return contents->isValid();
}
@@ -3584,8 +3583,8 @@ void GdbEngine::handleStackFrame(const GdbResponse &response)
<< out.left(pos);
out = out.mid(pos);
}
- GdbMi all("[" + out + "]");
- //GdbMi all(out);
+ GdbMi all;
+ all.fromStringMultiple(out);
//qDebug() << "\n\n\nALL: " << all.toString() << "\n";
GdbMi locals = all.findChild("locals");
diff --git a/src/plugins/debugger/gdb/gdbmi.cpp b/src/plugins/debugger/gdb/gdbmi.cpp
index ffac5d76d1..639e698d36 100644
--- a/src/plugins/debugger/gdb/gdbmi.cpp
+++ b/src/plugins/debugger/gdb/gdbmi.cpp
@@ -348,6 +348,13 @@ void GdbMi::fromString(const QByteArray &ba)
parseResultOrValue(from, to);
}
+void GdbMi::fromStringMultiple(const QByteArray &ba)
+{
+ const char *from = ba.constBegin();
+ const char *to = ba.constEnd();
+ parseTuple_helper(from, to);
+}
+
GdbMi GdbMi::findChild(const char *name) const
{
for (int i = 0; i < m_children.size(); ++i)
diff --git a/src/plugins/debugger/gdb/gdbmi.h b/src/plugins/debugger/gdb/gdbmi.h
index 24295afea6..a4ce837503 100644
--- a/src/plugins/debugger/gdb/gdbmi.h
+++ b/src/plugins/debugger/gdb/gdbmi.h
@@ -91,7 +91,6 @@ class GdbMi
{
public:
GdbMi() : m_type(Invalid) {}
- explicit GdbMi(const QByteArray &str) { fromString(str); }
QByteArray m_name;
QByteArray m_data;
@@ -126,6 +125,7 @@ public:
QByteArray toString(bool multiline = false, int indent = 0) const;
void fromString(const QByteArray &str);
+ void fromStringMultiple(const QByteArray &str);
void setStreamOutput(const QByteArray &name, const QByteArray &content);
private:
diff --git a/src/plugins/debugger/watchutils.cpp b/src/plugins/debugger/watchutils.cpp
index f5ef9250e7..1c07ef499e 100644
--- a/src/plugins/debugger/watchutils.cpp
+++ b/src/plugins/debugger/watchutils.cpp
@@ -975,11 +975,8 @@ bool QtDumperHelper::parseQuery(const GdbMi &contents, Debugger debugger)
// parse a query
bool QtDumperHelper::parseQuery(const char *data, Debugger debugger)
{
- QByteArray fullData = data;
- fullData.insert(0, '{');
- fullData.append(data);
- fullData.append('}');
- GdbMi root(fullData);
+ GdbMi root;
+ root.fromStringMultiple(QByteArray(data));
if (!root.isValid())
return false;
return parseQuery(root, debugger);
@@ -1475,11 +1472,8 @@ bool QtDumperHelper::parseValue(const char *data,
QList<WatchData> *l)
{
l->clear();
- QByteArray fullData = data;
- fullData.insert(0, '{');
- fullData.append(data);
- fullData.append('}');
- GdbMi root(fullData);
+ GdbMi root;
+ root.fromStringMultiple(QByteArray(data));
if (!root.isValid())
return false;
gbdMiToWatchData(root, GdbMiRecursionContext(), l);