+2018-09-16 Tom Tromey <tom@tromey.com>
+
+ * 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 <tom@tromey.com>
* python/py-inferior.c (infpy_get_progspace): Update.
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;
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;
}
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;
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<objfile_object> 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<objfile_object> 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
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. */
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;
}
}
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. */
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)
{
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)
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 *);
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