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 | 94363b3cf675fe10a405ba198fea9a32af134b49 (patch) | |
tree | 795f6ab4f7a23ef24c713f64c9481eaf185dac65 /utils | |
parent | 7321ba268a1be7fab16e82d93bd42f9b3a90eb36 (diff) |
[gdb] Fix SmallVector pretty printer after r337514
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337747 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r-- | utils/gdb-scripts/prettyprinters.py | 46 |
1 files changed, 13 insertions, 33 deletions
diff --git a/utils/gdb-scripts/prettyprinters.py b/utils/gdb-scripts/prettyprinters.py index aee0b8c74bb..918411db42f 100644 --- a/utils/gdb-scripts/prettyprinters.py +++ b/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' |