diff options
-rw-r--r-- | libcxx/test/pretty_printers/gdb_pretty_printer_test.py | 19 | ||||
-rw-r--r-- | libcxx/utils/gdb/libcxx/printers.py | 18 |
2 files changed, 27 insertions, 10 deletions
diff --git a/libcxx/test/pretty_printers/gdb_pretty_printer_test.py b/libcxx/test/pretty_printers/gdb_pretty_printer_test.py index ece13b7b329..af473c48ea9 100644 --- a/libcxx/test/pretty_printers/gdb_pretty_printer_test.py +++ b/libcxx/test/pretty_printers/gdb_pretty_printer_test.py @@ -17,6 +17,7 @@ See gdb_pretty_printer_test.sh.cpp on how to write a test case. from __future__ import print_function import re import gdb +import sys test_failures = 0 @@ -57,9 +58,9 @@ class CheckResult(gdb.Command): print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line)) print("GDB printed:") - print(" " + value) + print(" " + repr(value)) print("Value should match:") - print(" " + check_literal) + print(" " + repr(check_literal)) test_failures += 1 else: print("PASS: " + test_loc.symtab.filename + @@ -76,11 +77,15 @@ class CheckResult(gdb.Command): def _get_value_string(self, compare_frame, testcase_frame): compare_frame.select() if "ComparePrettyPrint" in compare_frame.name(): - return gdb.execute("p value", to_string=True) - value_str = str(compare_frame.read_var("value")) - clean_expression_str = value_str.strip("'\"") - testcase_frame.select() - return gdb.execute("p " + clean_expression_str, to_string=True) + s = gdb.execute("p value", to_string=True) + else: + value_str = str(compare_frame.read_var("value")) + clean_expression_str = value_str.strip("'\"") + testcase_frame.select() + s = gdb.execute("p " + clean_expression_str, to_string=True) + if sys.version_info.major == 2: + return s.decode("utf-8") + return s def exit_handler(event=None): diff --git a/libcxx/utils/gdb/libcxx/printers.py b/libcxx/utils/gdb/libcxx/printers.py index ff45bde6172..b2d589424a3 100644 --- a/libcxx/utils/gdb/libcxx/printers.py +++ b/libcxx/utils/gdb/libcxx/printers.py @@ -137,13 +137,17 @@ class StdTuplePrinter(object): def __iter__(self): return self - def next(self): + def __next__(self): # child_iter raises StopIteration when appropriate. field_name = self.child_iter.next() child = self.val["__base_"][field_name]["__value_"] self.count += 1 return ("[%d]" % self.count, child) + # TODO Delete when we drop Python 2. + def next(self): + return self.__next__() + def __init__(self, val): self.val = val @@ -311,7 +315,7 @@ class StdVectorPrinter(object): def __iter__(self): return self - def next(self): + def __next__(self): """Retrieve the next element.""" self.count += 1 @@ -328,6 +332,10 @@ class StdVectorPrinter(object): self.offset = 0 return ("[%d]" % self.count, outbit) + # TODO Delete when we drop Python 2. + def next(self): + return self.__next__() + class _VectorIterator(object): """Class to iterate over the non-bool vector's children.""" @@ -339,7 +347,7 @@ class StdVectorPrinter(object): def __iter__(self): return self - def next(self): + def __next__(self): self.count += 1 if self.item == self.end: raise StopIteration @@ -347,6 +355,10 @@ class StdVectorPrinter(object): self.item += 1 return ("[%d]" % self.count, entry) + # TODO Delete when we drop Python 2. + def next(self): + return self.__next__() + def __init__(self, val): """Set val, length, capacity, and iterator for bool and normal vectors.""" self.val = val |