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.
This commit is contained in:
parent
833d985d1c
commit
a31abe80ea
4 changed files with 31 additions and 24 deletions
|
@ -1,3 +1,15 @@
|
||||||
|
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.
|
||||||
|
|
||||||
2018-11-04 Tom Tromey <tom@tromey.com>
|
2018-11-04 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* python/python.c (gdbpy_parameter_value): Update.
|
* python/python.c (gdbpy_parameter_value): Update.
|
||||||
|
|
|
@ -45,7 +45,7 @@ enum string_repr_result
|
||||||
will return None. On error, it will set the Python error and
|
will return None. On error, it will set the Python error and
|
||||||
return NULL. */
|
return NULL. */
|
||||||
|
|
||||||
static PyObject *
|
static gdbpy_ref<>
|
||||||
search_pp_list (PyObject *list, PyObject *value)
|
search_pp_list (PyObject *list, PyObject *value)
|
||||||
{
|
{
|
||||||
Py_ssize_t pp_list_size, list_index;
|
Py_ssize_t pp_list_size, list_index;
|
||||||
|
@ -78,10 +78,10 @@ search_pp_list (PyObject *list, PyObject *value)
|
||||||
if (printer == NULL)
|
if (printer == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
else if (printer != Py_None)
|
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.
|
/* 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.
|
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. */
|
Otherwise the result is the pretty-printer function, suitably inc-ref'd. */
|
||||||
|
|
||||||
static PyObject *
|
static gdbpy_ref<>
|
||||||
find_pretty_printer_from_progspace (PyObject *value)
|
find_pretty_printer_from_progspace (PyObject *value)
|
||||||
{
|
{
|
||||||
gdbpy_ref<> obj = pspace_to_pspace_object (current_program_space);
|
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.
|
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. */
|
Otherwise the result is the pretty-printer function, suitably inc-ref'd. */
|
||||||
|
|
||||||
static PyObject *
|
static gdbpy_ref<>
|
||||||
find_pretty_printer_from_gdb (PyObject *value)
|
find_pretty_printer_from_gdb (PyObject *value)
|
||||||
{
|
{
|
||||||
/* Fetch the global pretty printer list. */
|
/* Fetch the global pretty printer list. */
|
||||||
if (gdb_python_module == NULL
|
if (gdb_python_module == NULL
|
||||||
|| ! PyObject_HasAttrString (gdb_python_module, "pretty_printers"))
|
|| ! 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,
|
gdbpy_ref<> pp_list (PyObject_GetAttrString (gdb_python_module,
|
||||||
"pretty_printers"));
|
"pretty_printers"));
|
||||||
if (pp_list == NULL || ! PyList_Check (pp_list.get ()))
|
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);
|
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
|
pretty-printer exists, return None. If one exists, return a new
|
||||||
reference. On error, set the Python error and return NULL. */
|
reference. On error, set the Python error and return NULL. */
|
||||||
|
|
||||||
static PyObject *
|
static gdbpy_ref<>
|
||||||
find_pretty_printer (PyObject *value)
|
find_pretty_printer (PyObject *value)
|
||||||
{
|
{
|
||||||
/* Look at the pretty-printer list for each objfile
|
/* Look at the pretty-printer list for each objfile
|
||||||
in the current program-space. */
|
in the current program-space. */
|
||||||
gdbpy_ref<> function (find_pretty_printer_from_objfiles (value));
|
gdbpy_ref<> function (find_pretty_printer_from_objfiles (value));
|
||||||
if (function == NULL || function != Py_None)
|
if (function == NULL || function != Py_None)
|
||||||
return function.release ();
|
return function;
|
||||||
|
|
||||||
/* Look at the pretty-printer list for the current program-space. */
|
/* 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)
|
if (function == NULL || function != Py_None)
|
||||||
return function.release ();
|
return function;
|
||||||
|
|
||||||
/* Look at the pretty-printer list in the gdb module. */
|
/* Look at the pretty-printer list in the gdb module. */
|
||||||
return find_pretty_printer_from_gdb (value);
|
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
|
reference to the object if successful; returns NULL if not. VALUE
|
||||||
is the value for which a printer tests to determine if it
|
is the value for which a printer tests to determine if it
|
||||||
can pretty-print the value. */
|
can pretty-print the value. */
|
||||||
PyObject *
|
gdbpy_ref<>
|
||||||
gdbpy_get_varobj_pretty_printer (struct value *value)
|
gdbpy_get_varobj_pretty_printer (struct value *value)
|
||||||
{
|
{
|
||||||
TRY
|
TRY
|
||||||
|
@ -772,7 +772,6 @@ PyObject *
|
||||||
gdbpy_default_visualizer (PyObject *self, PyObject *args)
|
gdbpy_default_visualizer (PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
PyObject *val_obj;
|
PyObject *val_obj;
|
||||||
PyObject *cons;
|
|
||||||
struct value *value;
|
struct value *value;
|
||||||
|
|
||||||
if (! PyArg_ParseTuple (args, "O", &val_obj))
|
if (! PyArg_ParseTuple (args, "O", &val_obj))
|
||||||
|
@ -785,6 +784,5 @@ gdbpy_default_visualizer (PyObject *self, PyObject *args)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
cons = find_pretty_printer (val_obj);
|
return find_pretty_printer (val_obj).release ();
|
||||||
return cons;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -680,7 +680,7 @@ int gdbpy_is_value_object (PyObject *obj);
|
||||||
gdbpy_ref<> 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);
|
gdbpy_ref<> 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);
|
||||||
|
|
||||||
|
|
13
gdb/varobj.c
13
gdb/varobj.c
|
@ -1115,25 +1115,22 @@ install_default_visualizer (struct varobj *var)
|
||||||
|
|
||||||
if (pretty_printing)
|
if (pretty_printing)
|
||||||
{
|
{
|
||||||
PyObject *pretty_printer = NULL;
|
gdbpy_ref<> pretty_printer;
|
||||||
|
|
||||||
if (var->value != nullptr)
|
if (var->value != nullptr)
|
||||||
{
|
{
|
||||||
pretty_printer = gdbpy_get_varobj_pretty_printer (var->value.get ());
|
pretty_printer = gdbpy_get_varobj_pretty_printer (var->value.get ());
|
||||||
if (! pretty_printer)
|
if (pretty_printer == nullptr)
|
||||||
{
|
{
|
||||||
gdbpy_print_stack ();
|
gdbpy_print_stack ();
|
||||||
error (_("Cannot instantiate printer for default visualizer"));
|
error (_("Cannot instantiate printer for default visualizer"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pretty_printer == Py_None)
|
if (pretty_printer == Py_None)
|
||||||
{
|
pretty_printer.release ();
|
||||||
Py_DECREF (pretty_printer);
|
|
||||||
pretty_printer = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
install_visualizer (var->dynamic, NULL, pretty_printer);
|
install_visualizer (var->dynamic, NULL, pretty_printer.release ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue