re PR libstdc++/55041 (prettyprinting/shared_ptr & cxx11 fails on some platforms)
authorJonathan Wakely <jwakely.gcc@gmail.com>
Sun, 28 Oct 2012 13:20:31 +0000 (13:20 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Sun, 28 Oct 2012 13:20:31 +0000 (13:20 +0000)
PR libstdc++/55041
* python/libstdcxx/v6/printers.py (Tr1UnorderedMapPrinter): Update
to handle hashtable as member of unordered_map not base class.
(Tr1UnorderedSetPrinter): Likewise.

From-SVN: r192894

libstdc++-v3/ChangeLog
libstdc++-v3/python/libstdcxx/v6/printers.py

index fa0ce759d61875de78238888c90e46bec77a49be..d60078a6c9e1516385caa4b40da24f943647b66c 100644 (file)
@@ -1,3 +1,10 @@
+2012-10-28  Jonathan Wakely  <jwakely.gcc@gmail.com>
+
+       PR libstdc++/55041
+       * python/libstdcxx/v6/printers.py (Tr1UnorderedMapPrinter): Update
+       to handle hashtable as member of unordered_map not base class.
+       (Tr1UnorderedSetPrinter): Likewise.
+
 2012-10-27  François Dumont  <fdumont@gcc.gnu.org>
 
        * include/bits/unordered_map.h (unordered_map<>): Prefer
index 0eac413bf4a9faea284d991651109fdf2e50c287..07a5ee62f355f43bc41c24e9b3250122d0dc9888 100644 (file)
@@ -633,8 +633,13 @@ class Tr1UnorderedSetPrinter:
         self.typename = typename
         self.val = val
 
+    def hashtable (self):
+        if self.typename.startswith('std::tr1'):
+            return self.val
+        return self.val['_M_h']
+
     def to_string (self):
-        return '%s with %d elements' % (self.typename, self.val['_M_element_count'])
+        return '%s with %d elements' % (self.typename, self.hashtable()['_M_element_count'])
 
     @staticmethod
     def format_count (i):
@@ -642,7 +647,7 @@ class Tr1UnorderedSetPrinter:
 
     def children (self):
         counter = itertools.imap (self.format_count, itertools.count())
-        return itertools.izip (counter, Tr1HashtableIterator (self.val))
+        return itertools.izip (counter, Tr1HashtableIterator (self.hashtable()))
 
 class Tr1UnorderedMapPrinter:
     "Print a tr1::unordered_map"
@@ -651,8 +656,13 @@ class Tr1UnorderedMapPrinter:
         self.typename = typename
         self.val = val
 
+    def hashtable (self):
+        if self.typename.startswith('std::tr1'):
+            return self.val
+        return self.val['_M_h']
+
     def to_string (self):
-        return '%s with %d elements' % (self.typename, self.val['_M_element_count'])
+        return '%s with %d elements' % (self.typename, self.hashtable()['_M_element_count'])
 
     @staticmethod
     def flatten (list):
@@ -671,7 +681,7 @@ class Tr1UnorderedMapPrinter:
     def children (self):
         counter = itertools.imap (self.format_count, itertools.count())
         # Map over the hash table and flatten the result.
-        data = self.flatten (itertools.imap (self.format_one, Tr1HashtableIterator (self.val)))
+        data = self.flatten (itertools.imap (self.format_one, Tr1HashtableIterator (self.hashtable())))
         # Zip the two iterators together.
         return itertools.izip (counter, data)