From dfadbe7cb0074c6979c0a3cbdc89624e4a8dd2d1 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Wed, 22 Feb 2012 17:52:48 +0100
Subject: [PATCH] debugger: don't use dynamic types when dumping base classes.

Change-Id: Id1effadbf47d4d42be44ccf63ef39d1bda8b83a1
Reviewed-by: hjk <qthjk@ovi.com>
---
 share/qtcreator/dumper/dumper.py | 26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

diff --git a/share/qtcreator/dumper/dumper.py b/share/qtcreator/dumper/dumper.py
index edf67da3d4c..3336e458b86 100644
--- a/share/qtcreator/dumper/dumper.py
+++ b/share/qtcreator/dumper/dumper.py
@@ -330,18 +330,6 @@ class NoAddress:
         self.d.currentPrintsAddress = self.savedPrintsAddress
 
 
-class NoDynamicType:
-    def __init__(self, d):
-        self.d = d
-
-    def __enter__(self):
-        self.savedUseDynamicType = self.d.useDynamicType
-        self.d.useDynamicType = False
-
-    def __exit__(self, exType, exValue, exTraceBack):
-        self.d.useDynamicType = self.savedUseDynamicType
-
-
 
 class SubItem:
     def __init__(self, d, component):
@@ -1404,7 +1392,7 @@ class Dumper:
         with SubItem(self, name):
             self.putItem(result)
 
-    def putItem(self, value):
+    def putItem(self, value, tryDynamic=True):
         if value is None:
             # Happens for non-available watchers in gdb versions that
             # need to use gdb.execute instead of gdb.parse_and_eval
@@ -1669,9 +1657,8 @@ class Dumper:
             check(False)
 
 
-        if self.useDynamicType:
+        if self.useDynamicType and tryDynamic:
             dtypeName = dynamicTypeName(value.cast(type))
-            #dtypeName = str(lookupType(dtypeName)) # Strip const etc. FIXME
         else:
             dtypeName = typeName
 
@@ -1800,11 +1787,10 @@ class Dumper:
                     # strange characters.
                     if dumpBase:
                         baseNumber += 1
-                        with NoDynamicType(self):
-                            with UnnamedSubItem(self, "@%d" % baseNumber):
-                                self.put('iname="%s",' % self.currentIName)
-                                self.put('name="%s",' % field.name)
-                                self.putItem(value.cast(field.type))
+                        with UnnamedSubItem(self, "@%d" % baseNumber):
+                            self.put('iname="%s",' % self.currentIName)
+                            self.put('name="%s",' % field.name)
+                            self.putItem(value.cast(field.type), False)
                 elif len(field.name) == 0:
                     # Anonymous union. We need a dummy name to distinguish
                     # multiple anonymous unions in the struct.
-- 
GitLab