aboutsummaryrefslogtreecommitdiff
path: root/gdb/python
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-10-24 16:45:41 -0600
committerTom Tromey <tom@tromey.com>2018-11-04 08:01:01 -0700
commita31abe80ea4c45b544f3ae04bc63ccaeba530e0f (patch)
treea6caa5b1524a6939eb14c2f65f7c61895ea42965 /gdb/python
parent833d985d1c7f69f953a5c7ddcf2af1d001504961 (diff)
downloadgdb-a31abe80ea4c45b544f3ae04bc63ccaeba530e0f.zip
gdb-a31abe80ea4c45b544f3ae04bc63ccaeba530e0f.tar.gz
gdb-a31abe80ea4c45b544f3ae04bc63ccaeba530e0f.tar.bz2
Return gdbpy_ref from gdbpy_get_varobj_pretty_printer
This changes gdbpy_get_varobj_pretty_printer to return a gdbpy_ref. gdb/ChangeLog 2018-11-04 Tom Tromey <tom@tromey.com> * varobj.c (install_default_visualizer): Update. * python/python-internal.h (gdbpy_get_varobj_pretty_printer): Return gdbpy_ref. * python/py-prettyprint.c (search_pp_list): Return gdbpy_ref. (find_pretty_printer_from_progspace) (find_pretty_printer_from_gdb, find_pretty_printer) (gdbpy_get_varobj_pretty_printer): Return gdbpy_ref. (gdbpy_get_varobj_pretty_printer, gdbpy_default_visualizer): Update.
Diffstat (limited to 'gdb/python')
-rw-r--r--gdb/python/py-prettyprint.c28
-rw-r--r--gdb/python/python-internal.h2
2 files changed, 14 insertions, 16 deletions
diff --git a/gdb/python/py-prettyprint.c b/gdb/python/py-prettyprint.c
index 2386dcc..fa4107c 100644
--- a/gdb/python/py-prettyprint.c
+++ b/gdb/python/py-prettyprint.c
@@ -45,7 +45,7 @@ enum string_repr_result
will return None. On error, it will set the Python error and
return NULL. */
-static PyObject *
+static gdbpy_ref<>
search_pp_list (PyObject *list, PyObject *value)
{
Py_ssize_t pp_list_size, list_index;
@@ -78,10 +78,10 @@ search_pp_list (PyObject *list, PyObject *value)
if (printer == NULL)
return NULL;
else if (printer != Py_None)
- return printer.release ();
+ return printer;
}
- Py_RETURN_NONE;
+ return gdbpy_ref<>::new_reference (Py_None);
}
/* Subroutine of find_pretty_printer to simplify it.
@@ -125,7 +125,7 @@ find_pretty_printer_from_objfiles (PyObject *value)
The result is Py_None, suitably inc-ref'd, if no pretty-printer was found.
Otherwise the result is the pretty-printer function, suitably inc-ref'd. */
-static PyObject *
+static gdbpy_ref<>
find_pretty_printer_from_progspace (PyObject *value)
{
gdbpy_ref<> obj = pspace_to_pspace_object (current_program_space);
@@ -142,17 +142,17 @@ find_pretty_printer_from_progspace (PyObject *value)
The result is Py_None, suitably inc-ref'd, if no pretty-printer was found.
Otherwise the result is the pretty-printer function, suitably inc-ref'd. */
-static PyObject *
+static gdbpy_ref<>
find_pretty_printer_from_gdb (PyObject *value)
{
/* Fetch the global pretty printer list. */
if (gdb_python_module == NULL
|| ! PyObject_HasAttrString (gdb_python_module, "pretty_printers"))
- Py_RETURN_NONE;
+ return gdbpy_ref<>::new_reference (Py_None);
gdbpy_ref<> pp_list (PyObject_GetAttrString (gdb_python_module,
"pretty_printers"));
if (pp_list == NULL || ! PyList_Check (pp_list.get ()))
- Py_RETURN_NONE;
+ return gdbpy_ref<>::new_reference (Py_None);
return search_pp_list (pp_list.get (), value);
}
@@ -161,19 +161,19 @@ find_pretty_printer_from_gdb (PyObject *value)
pretty-printer exists, return None. If one exists, return a new
reference. On error, set the Python error and return NULL. */
-static PyObject *
+static gdbpy_ref<>
find_pretty_printer (PyObject *value)
{
/* Look at the pretty-printer list for each objfile
in the current program-space. */
gdbpy_ref<> function (find_pretty_printer_from_objfiles (value));
if (function == NULL || function != Py_None)
- return function.release ();
+ return function;
/* Look at the pretty-printer list for the current program-space. */
- function.reset (find_pretty_printer_from_progspace (value));
+ function = find_pretty_printer_from_progspace (value);
if (function == NULL || function != Py_None)
- return function.release ();
+ return function;
/* Look at the pretty-printer list in the gdb module. */
return find_pretty_printer_from_gdb (value);
@@ -744,7 +744,7 @@ apply_varobj_pretty_printer (PyObject *printer_obj,
reference to the object if successful; returns NULL if not. VALUE
is the value for which a printer tests to determine if it
can pretty-print the value. */
-PyObject *
+gdbpy_ref<>
gdbpy_get_varobj_pretty_printer (struct value *value)
{
TRY
@@ -772,7 +772,6 @@ PyObject *
gdbpy_default_visualizer (PyObject *self, PyObject *args)
{
PyObject *val_obj;
- PyObject *cons;
struct value *value;
if (! PyArg_ParseTuple (args, "O", &val_obj))
@@ -785,6 +784,5 @@ gdbpy_default_visualizer (PyObject *self, PyObject *args)
return NULL;
}
- cons = find_pretty_printer (val_obj);
- return cons;
+ return find_pretty_printer (val_obj).release ();
}
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 582044a..1ac54f9 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -680,7 +680,7 @@ int gdbpy_is_value_object (PyObject *obj);
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);
+gdbpy_ref<> 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);