This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Return gdbpy_ref from gdbpy_get_varobj_pretty_printer


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a31abe80ea4c45b544f3ae04bc63ccaeba530e0f

commit a31abe80ea4c45b544f3ae04bc63ccaeba530e0f
Author: Tom Tromey <tom@tromey.com>
Date:   Wed Oct 24 16:45:41 2018 -0600

    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.

Diff:
---
 gdb/ChangeLog                | 12 ++++++++++++
 gdb/python/py-prettyprint.c  | 28 +++++++++++++---------------
 gdb/python/python-internal.h |  2 +-
 gdb/varobj.c                 | 13 +++++--------
 4 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 42b1d7f..bc77fe8 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,17 @@
 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>
+
 	* python/python.c (gdbpy_parameter_value): Update.
 	* python/python-internal.h (python_string_to_unicode)
 	(python_string_to_target_python_string)
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);
 
diff --git a/gdb/varobj.c b/gdb/varobj.c
index 3ae4de8..17cfe4b 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -1115,25 +1115,22 @@ install_default_visualizer (struct varobj *var)
 
   if (pretty_printing)
     {
-      PyObject *pretty_printer = NULL;
+      gdbpy_ref<> pretty_printer;
 
       if (var->value != nullptr)
 	{
 	  pretty_printer = gdbpy_get_varobj_pretty_printer (var->value.get ());
-	  if (! pretty_printer)
+	  if (pretty_printer == nullptr)
 	    {
 	      gdbpy_print_stack ();
 	      error (_("Cannot instantiate printer for default visualizer"));
 	    }
 	}
-      
+
       if (pretty_printer == Py_None)
-	{
-	  Py_DECREF (pretty_printer);
-	  pretty_printer = NULL;
-	}
+	pretty_printer.release ();
   
-      install_visualizer (var->dynamic, NULL, pretty_printer);
+      install_visualizer (var->dynamic, NULL, pretty_printer.release ());
     }
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]