Use a wrapper for PyErr_Fetch
authorTom Tromey <tom@tromey.com>
Thu, 27 Dec 2018 18:32:01 +0000 (11:32 -0700)
committerTom Tromey <tom@tromey.com>
Thu, 3 Jan 2019 21:49:18 +0000 (14:49 -0700)
commit5c329e6ab4c7bba9b83155571b150756210001df
tree35725c6442fabe48ff6f0b573eb6d4985f215618
parent169bb27bce3dc43b2bb5f6abf7fc21c19de5454a
Use a wrapper for PyErr_Fetch

This introduces a new class that wraps PyErr_Fetch and PyErr_Restore,
and then changes all the callers in gdb to use it.  This reduces the
amount of explicit reference counting that is done in the Python code.
I also found and fixed a latent bug in gdbpy_print_stack -- it was not
correctly checking some error conditions, nor clearing the exception
when needed.

gdb/ChangeLog
2019-01-03  Tom Tromey  <tom@tromey.com>

* python/python.c (gdbpy_enter, ~gdbpy_enter): Update.
(gdbpy_print_stack): Use gdbpy_err_fetch.
* python/python-internal.h (class gdbpy_err_fetch): New class.
(class gdbpy_enter) <m_error_type, m_error_value,
m_error_traceback>: Remove.
<m_error>: New member.
(gdbpy_exception_to_string): Don't declare.
* python/py-varobj.c (py_varobj_iter_next): Use gdbpy_err_fetch.
* python/py-value.c (convert_value_from_python): Use
gdbpy_err_fetch.
* python/py-utils.c (gdbpy_err_fetch::to_string): Rename from
gdbpy_exception_to_string.
(gdbpy_handle_exception): Use gdbpy_err_fetch.
* python/py-prettyprint.c (print_stack_unless_memory_error): Use
gdbpy_err_fetch.
gdb/ChangeLog
gdb/python/py-prettyprint.c
gdb/python/py-utils.c
gdb/python/py-value.c
gdb/python/py-varobj.c
gdb/python/python-internal.h
gdb/python/python.c