diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2015-02-20 14:40:00 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2015-02-20 14:40:00 +0000 |
commit | deaa1ccbec5c806c86d4d7e54334fef6e6abdf0e (patch) | |
tree | 9996e45f822dae9b5292fe3b9f5b4c355ab5683d /libstdc++-v3/python | |
parent | ab260a3e0cd3fd1d95050e10474223e03784e9b6 (diff) | |
download | gcc-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.py | 29 |
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 |