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
This commit is contained in:
Jonathan Wakely 2015-02-20 14:40:00 +00:00 committed by Jonathan Wakely
parent ab260a3e0c
commit deaa1ccbec
2 changed files with 27 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2015-02-20 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/64695
* python/libstdcxx/v6/printers.py (StdTuplePrinter): Handle new
tuple layout.
2015-02-19 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/58357

View File

@ -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).
# Process right node.
impl = self.head.cast (nodes[1].type)
# - 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 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