libstdc++: Add GDB printer for std::integral_constant
libstdc++-v3/ChangeLog: * python/libstdcxx/v6/printers.py (StdIntegralConstantPrinter): Add printer for std::integral_constant. * testsuite/libstdc++-prettyprinters/cxx11.cc: Test it.
This commit is contained in:
parent
f50f2efae9
commit
cd2022f392
2 changed files with 27 additions and 0 deletions
|
@ -2306,6 +2306,23 @@ class StdLocalePrinter(printer_base):
|
|||
mod = ' with "{}={}"'.format(cat, other)
|
||||
return 'std::locale = "{}"{}'.format(name, mod)
|
||||
|
||||
class StdIntegralConstantPrinter(printer_base):
|
||||
"""Print a std::true_type or std::false_type."""
|
||||
|
||||
def __init__(self, typename, val):
|
||||
self._val = val
|
||||
self._typename = typename
|
||||
|
||||
def to_string(self):
|
||||
value_type = self._val.type.template_argument(0)
|
||||
value = self._val.type.template_argument(1)
|
||||
if value_type.code == gdb.TYPE_CODE_BOOL:
|
||||
if value:
|
||||
return "std::true_type"
|
||||
else:
|
||||
return "std::false_type"
|
||||
typename = strip_versioned_namespace(self._typename)
|
||||
return "{}<{}, {}>".format(typename, value_type, value)
|
||||
|
||||
# A "regular expression" printer which conforms to the
|
||||
# "SubPrettyPrinter" protocol from gdb.printing.
|
||||
|
@ -2788,6 +2805,9 @@ def build_libstdcxx_dictionary():
|
|||
# vector<bool>
|
||||
libstdcxx_printer.add_version('std::', 'locale', StdLocalePrinter)
|
||||
|
||||
libstdcxx_printer.add_version('std::', 'integral_constant',
|
||||
StdIntegralConstantPrinter)
|
||||
|
||||
if hasattr(gdb.Value, 'dynamic_type'):
|
||||
libstdcxx_printer.add_version('std::', 'error_code',
|
||||
StdErrorCodePrinter)
|
||||
|
|
|
@ -207,6 +207,13 @@ main()
|
|||
std::atomic<Value> av{{8, 9}};
|
||||
// { dg-final { note-test av {std::atomic<Value> = { {i = 8, j = 9} }} } }
|
||||
|
||||
std::integral_constant<int, 1> one;
|
||||
// { dg-final { note-test one {std::integral_constant<int, 1>} } }
|
||||
std::integral_constant<bool, true> truth;
|
||||
// { dg-final { note-test truth {std::true_type} } }
|
||||
std::integral_constant<bool, 0> lies;
|
||||
// { dg-final { note-test lies {std::false_type} } }
|
||||
|
||||
placeholder(""); // Mark SPOT
|
||||
use(efl);
|
||||
use(fl);
|
||||
|
|
Loading…
Add table
Reference in a new issue