From 0a9db5ad8a6c49cec7adb7e3ef29c558fcfbf11b Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 12 Sep 2018 23:06:09 -0600 Subject: [PATCH] Change objfile_to_objfile_object to return a new reference This changes objfile_to_objfile_object to return a new references and fixes up all the uses. gdb/ChangeLog 2018-09-16 Tom Tromey * python/py-progspace.c (pspy_get_objfiles): Update. * python/python-internal.h (objfile_to_objfile_object): Change return type. * python/py-newobjfileevent.c (create_new_objfile_event_object): Update. * python/py-xmethods.c (gdbpy_get_matching_xmethod_workers): Update. * python/python.c (gdbpy_get_current_objfile): Update. (gdbpy_objfiles): Update. * python/py-objfile.c (objfpy_get_owner, gdbpy_lookup_objfile): Update. (objfile_to_objfile_object): Return a new reference. * python/py-symtab.c (stpy_get_objfile): Update. * python/py-prettyprint.c (find_pretty_printer_from_objfiles): Update. --- gdb/ChangeLog | 18 ++++++++++++++ gdb/python/py-newobjfileevent.c | 10 +++----- gdb/python/py-objfile.c | 43 +++++++++++++-------------------- gdb/python/py-prettyprint.c | 6 ++--- gdb/python/py-progspace.c | 5 ++-- gdb/python/py-symtab.c | 5 +--- gdb/python/py-xmethods.c | 5 ++-- gdb/python/python-internal.h | 3 +-- gdb/python/python.c | 7 +----- 9 files changed, 51 insertions(+), 51 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 717d37bc2b..b673acd161 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,21 @@ +2018-09-16 Tom Tromey + + * python/py-progspace.c (pspy_get_objfiles): Update. + * python/python-internal.h (objfile_to_objfile_object): Change + return type. + * python/py-newobjfileevent.c (create_new_objfile_event_object): + Update. + * python/py-xmethods.c (gdbpy_get_matching_xmethod_workers): + Update. + * python/python.c (gdbpy_get_current_objfile): Update. + (gdbpy_objfiles): Update. + * python/py-objfile.c (objfpy_get_owner, gdbpy_lookup_objfile): + Update. + (objfile_to_objfile_object): Return a new reference. + * python/py-symtab.c (stpy_get_objfile): Update. + * python/py-prettyprint.c (find_pretty_printer_from_objfiles): + Update. + 2018-09-16 Tom Tromey * python/py-inferior.c (infpy_get_progspace): Update. diff --git a/gdb/python/py-newobjfileevent.c b/gdb/python/py-newobjfileevent.c index aa31fb4849..55e884dcaf 100644 --- a/gdb/python/py-newobjfileevent.c +++ b/gdb/python/py-newobjfileevent.c @@ -28,12 +28,10 @@ create_new_objfile_event_object (struct objfile *objfile) if (objfile_event == NULL) return NULL; - /* Note that objfile_to_objfile_object returns a borrowed reference, - so we don't need a decref here. */ - PyObject *py_objfile = objfile_to_objfile_object (objfile); - if (!py_objfile || evpy_add_attribute (objfile_event.get (), - "new_objfile", - py_objfile) < 0) + gdbpy_ref<> py_objfile = objfile_to_objfile_object (objfile); + if (py_objfile == NULL || evpy_add_attribute (objfile_event.get (), + "new_objfile", + py_objfile.get ()) < 0) return NULL; return objfile_event; diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c index 722c9b053d..2e24d0f3ff 100644 --- a/gdb/python/py-objfile.c +++ b/gdb/python/py-objfile.c @@ -115,12 +115,7 @@ objfpy_get_owner (PyObject *self, void *closure) owner = objfile->separate_debug_objfile_backlink; if (owner != NULL) - { - PyObject *result = objfile_to_objfile_object (owner); - - Py_XINCREF (result); - return result; - } + return objfile_to_objfile_object (owner).release (); Py_RETURN_NONE; } @@ -602,12 +597,7 @@ gdbpy_lookup_objfile (PyObject *self, PyObject *args, PyObject *kw) objfile = objfpy_lookup_objfile_by_name (name); if (objfile != NULL) - { - PyObject *result = objfile_to_objfile_object (objfile); - - Py_XINCREF (result); - return result; - } + return objfile_to_objfile_object (objfile).release (); PyErr_SetString (PyExc_ValueError, _("Objfile not found.")); return NULL; @@ -625,30 +615,31 @@ py_free_objfile (struct objfile *objfile, void *datum) object->objfile = NULL; } -/* Return a borrowed reference to the Python object of type Objfile +/* Return a new reference to the Python object of type Objfile representing OBJFILE. If the object has already been created, return it. Otherwise, create it. Return NULL and set the Python error on failure. */ -PyObject * +gdbpy_ref<> objfile_to_objfile_object (struct objfile *objfile) { - gdbpy_ref object - ((objfile_object *) objfile_data (objfile, objfpy_objfile_data_key)); - if (object == NULL) + PyObject *result + = ((PyObject *) objfile_data (objfile, objfpy_objfile_data_key)); + if (result == NULL) { - object.reset (PyObject_New (objfile_object, &objfile_object_type)); - if (object != NULL) - { - if (!objfpy_initialize (object.get ())) - return NULL; + gdbpy_ref object + ((objfile_object *) PyObject_New (objfile_object, &objfile_object_type)); + if (object == NULL) + return NULL; + if (!objfpy_initialize (object.get ())) + return NULL; - object->objfile = objfile; - set_objfile_data (objfile, objfpy_objfile_data_key, object.get ()); - } + object->objfile = objfile; + set_objfile_data (objfile, objfpy_objfile_data_key, object.get ()); + result = (PyObject *) object.release (); } - return (PyObject *) object.release (); + return gdbpy_ref<>::new_reference (result); } int diff --git a/gdb/python/py-prettyprint.c b/gdb/python/py-prettyprint.c index 9aadd3b27c..a706222581 100644 --- a/gdb/python/py-prettyprint.c +++ b/gdb/python/py-prettyprint.c @@ -97,15 +97,15 @@ find_pretty_printer_from_objfiles (PyObject *value) ALL_OBJFILES (obj) { - PyObject *objf = objfile_to_objfile_object (obj); - if (!objf) + gdbpy_ref<> objf = objfile_to_objfile_object (obj); + if (objf == NULL) { /* Ignore the error and continue. */ PyErr_Clear (); continue; } - gdbpy_ref<> pp_list (objfpy_get_printers (objf, NULL)); + gdbpy_ref<> pp_list (objfpy_get_printers (objf.get (), NULL)); gdbpy_ref<> function (search_pp_list (pp_list.get (), value)); /* If there is an error in any objfile list, abort the search and exit. */ diff --git a/gdb/python/py-progspace.c b/gdb/python/py-progspace.c index 3c468475b1..1e16b845e0 100644 --- a/gdb/python/py-progspace.c +++ b/gdb/python/py-progspace.c @@ -344,9 +344,10 @@ pspy_get_objfiles (PyObject *self_, PyObject *args) ALL_PSPACE_OBJFILES (self->pspace, objf) { - PyObject *item = objfile_to_objfile_object (objf); + gdbpy_ref<> item = objfile_to_objfile_object (objf); - if (!item || PyList_Append (list.get (), item) == -1) + if (item == nullptr + || PyList_Append (list.get (), item.get ()) == -1) return NULL; } } diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c index be7fb3ec47..9bb20dab31 100644 --- a/gdb/python/py-symtab.c +++ b/gdb/python/py-symtab.c @@ -117,13 +117,10 @@ static PyObject * stpy_get_objfile (PyObject *self, void *closure) { struct symtab *symtab = NULL; - PyObject *result; STPY_REQUIRE_VALID (self, symtab); - result = objfile_to_objfile_object (SYMTAB_OBJFILE (symtab)); - Py_XINCREF (result); - return result; + return objfile_to_objfile_object (SYMTAB_OBJFILE (symtab)).release (); } /* Getter function for symtab.producer. */ diff --git a/gdb/python/py-xmethods.c b/gdb/python/py-xmethods.c index c568295a16..8e616cd4e2 100644 --- a/gdb/python/py-xmethods.c +++ b/gdb/python/py-xmethods.c @@ -147,7 +147,7 @@ gdbpy_get_matching_xmethod_workers list individually, but there's no data yet to show it's needed. */ ALL_OBJFILES (objfile) { - PyObject *py_objfile = objfile_to_objfile_object (objfile); + gdbpy_ref<> py_objfile = objfile_to_objfile_object (objfile); if (py_objfile == NULL) { @@ -155,7 +155,8 @@ gdbpy_get_matching_xmethod_workers return EXT_LANG_RC_ERROR; } - gdbpy_ref<> objfile_matchers (objfpy_get_xmethods (py_objfile, NULL)); + gdbpy_ref<> objfile_matchers (objfpy_get_xmethods (py_objfile.get (), + NULL)); gdbpy_ref<> temp (PySequence_Concat (py_xmethod_matcher_list.get (), objfile_matchers.get ())); if (temp == NULL) diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index 58baa11ee4..ad8d333728 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -522,8 +522,7 @@ PyObject *pspy_get_frame_filters (PyObject *, void *); PyObject *pspy_get_frame_unwinders (PyObject *, void *); PyObject *pspy_get_xmethods (PyObject *, void *); -PyObject *objfile_to_objfile_object (struct objfile *) - CPYCHECKER_RETURNS_BORROWED_REF; +gdbpy_ref<> objfile_to_objfile_object (struct objfile *); PyObject *objfpy_get_printers (PyObject *, void *); PyObject *objfpy_get_frame_filters (PyObject *, void *); PyObject *objfpy_get_frame_unwinders (PyObject *, void *); diff --git a/gdb/python/python.c b/gdb/python/python.c index 66b6631f93..1a0562a227 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -1359,15 +1359,10 @@ gdbpy_execute_objfile_script (const struct extension_language_defn *extlang, static PyObject * gdbpy_get_current_objfile (PyObject *unused1, PyObject *unused2) { - PyObject *result; - if (! gdbpy_current_objfile) Py_RETURN_NONE; - result = objfile_to_objfile_object (gdbpy_current_objfile); - if (result) - Py_INCREF (result); - return result; + return objfile_to_objfile_object (gdbpy_current_objfile).release (); } /* Compute the list of active python type printers and store them in -- 2.34.1