aboutsummaryrefslogtreecommitdiff
path: root/gdb/python
diff options
context:
space:
mode:
authorDoug Evans <dje@google.com>2011-10-07 22:46:15 +0000
committerDoug Evans <dje@google.com>2011-10-07 22:46:15 +0000
commit1fa57852d6d79171d8246736a2f8a3679c0b291f (patch)
treef3fd4a508d73f740aca14e2417132e5a9534228f /gdb/python
parent690a49373cba8773b00213ea51b79936890f4c1b (diff)
downloadgdb-1fa57852d6d79171d8246736a2f8a3679c0b291f.zip
gdb-1fa57852d6d79171d8246736a2f8a3679c0b291f.tar.gz
gdb-1fa57852d6d79171d8246736a2f8a3679c0b291f.tar.bz2
* python/lib/gdb/printing.py (register_pretty_printer): New argument
`replace'. testsuite/ * gdb.python/py-pp-maint.py: Add tests for `replace' arg.
Diffstat (limited to 'gdb/python')
-rw-r--r--gdb/python/lib/gdb/printing.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/gdb/python/lib/gdb/printing.py b/gdb/python/lib/gdb/printing.py
index 46ffcca..a030827 100644
--- a/gdb/python/lib/gdb/printing.py
+++ b/gdb/python/lib/gdb/printing.py
@@ -68,7 +68,7 @@ class SubPrettyPrinter(object):
self.enabled = True
-def register_pretty_printer(obj, printer):
+def register_pretty_printer(obj, printer, replace=False):
"""Register pretty-printer PRINTER with OBJ.
The printer is added to the front of the search list, thus one can override
@@ -81,6 +81,8 @@ def register_pretty_printer(obj, printer):
is registered globally).
printer: Either a function of one argument (old way) or any object
which has attributes: name, enabled, __call__.
+ replace: If True replace any existing copy of the printer.
+ Otherwise if the printer already exists raise an exception.
Returns:
Nothing.
@@ -128,10 +130,16 @@ def register_pretty_printer(obj, printer):
# Alas, we can't do the same for functions and __name__, they could
# all have a canonical name like "lookup_function".
# PERF: gdb records printers in a list, making this inefficient.
- if (printer.name in
- [p.name for p in obj.pretty_printers if hasattr(p, "name")]):
- raise RuntimeError("pretty-printer already registered: %s" %
- printer.name)
+ i = 0
+ for p in obj.pretty_printers:
+ if hasattr(p, "name") and p.name == printer.name:
+ if replace:
+ del obj.pretty_printers[i]
+ break
+ else:
+ raise RuntimeError("pretty-printer already registered: %s" %
+ printer.name)
+ i = i + 1
obj.pretty_printers.insert(0, printer)