return match.group(1)
+def _cc_field(node):
+ """Previous versions of libcxx had inconsistent field naming naming. Handle
+ both types.
+ """
+ try:
+ return node["__value_"]["__cc_"]
+ except:
+ return node["__value_"]["__cc"]
+
+
+def _data_field(node):
+ """Previous versions of libcxx had inconsistent field naming naming. Handle
+ both types.
+ """
+ try:
+ return node["__data_"]
+ except:
+ return node["__data"]
+
+
+def _size_field(node):
+ """Previous versions of libcxx had inconsistent field naming naming. Handle
+ both types.
+ """
+ try:
+ return node["__size_"]
+ except:
+ return node["__size"]
+
+
# Some common substitutions on the types to reduce visual clutter (A user who
# wants to see the actual details can always use print/r).
_common_substitutions = [
def to_string(self):
"""Build a python string from the data whether stored inline or separately."""
-
value_field = _value_of_pair_first(self.val["__r_"])
short_field = value_field["__s"]
short_size = short_field["__size_"]
- if short_size == 0:
- return ""
if short_field["__is_long_"]:
long_field = value_field["__l"]
data = long_field["__data_"]
def to_string(self): # pylint: disable=g-bad-name
"""GDB calls this to compute the pretty-printed form."""
- ptr = self.val["__data"]
+ ptr = _data_field(self.val)
ptr = ptr.cast(ptr.type.target().strip_typedefs().pointer())
- size = self.val["__size"]
+ size = _size_field(self.val)
return ptr.lazy_string(length=size)
return "map"
def _get_key_value(self, node):
- key_value = node.cast(self.util.cast_type).dereference()[
- "__value_"]["__cc"]
+ key_value = _cc_field(node.cast(self.util.cast_type).dereference())
return [key_value["first"], key_value["second"]]
_remove_generics(_prettify_typename(val.type)))
def _get_node_value(self, node):
- return node["__value_"]["__cc"]
+ return _cc_field(node)
class SetIteratorPrinter(AbstractRBTreeIteratorPrinter):
"""Print a std::unordered_(multi)map."""
def _get_key_value(self, node):
- key_value = node["__value_"]["__cc"]
+ key_value = _cc_field(node)
return [key_value["first"], key_value["second"]]
def display_hint(self):
self._initialize(val, val["__i_"]["__node_"])
def _get_key_value(self):
- key_value = self.node["__value_"]["__cc"]
+ key_value = _cc_field(self.node)
return [key_value["first"], key_value["second"]]
def display_hint(self):