Make libc++ gdb pretty printer Python 3 compatible
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@373691 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/pretty_printers/gdb_pretty_printer_test.py b/test/pretty_printers/gdb_pretty_printer_test.py
index ece13b7..af473c4 100644
--- a/test/pretty_printers/gdb_pretty_printer_test.py
+++ b/test/pretty_printers/gdb_pretty_printer_test.py
@@ -17,6 +17,7 @@
from __future__ import print_function
import re
import gdb
+import sys
test_failures = 0
@@ -57,9 +58,9 @@
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 @@
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/utils/gdb/libcxx/printers.py b/utils/gdb/libcxx/printers.py
index ff45bde..b2d5894 100644
--- a/utils/gdb/libcxx/printers.py
+++ b/utils/gdb/libcxx/printers.py
@@ -137,13 +137,17 @@
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 @@
def __iter__(self):
return self
- def next(self):
+ def __next__(self):
"""Retrieve the next element."""
self.count += 1
@@ -328,6 +332,10 @@
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 @@
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 @@
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