From fbdfb3acae0b0f6670ed1dc26cd7c7378087a558 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Tue, 1 Mar 2011 17:04:36 +0100
Subject: [PATCH] debugger: display size of bitfields in 'type' column

---
 src/plugins/debugger/watchdata.cpp    | 2 ++
 src/plugins/debugger/watchdata.h      | 2 ++
 src/plugins/debugger/watchhandler.cpp | 5 ++++-
 src/plugins/debugger/watchutils.cpp   | 6 ++++++
 4 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/plugins/debugger/watchdata.cpp b/src/plugins/debugger/watchdata.cpp
index 306136e9b07..795e62b0b92 100644
--- a/src/plugins/debugger/watchdata.cpp
+++ b/src/plugins/debugger/watchdata.cpp
@@ -144,6 +144,8 @@ WatchData::WatchData() :
     state(InitialState),
     editformat(0),
     address(0),
+    bitpos(0),
+    bitsize(0),
     generation(-1),
     hasChildren(false),
     valueEnabled(true),
diff --git a/src/plugins/debugger/watchdata.h b/src/plugins/debugger/watchdata.h
index 1666fd2cf62..e65b159cd36 100644
--- a/src/plugins/debugger/watchdata.h
+++ b/src/plugins/debugger/watchdata.h
@@ -128,6 +128,8 @@ public:
     QByteArray type;         // Type for further processing
     QString    displayedType;// Displayed type (optional)
     quint64    address;      // Displayed address
+    uint       bitpos;       // Position within bit fields
+    uint       bitsize;      // Size in case of bit fields
     qint32     generation;   // When updated?
     bool hasChildren;
     bool valueEnabled;       // Value will be enabled or not
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index aa39a2741b7..2b895963ed6 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -285,9 +285,12 @@ static QString removeInitialNamespace(QString str, const QByteArray &ns)
 
 QString WatchModel::displayType(const WatchData &data) const
 {
-    return data.displayedType.isEmpty()
+    QString base = data.displayedType.isEmpty()
         ? niceTypeHelper(data.type)
         : data.displayedType;
+    if (data.bitsize)
+        base += QString(":%1").arg(data.bitsize);
+    return base;
 }
 
 static int formatToIntegerBase(int format)
diff --git a/src/plugins/debugger/watchutils.cpp b/src/plugins/debugger/watchutils.cpp
index 5a5ba5fb6db..7cd2a79ef56 100644
--- a/src/plugins/debugger/watchutils.cpp
+++ b/src/plugins/debugger/watchutils.cpp
@@ -1399,6 +1399,12 @@ void parseWatchData(const QSet<QByteArray> &expandedINames,
     mi = item.findChild("typeformats");
     if (mi.isValid())
         data.typeFormats = QString::fromUtf8(mi.data());
+    mi = item.findChild("bitpos");
+    if (mi.isValid())
+        data.bitpos = mi.data().toInt();
+    mi = item.findChild("bitsize");
+    if (mi.isValid())
+        data.bitsize = mi.data().toInt();
 
     setWatchDataValue(data, item);
     setWatchDataAddress(data, item.findChild("addr"));
-- 
GitLab