diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2019-03-21 16:29:14 +0000 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2019-03-26 18:25:10 +0000 |
commit | 9f9aa85206ab31d2c583e7fef568700d31eb577e (patch) | |
tree | 2a45f4e501f37c94af2520e9227287f80f3de7c4 /gdb/testsuite/gdb.python | |
parent | 3714a195e08a5cc7713b27def7a3c3b534da53e8 (diff) | |
download | binutils-9f9aa85206ab31d2c583e7fef568700d31eb577e.zip binutils-9f9aa85206ab31d2c583e7fef568700d31eb577e.tar.gz binutils-9f9aa85206ab31d2c583e7fef568700d31eb577e.tar.bz2 |
gdb: Make python display_hint None handling defined behaviour
The documentation say that the display_hint method must return a
string to serve as a display hint, and then goes on to list some
acceptable strings.
However, if we don't supply the display_hint method then we get a
default display style behaviour and there's currently no way (in the
python api) to force this default behaviour.
The guile api allows #f to be used in order to force the default
display style behaviour, and this is documented.
Currently, using None in the python api also forces the default
display behaviour.
This commit extends the documentation to make returning None from the
display_hint method an official mechanism by which the user can get
the default display style.
I've extended one of the existing tests to cover this case.
gdb/doc/ChangeLog:
* python.texi (Pretty Printing API): Document use of None for the
display_hint.
gdb/testsuite/ChangeLog:
* gdb.python/py-prettyprint.c (struct container) <is_map_p>: New
field.
(make_container): Initialise new field.
* gdb.python/py-prettyprint.exp: Add new tests.
* gdb.python/py-prettyprint.py (class ContainerPrinter)
<display_hint>: New method.
Diffstat (limited to 'gdb/testsuite/gdb.python')
-rw-r--r-- | gdb/testsuite/gdb.python/py-prettyprint.c | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-prettyprint.exp | 15 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-prettyprint.py | 6 |
3 files changed, 22 insertions, 1 deletions
diff --git a/gdb/testsuite/gdb.python/py-prettyprint.c b/gdb/testsuite/gdb.python/py-prettyprint.c index 01fdf8a..1b9aeb4 100644 --- a/gdb/testsuite/gdb.python/py-prettyprint.c +++ b/gdb/testsuite/gdb.python/py-prettyprint.c @@ -175,6 +175,7 @@ struct container string name; int len; int *elements; + int is_map_p; }; typedef struct container zzz_type; @@ -195,6 +196,7 @@ make_container (const char *s) result.name = make_string (s); result.len = 0; result.elements = 0; + result.is_map_p = 0; return result; } diff --git a/gdb/testsuite/gdb.python/py-prettyprint.exp b/gdb/testsuite/gdb.python/py-prettyprint.exp index 3359082..82e7e65 100644 --- a/gdb/testsuite/gdb.python/py-prettyprint.exp +++ b/gdb/testsuite/gdb.python/py-prettyprint.exp @@ -109,7 +109,12 @@ proc run_lang_tests {exefile lang} { gdb_test_no_output "set python print-stack full" gdb_test "print hint_error" "Exception: hint failed\r\nhint_error_val" - gdb_test "print c" " = container \"container\" with 2 elements = {$nl *.0. = 23,$nl *.1. = 72$nl}" + gdb_test "print c" " = container \"container\" with 2 elements = {$nl *.0. = 23,$nl *.1. = 72$nl}" \ + "print c, pretty printing on, default display hint" + + gdb_test_no_output "set variable c.is_map_p=1" + gdb_test "print c" " = container \"container\" with 2 elements = \{$nl \\\[23\\\] = 72$nl\}" \ + "print c, pretty printing on, display hint is now map" gdb_test "print nstype" " = {$nl *.0. = 7,$nl *.1. = 42$nl}" @@ -117,6 +122,14 @@ proc run_lang_tests {exefile lang} { gdb_test "print nstype" " = {.0. = 7, .1. = 42}" \ "print nstype on one line" + # Now we have pretty printing turned off, try printing 'c' again. + gdb_test "print c" " = container \"container\" with 2 elements = \{\\\[23\\\] = 72\}" \ + "print c, pretty printing off, display hint is now map" + + gdb_test_no_output "set variable c.is_map_p=0" + gdb_test "print c" " = container \"container\" with 2 elements = \{\\\[0\\\] = 23, \\\[1\\\] = 72\}" \ + "print c, pretty printing off, default display hint" + # Check that GDB doesn't lose typedefs when looking for a printer. gdb_test "print an_int" " = -1" gdb_test "print (int) an_int" " = -1" diff --git a/gdb/testsuite/gdb.python/py-prettyprint.py b/gdb/testsuite/gdb.python/py-prettyprint.py index 92fe815..43727f7 100644 --- a/gdb/testsuite/gdb.python/py-prettyprint.py +++ b/gdb/testsuite/gdb.python/py-prettyprint.py @@ -56,6 +56,12 @@ class ContainerPrinter (object): def children(self): return _iterator(self.val['elements'], self.val['len']) + def display_hint (self): + if (self.val['is_map_p']): + return 'map' + else: + return None + # Treats a container as array. class ArrayPrinter (object): def __init__(self, val): |