aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/python
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2015-02-20 14:40:00 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2015-02-20 14:40:00 +0000
commitdeaa1ccbec5c806c86d4d7e54334fef6e6abdf0e (patch)
tree9996e45f822dae9b5292fe3b9f5b4c355ab5683d /libstdc++-v3/python
parentab260a3e0cd3fd1d95050e10474223e03784e9b6 (diff)
downloadgcc-deaa1ccbec5c806c86d4d7e54334fef6e6abdf0e.zip
gcc-deaa1ccbec5c806c86d4d7e54334fef6e6abdf0e.tar.gz
gcc-deaa1ccbec5c806c86d4d7e54334fef6e6abdf0e.tar.bz2
re PR libstdc++/64695 (FAIL: libstdc++-prettyprinters/cxx11.cc)
PR libstdc++/64695 * python/libstdcxx/v6/printers.py (StdTuplePrinter): Handle new tuple layout. From-SVN: r220871
Diffstat (limited to 'libstdc++-v3/python')
-rw-r--r--libstdc++-v3/python/libstdcxx/v6/printers.py29
1 files changed, 21 insertions, 8 deletions
diff --git a/libstdc++-v3/python/libstdcxx/v6/printers.py b/libstdc++-v3/python/libstdcxx/v6/printers.py
index 1263183..5a414c5 100644
--- a/libstdc++-v3/python/libstdcxx/v6/printers.py
+++ b/libstdc++-v3/python/libstdcxx/v6/printers.py
@@ -327,22 +327,35 @@ class StdTuplePrinter:
return self
def __next__ (self):
- nodes = self.head.type.fields ()
# Check for further recursions in the inheritance tree.
+ # For a GCC 5+ tuple self.head is None after visiting all nodes:
+ if not self.head:
+ raise StopIteration
+ nodes = self.head.type.fields ()
+ # For a GCC 4.x tuple there is a final node with no fields:
if len (nodes) == 0:
raise StopIteration
# Check that this iteration has an expected structure.
- if len (nodes) != 2:
+ if len (nodes) > 2:
raise ValueError("Cannot parse more than 2 nodes in a tuple tree.")
- # - Left node is the next recursion parent.
- # - Right node is the actual class contained in the tuple.
+ if len (nodes) == 1:
+ # This is the last node of a GCC 5+ std::tuple.
+ impl = self.head.cast (nodes[0].type)
+ self.head = None
+ else:
+ # Either a node before the last node, or the last node of
+ # a GCC 4.x tuple (which has an empty parent).
+
+ # - Left node is the next recursion parent.
+ # - Right node is the actual class contained in the tuple.
- # Process right node.
- impl = self.head.cast (nodes[1].type)
+ # Process right node.
+ impl = self.head.cast (nodes[1].type)
+
+ # Process left node and set it as head.
+ self.head = self.head.cast (nodes[0].type)
- # Process left node and set it as head.
- self.head = self.head.cast (nodes[0].type)
self.count = self.count + 1
# Finally, check the implementation. If it is