diff options
author | Doug Evans <dje@google.com> | 2011-10-07 22:46:15 +0000 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2011-10-07 22:46:15 +0000 |
commit | 1fa57852d6d79171d8246736a2f8a3679c0b291f (patch) | |
tree | f3fd4a508d73f740aca14e2417132e5a9534228f /gdb/python/lib | |
parent | 690a49373cba8773b00213ea51b79936890f4c1b (diff) | |
download | binutils-gdb-1fa57852d6d79171d8246736a2f8a3679c0b291f.tar.gz |
* 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/lib')
-rw-r--r-- | gdb/python/lib/gdb/printing.py | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/gdb/python/lib/gdb/printing.py b/gdb/python/lib/gdb/printing.py index 46ffccab43d..a0308276af2 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) |