mirror of git://gcc.gnu.org/git/gcc.git
xmethods.py: Add xmethods for associative containers.
2014-11-11 Siva Chandra Reddy <sivachandra@google.com> * python/libstdcxx/v6/xmethods.py: Add xmethods for associative containers. * testsuite/libstdc++-xmethods/associative-containers.cc: New file. From-SVN: r217344
This commit is contained in:
parent
e9c51193ea
commit
a5281f1796
|
|
@ -1,3 +1,9 @@
|
||||||
|
2014-11-11 Siva Chandra Reddy <sivachandra@google.com>
|
||||||
|
|
||||||
|
* python/libstdcxx/v6/xmethods.py: Add xmethods for associative
|
||||||
|
containers.
|
||||||
|
* testsuite/libstdc++-xmethods/associative-containers.cc: New file.
|
||||||
|
|
||||||
2014-11-11 Jonathan Wakely <jwakely@redhat.com>
|
2014-11-11 Jonathan Wakely <jwakely@redhat.com>
|
||||||
|
|
||||||
PR libstdc++/63811
|
PR libstdc++/63811
|
||||||
|
|
|
||||||
|
|
@ -422,6 +422,50 @@ class VectorMethodsMatcher(gdb.xmethod.XMethodMatcher):
|
||||||
return None
|
return None
|
||||||
return method.worker_class(class_type.template_argument(0))
|
return method.worker_class(class_type.template_argument(0))
|
||||||
|
|
||||||
|
# Xmethods for associative containers
|
||||||
|
|
||||||
|
class AssociativeContainerWorkerBase(gdb.xmethod.XMethodWorker):
|
||||||
|
def __init__(self, unordered):
|
||||||
|
self._unordered = unordered
|
||||||
|
|
||||||
|
def node_count(self, obj):
|
||||||
|
if self._unordered:
|
||||||
|
return obj['_M_h']['_M_element_count']
|
||||||
|
else:
|
||||||
|
return obj['_M_t']['_M_impl']['_M_node_count']
|
||||||
|
|
||||||
|
def get_arg_types(self):
|
||||||
|
return None
|
||||||
|
|
||||||
|
class AssociativeContainerEmptyWorker(AssociativeContainerWorkerBase):
|
||||||
|
def __call__(self, obj):
|
||||||
|
return int(self.node_count(obj)) == 0
|
||||||
|
|
||||||
|
class AssociativeContainerSizeWorker(AssociativeContainerWorkerBase):
|
||||||
|
def __call__(self, obj):
|
||||||
|
return self.node_count(obj)
|
||||||
|
|
||||||
|
class AssociativeContainerMethodsMatcher(gdb.xmethod.XMethodMatcher):
|
||||||
|
def __init__(self, name):
|
||||||
|
gdb.xmethod.XMethodMatcher.__init__(self,
|
||||||
|
matcher_name_prefix + name)
|
||||||
|
self._name = name
|
||||||
|
self._method_dict = {
|
||||||
|
'size': LibStdCxxXMethod('size', AssociativeContainerSizeWorker),
|
||||||
|
'empty': LibStdCxxXMethod('empty',
|
||||||
|
AssociativeContainerEmptyWorker),
|
||||||
|
}
|
||||||
|
self.methods = [self._method_dict[m] for m in self._method_dict]
|
||||||
|
|
||||||
|
def match(self, class_type, method_name):
|
||||||
|
if not re.match('^std::%s<.*>$' % self._name, class_type.tag):
|
||||||
|
return None
|
||||||
|
method = self._method_dict.get(method_name)
|
||||||
|
if method is None or not method.enabled:
|
||||||
|
return None
|
||||||
|
unordered = 'unordered' in self._name
|
||||||
|
return method.worker_class(unordered)
|
||||||
|
|
||||||
# Xmethods for std::unique_ptr
|
# Xmethods for std::unique_ptr
|
||||||
|
|
||||||
class UniquePtrGetWorker(gdb.xmethod.XMethodWorker):
|
class UniquePtrGetWorker(gdb.xmethod.XMethodWorker):
|
||||||
|
|
@ -465,4 +509,20 @@ def register_libstdcxx_xmethods(locus):
|
||||||
gdb.xmethod.register_xmethod_matcher(locus, DequeMethodsMatcher())
|
gdb.xmethod.register_xmethod_matcher(locus, DequeMethodsMatcher())
|
||||||
gdb.xmethod.register_xmethod_matcher(locus, ListMethodsMatcher())
|
gdb.xmethod.register_xmethod_matcher(locus, ListMethodsMatcher())
|
||||||
gdb.xmethod.register_xmethod_matcher(locus, VectorMethodsMatcher())
|
gdb.xmethod.register_xmethod_matcher(locus, VectorMethodsMatcher())
|
||||||
|
gdb.xmethod.register_xmethod_matcher(
|
||||||
|
locus, AssociativeContainerMethodsMatcher('set'))
|
||||||
|
gdb.xmethod.register_xmethod_matcher(
|
||||||
|
locus, AssociativeContainerMethodsMatcher('map'))
|
||||||
|
gdb.xmethod.register_xmethod_matcher(
|
||||||
|
locus, AssociativeContainerMethodsMatcher('multiset'))
|
||||||
|
gdb.xmethod.register_xmethod_matcher(
|
||||||
|
locus, AssociativeContainerMethodsMatcher('multimap'))
|
||||||
|
gdb.xmethod.register_xmethod_matcher(
|
||||||
|
locus, AssociativeContainerMethodsMatcher('unordered_set'))
|
||||||
|
gdb.xmethod.register_xmethod_matcher(
|
||||||
|
locus, AssociativeContainerMethodsMatcher('unordered_map'))
|
||||||
|
gdb.xmethod.register_xmethod_matcher(
|
||||||
|
locus, AssociativeContainerMethodsMatcher('unordered_multiset'))
|
||||||
|
gdb.xmethod.register_xmethod_matcher(
|
||||||
|
locus, AssociativeContainerMethodsMatcher('unordered_multimap'))
|
||||||
gdb.xmethod.register_xmethod_matcher(locus, UniquePtrMethodsMatcher())
|
gdb.xmethod.register_xmethod_matcher(locus, UniquePtrMethodsMatcher())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue