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.
This commit is contained in:
parent
1aac008f1c
commit
a5c5eda7e4
4 changed files with 22 additions and 13 deletions
|
@ -1,3 +1,13 @@
|
||||||
|
2018-09-09 Simon Marchi <simon.marchi@ericsson.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
2018-09-08 Tom Tromey <tom@tromey.com>
|
2018-09-08 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
PR python/16047:
|
PR python/16047:
|
||||||
|
|
|
@ -187,7 +187,7 @@ find_pretty_printer (PyObject *value)
|
||||||
is returned. On error, *OUT_VALUE is set to NULL, NULL is
|
is returned. On error, *OUT_VALUE is set to NULL, NULL is
|
||||||
returned, with a python exception set. */
|
returned, with a python exception set. */
|
||||||
|
|
||||||
static PyObject *
|
static gdbpy_ref<>
|
||||||
pretty_print_one_value (PyObject *printer, struct value **out_value)
|
pretty_print_one_value (PyObject *printer, struct value **out_value)
|
||||||
{
|
{
|
||||||
gdbpy_ref<> result;
|
gdbpy_ref<> result;
|
||||||
|
@ -220,7 +220,7 @@ pretty_print_one_value (PyObject *printer, struct value **out_value)
|
||||||
}
|
}
|
||||||
END_CATCH
|
END_CATCH
|
||||||
|
|
||||||
return result.release ();
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the display hint for the object printer, PRINTER. Return
|
/* 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;
|
struct value *replacement = NULL;
|
||||||
enum string_repr_result result = string_repr_ok;
|
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 != NULL)
|
||||||
{
|
{
|
||||||
if (py_str == Py_None)
|
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
|
set to the replacement value and this function returns NULL. On
|
||||||
error, *REPLACEMENT is set to NULL and this function also returns
|
error, *REPLACEMENT is set to NULL and this function also returns
|
||||||
NULL. */
|
NULL. */
|
||||||
PyObject *
|
gdbpy_ref<>
|
||||||
apply_varobj_pretty_printer (PyObject *printer_obj,
|
apply_varobj_pretty_printer (PyObject *printer_obj,
|
||||||
struct value **replacement,
|
struct value **replacement,
|
||||||
struct ui_file *stream)
|
struct ui_file *stream)
|
||||||
{
|
{
|
||||||
PyObject *py_str = NULL;
|
|
||||||
|
|
||||||
*replacement = 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)
|
if (*replacement == NULL && py_str == NULL)
|
||||||
print_stack_unless_memory_error (stream);
|
print_stack_unless_memory_error (stream);
|
||||||
|
|
|
@ -99,6 +99,7 @@
|
||||||
from including our python/python.h header file. */
|
from including our python/python.h header file. */
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
#include <frameobject.h>
|
#include <frameobject.h>
|
||||||
|
#include "py-ref.h"
|
||||||
|
|
||||||
#if PY_MAJOR_VERSION >= 3
|
#if PY_MAJOR_VERSION >= 3
|
||||||
#define IS_PY3K 1
|
#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
|
/* Note that these are declared here, and not in python.h with the
|
||||||
other pretty-printer functions, because they refer to PyObject. */
|
other pretty-printer functions, because they refer to PyObject. */
|
||||||
PyObject *apply_varobj_pretty_printer (PyObject *print_obj,
|
gdbpy_ref<> apply_varobj_pretty_printer (PyObject *print_obj,
|
||||||
struct value **replacement,
|
struct value **replacement,
|
||||||
struct ui_file *stream);
|
struct ui_file *stream);
|
||||||
PyObject *gdbpy_get_varobj_pretty_printer (struct value *value);
|
PyObject *gdbpy_get_varobj_pretty_printer (struct value *value);
|
||||||
gdb::unique_xmalloc_ptr<char> gdbpy_get_display_hint (PyObject *printer);
|
gdb::unique_xmalloc_ptr<char> gdbpy_get_display_hint (PyObject *printer);
|
||||||
PyObject *gdbpy_default_visualizer (PyObject *self, PyObject *args);
|
PyObject *gdbpy_default_visualizer (PyObject *self, PyObject *args);
|
||||||
|
|
|
@ -2318,9 +2318,9 @@ varobj_value_get_print_value (struct value *value,
|
||||||
{
|
{
|
||||||
struct value *replacement;
|
struct value *replacement;
|
||||||
|
|
||||||
gdbpy_ref<> output (apply_varobj_pretty_printer (value_formatter,
|
gdbpy_ref<> output = apply_varobj_pretty_printer (value_formatter,
|
||||||
&replacement,
|
&replacement,
|
||||||
&stb));
|
&stb);
|
||||||
|
|
||||||
/* If we have string like output ... */
|
/* If we have string like output ... */
|
||||||
if (output != NULL)
|
if (output != NULL)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue