diff options
author | Fangrui Song <maskray@google.com> | 2018-07-23 21:33:51 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2018-07-23 21:33:51 +0000 |
commit | d9c254771dcdb8bd5e39aada5b8336a4bff52195 (patch) | |
tree | 6e8efa71b670c94f96e4a22ac5764bf43408ad00 /llvm/utils/gdb-scripts | |
parent | ab77d5eedfca29f17e8595eb7c8c7fb3dde2fd8f (diff) | |
download | bcm5719-llvm-d9c254771dcdb8bd5e39aada5b8336a4bff52195.tar.gz bcm5719-llvm-d9c254771dcdb8bd5e39aada5b8336a4bff52195.zip |
[gdb] Fix SmallVector pretty printer after r337514
llvm-svn: 337747
Diffstat (limited to 'llvm/utils/gdb-scripts')
-rw-r--r-- | llvm/utils/gdb-scripts/prettyprinters.py | 46 |
1 files changed, 13 insertions, 33 deletions
diff --git a/llvm/utils/gdb-scripts/prettyprinters.py b/llvm/utils/gdb-scripts/prettyprinters.py index aee0b8c74bb..918411db42f 100644 --- a/llvm/utils/gdb-scripts/prettyprinters.py +++ b/llvm/utils/gdb-scripts/prettyprinters.py @@ -22,8 +22,7 @@ class SmallStringPrinter: def to_string(self): begin = self.val['BeginX'] - end = self.val['EndX'] - return escape_bytes(begin.cast(gdb.lookup_type('char').pointer()), end - begin) + return escape_bytes(begin.cast(gdb.lookup_type('char').pointer()), self.val['Size']) class StringRefPrinter: """Print an llvm::StringRef object.""" @@ -34,44 +33,25 @@ class StringRefPrinter: def to_string(self): return escape_bytes(self.val['Data'], self.val['Length']) -class SmallVectorPrinter: +class SmallVectorPrinter(Iterator): """Print an llvm::SmallVector object.""" - class _iterator: - def __init__(self, begin, end): - self.cur = begin - self.end = end - self.count = 0 - - def __iter__(self): - return self - - def next(self): - if self.cur == self.end: - raise StopIteration - count = self.count - self.count = self.count + 1 - cur = self.cur - self.cur = self.cur + 1 - return '[%d]' % count, cur.dereference() - - __next__ = next - def __init__(self, val): self.val = val + t = val.type.template_argument(0).pointer() + self.begin = val['BeginX'].cast(t) + self.size = val['Size'] + self.i = 0 - def children(self): - t = self.val.type.template_argument(0).pointer() - begin = self.val['BeginX'].cast(t) - end = self.val['EndX'].cast(t) - return self._iterator(begin, end) + def __next__(self): + if self.i == self.size: + raise StopIteration + ret = '[{}]'.format(self.i), (self.begin+self.i).dereference() + self.i += 1 + return ret def to_string(self): - t = self.val.type.template_argument(0).pointer() - begin = self.val['BeginX'].cast(t) - end = self.val['EndX'].cast(t) - capacity = self.val['CapacityX'].cast(t) - return 'llvm::SmallVector of length %d, capacity %d' % (end - begin, capacity - begin) + return 'llvm::SmallVector of Size {}, Capacity {}'.format(self.size, self.val['Capacity']) def display_hint (self): return 'array' |