chore(bin/lean-gdb): pretty-print lean::optional

This commit is contained in:
Sebastian Ullrich 2017-05-04 17:12:07 +02:00 committed by Leonardo de Moura
parent aa601d3e51
commit 85cf1b7075

View file

@ -9,6 +9,27 @@
import gdb
import gdb.printing
class LeanOptionalPrinter:
"""Print a lean::optional object."""
def __init__(self, val):
self.val = val
def get_val(self):
if hasattr(self.val, 'm_some'):
if not self.val['m_some']:
return None
elif not self.val['m_value'].cast(gdb.lookup_type('char').pointer()):
return None
return self.val['m_value']
def children(self):
val = self.get_val()
return [('', val)] if val else []
def to_string(self):
return str(self.val.type)
class LeanNamePrinter:
"""Print a lean::name object."""
@ -143,6 +164,7 @@ class LeanRBMapPrinter:
def build_pretty_printer():
pp = gdb.printing.RegexpCollectionPrettyPrinter("lean")
pp.add_printer('optional', '^lean::optional', LeanOptionalPrinter)
pp.add_printer('name', '^lean::name$', LeanNamePrinter)
pp.add_printer('expr', '^lean::expr$', LeanExprPrinter)
pp.add_printer('list', '^lean::list', LeanListPrinter)