Allow a pretty-printer without a to_string method
PR python/16047 points out that, while the documentation says that the to_string method is optional for a pretty-printer, the code disagrees and throws an exception. This patch fixes the problem. varobj is already ok here. Tested on x86-64 Fedora 26. gdb/ChangeLog 2018-09-08 Tom Tromey <tom@tromey.com> PR python/16047: * python/py-prettyprint.c (pretty_print_one_value): Check for to_string method. gdb/testsuite/ChangeLog 2018-09-08 Tom Tromey <tom@tromey.com> PR python/16047: * gdb.python/py-prettyprint.py (pp_int_typedef3): New class. (register_pretty_printers): Register new printer. * gdb.python/py-prettyprint.exp (run_lang_tests): Add int_type3 test. * gdb.python/py-prettyprint.c (int_type3): New typedef. (an_int_type3): New global.
This commit is contained in:
parent
0653638f9f
commit
332cf4c925
6 changed files with 47 additions and 10 deletions
|
@ -195,18 +195,23 @@ pretty_print_one_value (PyObject *printer, struct value **out_value)
|
|||
*out_value = NULL;
|
||||
TRY
|
||||
{
|
||||
result.reset (PyObject_CallMethodObjArgs (printer, gdbpy_to_string_cst,
|
||||
NULL));
|
||||
if (result != NULL)
|
||||
if (!PyObject_HasAttr (printer, gdbpy_to_string_cst))
|
||||
result = gdbpy_ref<>::new_reference (Py_None);
|
||||
else
|
||||
{
|
||||
if (! gdbpy_is_string (result.get ())
|
||||
&& ! gdbpy_is_lazy_string (result.get ())
|
||||
&& result != Py_None)
|
||||
result.reset (PyObject_CallMethodObjArgs (printer, gdbpy_to_string_cst,
|
||||
NULL));
|
||||
if (result != NULL)
|
||||
{
|
||||
*out_value = convert_value_from_python (result.get ());
|
||||
if (PyErr_Occurred ())
|
||||
*out_value = NULL;
|
||||
result = NULL;
|
||||
if (! gdbpy_is_string (result.get ())
|
||||
&& ! gdbpy_is_lazy_string (result.get ())
|
||||
&& result != Py_None)
|
||||
{
|
||||
*out_value = convert_value_from_python (result.get ());
|
||||
if (PyErr_Occurred ())
|
||||
*out_value = NULL;
|
||||
result = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue