ThirdParty: Add optional-lite polyfill

Thanks to all who have made contributions to
https://github.com/martinmoene/optional-lite
This commit is contained in:
Paul Hollinsky
2021-04-06 18:01:26 -04:00
parent 18394d0cfb
commit 4a1d0382f2
44 changed files with 7456 additions and 0 deletions
@@ -0,0 +1,26 @@
# 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