This is the mail archive of the
archer@sourceware.org
mailing list for the Archer project.
[python][patch] Incorporate recent libstdc++ changes, and also extrapolatenaming patch to unordered containers.
- From: Phil Muldoon <pmuldoon at redhat dot com>
- To: Project Archer <archer at sourceware dot org>
- Cc: Jonathan Wakely <jwakely dot gcc at gmail dot com>
- Date: Mon, 16 Mar 2009 15:23:59 +0000
- Subject: [python][patch] Incorporate recent libstdc++ changes, and also extrapolatenaming patch to unordered containers.
Hi,
As part of a continuing review and improvement of the Python
pretty-printers over on the libstdc++ list, Johnathan Wakely suggested
the following changes referenced here:
http://gcc.gnu.org/ml/libstdc++/2009-03/msg00029.html
I think they are valuable, and would like to suggest we also incorporate
them into our repository. I've incorporated his changes in this patch,
and as per suggestion extrapolated the changes to unordered containers.
OK?
Regards
Phil
ChangeLog:
2009-03-16 Phil Muldoon <pmuldoon@redhat.com>
Jonathan Wakely <jwakely.gcc@gmail.com>
* python/lib/gdb/libstdcxx/v6/printers.py
(StdPointerPrinter.to_string): Account for reference
counts of 0.
(build_libstdcxx_dictionary): Return correct std::tr1 or std::
name for shared_ptr, weak_ptr, unordered_map, unordered_set,
unordered_multimap, unordered_multiset.
diff --git a/gdb/python/lib/gdb/libstdcxx/v6/printers.py b/gdb/python/lib/gdb/libstdcxx/v6/printers.py
index a719b34..bbd7bbc 100644
--- a/gdb/python/lib/gdb/libstdcxx/v6/printers.py
+++ b/gdb/python/lib/gdb/libstdcxx/v6/printers.py
@@ -27,6 +27,8 @@ class StdPointerPrinter:
self.val = val
def to_string (self):
+ if self.val['_M_refcount']['_M_pi'] == 0:
+ return '%s (empty) %s' % (self.typename, self.val['_M_ptr'])
return '%s (count %d) %s' % (self.typename,
self.val['_M_refcount']['_M_pi']['_M_use_count'],
self.val['_M_ptr'])
@@ -617,14 +619,21 @@ def build_libstdcxx_dictionary ():
pretty_printers_dict[re.compile('^std::vector<.*>$')] = StdVectorPrinter
# vector<bool>
- # These are the C++0x printers. They also exist in the standard namespace.
+ # These are the TR1 and C++0x printers.
# For array - the default GDB pretty-printer seems reasonable.
- pretty_printers_dict[re.compile('^std::(tr1::)?shared_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::shared_ptr', val)
- pretty_printers_dict[re.compile('^std::(tr1::)?weak_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::weak_ptr', val)
- pretty_printers_dict[re.compile('^std::(tr1::)?unordered_map<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::tr1::unordered_map', val)
- pretty_printers_dict[re.compile('^std::(tr1::)?unordered_set<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::tr1::unordered_set', val)
- pretty_printers_dict[re.compile('^std::(tr1::)?unordered_multimap<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::tr1::unordered_multimap', val)
- pretty_printers_dict[re.compile('^std::(tr1::)?unordered_multiset<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::tr1::unordered_multiset', val)
+ pretty_printers_dict[re.compile('^std::shared_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::shared_ptr', val)
+ pretty_printers_dict[re.compile('^std::weak_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::weak_ptr', val)
+ pretty_printers_dict[re.compile('^std::unordered_map<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::unordered_map', val)
+ pretty_printers_dict[re.compile('^std::unordered_set<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::unordered_set', val)
+ pretty_printers_dict[re.compile('^std::unordered_multimap<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::unordered_multimap', val)
+ pretty_printers_dict[re.compile('^std::unordered_multiset<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::unordered_multiset', val)
+
+ pretty_printers_dict[re.compile('^std::tr1::shared_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::tr1::shared_ptr', val)
+ pretty_printers_dict[re.compile('^std::tr1::weak_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::tr1::weak_ptr', val)
+ pretty_printers_dict[re.compile('^std::tr1::unordered_map<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::tr1::unordered_map', val)
+ pretty_printers_dict[re.compile('^std::tr1::unordered_set<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::tr1::unordered_set', val)
+ pretty_printers_dict[re.compile('^std::tr1::unordered_multimap<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::tr1::unordered_multimap', val)
+ pretty_printers_dict[re.compile('^std::tr1::unordered_multiset<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::tr1::unordered_multiset', val)
# Extensions.