diff options
author | David Blaikie <dblaikie@gmail.com> | 2016-12-16 19:16:22 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2016-12-16 19:16:22 +0000 |
commit | c66e7e3b8c3baa213864259505790aeb726429ee (patch) | |
tree | 322088f9762722d0b1a9a326b2f3b25b2d9d2de5 /llvm/utils/gdb-scripts/prettyprinters.py | |
parent | a4964f291ac012d9fa52bb3511aa5fab2820b423 (diff) | |
download | bcm5719-llvm-c66e7e3b8c3baa213864259505790aeb726429ee.tar.gz bcm5719-llvm-c66e7e3b8c3baa213864259505790aeb726429ee.zip |
GDB pretty printer for llvm::Optional
(some other implementations of an optional pretty printer print the full
name of the optional type (including template parameter) - but seems if
the template parameter isn't printed for std::vector, not sure why it
would be printed for optional, so erring on the side of consistency in
that direction here - compact, etc, as well)
llvm-svn: 289976
Diffstat (limited to 'llvm/utils/gdb-scripts/prettyprinters.py')
-rw-r--r-- | llvm/utils/gdb-scripts/prettyprinters.py | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/llvm/utils/gdb-scripts/prettyprinters.py b/llvm/utils/gdb-scripts/prettyprinters.py index 1ebe50b2b71..cf1c96a449e 100644 --- a/llvm/utils/gdb-scripts/prettyprinters.py +++ b/llvm/utils/gdb-scripts/prettyprinters.py @@ -103,9 +103,38 @@ class ArrayRefPrinter: def display_hint (self): return 'array' +class OptionalPrinter: + """Print an llvm::Optional object.""" + + def __init__(self, value): + self.value = value + + class _iterator: + def __init__(self, member, empty): + self.member = member + self.done = empty + + def __iter__(self): + return self + + def next(self): + if self.done: + raise StopIteration + self.done = True + return ('value', self.member.dereference()) + + def children(self): + if not self.value['hasVal']: + return self._iterator('', True) + return self._iterator(self.value['storage']['buffer'].address.cast(self.value.type.template_argument(0).pointer()), False) + + def to_string(self): + return 'llvm::Optional is %sinitialized' % ('' if self.value['hasVal'] else 'not ') + pp = gdb.printing.RegexpCollectionPrettyPrinter("LLVMSupport") pp.add_printer('llvm::SmallString', '^llvm::SmallString<.*>$', SmallStringPrinter) pp.add_printer('llvm::StringRef', '^llvm::StringRef$', StringRefPrinter) pp.add_printer('llvm::SmallVectorImpl', '^llvm::SmallVector(Impl)?<.*>$', SmallVectorPrinter) pp.add_printer('llvm::ArrayRef', '^llvm::(Const)?ArrayRef<.*>$', ArrayRefPrinter) +pp.add_printer('llvm::Optional', '^llvm::Optional<.*>$', OptionalPrinter) gdb.printing.register_pretty_printer(gdb.current_objfile(), pp) |