libicsneo/include/icsneo/third-party/optional-lite/extra/gdb/nonstd_optional_printer.py

27 lines
1.2 KiB
Python

# gdb pretty-printer contributed by @bas524, Alexander B.
#
# register with:
# libstdcxx_printer.add_version('nonstd::optional_lite::', 'optional', NonStdOptionalPrinter)
class NonStdOptionalPrinter(SingleObjContainerPrinter):
"Print a nonstd::optional"
def __init__ (self, typename, val):
alternatives = get_template_arg_list(val.type)
valtype = self._recognize (val.type.template_argument(0))
self.typename = strip_versioned_namespace(typename)
self.typename = re.sub('^nonstd::(optional_lite::|)(optional::|)(.*)', r'nonstd::\1\3<%s>' % valtype, self.typename, 1)
self.val = val
self.contained_type = alternatives[0]
addr = val['contained']['data']['__data'].address
contained_value = addr.cast(self.contained_type.pointer()).dereference()
visualizer = gdb.default_visualizer (contained_value)
super (NonStdOptionalPrinter, self).__init__ (contained_value, visualizer)
def to_string (self):
if self.contained_value is None:
return "%s [no contained value]" % self.typename
if self.visualizer:
return "%s containing %s" % (self.typename, self.visualizer.to_string())
return self.typename