diff options
author | Simon Marchi <simon.marchi@ericsson.com> | 2018-09-09 08:13:17 +0100 |
---|---|---|
committer | Simon Marchi <simon.marchi@ericsson.com> | 2018-09-09 08:13:17 +0100 |
commit | a5c5eda7e412aa7f3cb843cd48b3b4c0101718a0 (patch) | |
tree | 74531596833e161980e941f3f355d3f9d0664264 /gdb/python | |
parent | 1aac008f1c2f0a239b7ba26efe9d6b68044cddf8 (diff) | |
download | gdb-a5c5eda7e412aa7f3cb843cd48b3b4c0101718a0.zip gdb-a5c5eda7e412aa7f3cb843cd48b3b4c0101718a0.tar.gz gdb-a5c5eda7e412aa7f3cb843cd48b3b4c0101718a0.tar.bz2 |
python: Make two functions return gdbpy_ref<>
I noticed that we release a gdbpy_ref in pretty_print_one_value only to
create it again later. This patch fills the gap by returning a
gdbpy_ref all the way.
gdb/ChangeLog:
* python/py-prettyprint.c (pretty_print_one_value): Return
gdbpy_ref<>.
(print_string_repr): Adjust.
(apply_varobj_pretty_printer): Return gdbpy_ref<>.
* python/python-internal.h (apply_varobj_pretty_printer): Return
gdbpy_ref<>.
* varobj.c (varobj_value_get_print_value): Adjust.
Diffstat (limited to 'gdb/python')
-rw-r--r-- | gdb/python/py-prettyprint.c | 12 | ||||
-rw-r--r-- | gdb/python/python-internal.h | 7 |
2 files changed, 9 insertions, 10 deletions
diff --git a/gdb/python/py-prettyprint.c b/gdb/python/py-prettyprint.c index df0266b..7da0f2d 100644 --- a/gdb/python/py-prettyprint.c +++ b/gdb/python/py-prettyprint.c @@ -187,7 +187,7 @@ find_pretty_printer (PyObject *value) is returned. On error, *OUT_VALUE is set to NULL, NULL is returned, with a python exception set. */ -static PyObject * +static gdbpy_ref<> pretty_print_one_value (PyObject *printer, struct value **out_value) { gdbpy_ref<> result; @@ -220,7 +220,7 @@ pretty_print_one_value (PyObject *printer, struct value **out_value) } END_CATCH - return result.release (); + return result; } /* Return the display hint for the object printer, PRINTER. Return @@ -293,7 +293,7 @@ print_string_repr (PyObject *printer, const char *hint, struct value *replacement = NULL; enum string_repr_result result = string_repr_ok; - gdbpy_ref<> py_str (pretty_print_one_value (printer, &replacement)); + gdbpy_ref<> py_str = pretty_print_one_value (printer, &replacement); if (py_str != NULL) { if (py_str == Py_None) @@ -726,15 +726,13 @@ gdbpy_apply_val_pretty_printer (const struct extension_language_defn *extlang, set to the replacement value and this function returns NULL. On error, *REPLACEMENT is set to NULL and this function also returns NULL. */ -PyObject * +gdbpy_ref<> apply_varobj_pretty_printer (PyObject *printer_obj, struct value **replacement, struct ui_file *stream) { - PyObject *py_str = NULL; - *replacement = NULL; - py_str = pretty_print_one_value (printer_obj, replacement); + gdbpy_ref<> py_str = pretty_print_one_value (printer_obj, replacement); if (*replacement == NULL && py_str == NULL) print_stack_unless_memory_error (stream); diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index c4f0e21..3874fdc 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -99,6 +99,7 @@ from including our python/python.h header file. */ #include <Python.h> #include <frameobject.h> +#include "py-ref.h" #if PY_MAJOR_VERSION >= 3 #define IS_PY3K 1 @@ -691,9 +692,9 @@ int gdbpy_is_value_object (PyObject *obj); /* Note that these are declared here, and not in python.h with the other pretty-printer functions, because they refer to PyObject. */ -PyObject *apply_varobj_pretty_printer (PyObject *print_obj, - struct value **replacement, - struct ui_file *stream); +gdbpy_ref<> apply_varobj_pretty_printer (PyObject *print_obj, + struct value **replacement, + struct ui_file *stream); PyObject *gdbpy_get_varobj_pretty_printer (struct value *value); gdb::unique_xmalloc_ptr<char> gdbpy_get_display_hint (PyObject *printer); PyObject *gdbpy_default_visualizer (PyObject *self, PyObject *args); |