Change pspace_to_pspace_object to return a new reference
This changes pspace_to_pspace_object to return a new reference and fixes up all the callers. gdb/ChangeLog 2018-09-16 Tom Tromey <tom@tromey.com> * python/py-inferior.c (infpy_get_progspace): Update. * python/python-internal.h (pspace_to_pspace_object): Change return type. * python/py-newobjfileevent.c (create_clear_objfiles_event_object): Update. * python/py-xmethods.c (gdbpy_get_matching_xmethod_workers): Update. * python/python.c (gdbpy_get_current_progspace): Update. (gdbpy_progspaces): Update. * python/py-progspace.c (pspace_to_pspace_object): Return a new reference. * python/py-objfile.c (objfpy_get_progspace): Update. * python/py-prettyprint.c (find_pretty_printer_from_progspace): Update.
This commit is contained in:
parent
8743a9cdd2
commit
3c7aa30778
9 changed files with 47 additions and 39 deletions
|
@ -1,3 +1,20 @@
|
|||
2018-09-16 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* python/py-inferior.c (infpy_get_progspace): Update.
|
||||
* python/python-internal.h (pspace_to_pspace_object): Change
|
||||
return type.
|
||||
* python/py-newobjfileevent.c
|
||||
(create_clear_objfiles_event_object): Update.
|
||||
* python/py-xmethods.c (gdbpy_get_matching_xmethod_workers):
|
||||
Update.
|
||||
* python/python.c (gdbpy_get_current_progspace): Update.
|
||||
(gdbpy_progspaces): Update.
|
||||
* python/py-progspace.c (pspace_to_pspace_object): Return a new
|
||||
reference.
|
||||
* python/py-objfile.c (objfpy_get_progspace): Update.
|
||||
* python/py-prettyprint.c (find_pretty_printer_from_progspace):
|
||||
Update.
|
||||
|
||||
2018-09-16 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* python/lib/gdb/__init__.py (current_progspace, objfiles)
|
||||
|
|
|
@ -471,9 +471,7 @@ infpy_get_progspace (PyObject *self, void *closure)
|
|||
program_space *pspace = inf->inferior->pspace;
|
||||
gdb_assert (pspace != nullptr);
|
||||
|
||||
PyObject *py_pspace = pspace_to_pspace_object (pspace);
|
||||
Py_XINCREF (py_pspace);
|
||||
return py_pspace;
|
||||
return pspace_to_pspace_object (pspace).release ();
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -66,12 +66,10 @@ create_clear_objfiles_event_object (void)
|
|||
if (objfile_event == NULL)
|
||||
return NULL;
|
||||
|
||||
/* Note that pspace_to_pspace_object returns a borrowed reference,
|
||||
so we don't need a decref here. */
|
||||
PyObject *py_progspace = pspace_to_pspace_object (current_program_space);
|
||||
if (!py_progspace || evpy_add_attribute (objfile_event.get (),
|
||||
gdbpy_ref<> py_progspace = pspace_to_pspace_object (current_program_space);
|
||||
if (py_progspace == NULL || evpy_add_attribute (objfile_event.get (),
|
||||
"progspace",
|
||||
py_progspace) < 0)
|
||||
py_progspace.get ()) < 0)
|
||||
return NULL;
|
||||
|
||||
return objfile_event;
|
||||
|
|
|
@ -166,12 +166,7 @@ objfpy_get_progspace (PyObject *self, void *closure)
|
|||
objfile_object *obj = (objfile_object *) self;
|
||||
|
||||
if (obj->objfile)
|
||||
{
|
||||
PyObject *pspace = pspace_to_pspace_object (obj->objfile->pspace);
|
||||
|
||||
Py_XINCREF (pspace);
|
||||
return pspace;
|
||||
}
|
||||
return pspace_to_pspace_object (obj->objfile->pspace).release ();
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
|
|
@ -128,11 +128,11 @@ find_pretty_printer_from_objfiles (PyObject *value)
|
|||
static PyObject *
|
||||
find_pretty_printer_from_progspace (PyObject *value)
|
||||
{
|
||||
PyObject *obj = pspace_to_pspace_object (current_program_space);
|
||||
gdbpy_ref<> obj = pspace_to_pspace_object (current_program_space);
|
||||
|
||||
if (!obj)
|
||||
if (obj == NULL)
|
||||
return NULL;
|
||||
gdbpy_ref<> pp_list (pspy_get_printers (obj, NULL));
|
||||
gdbpy_ref<> pp_list (pspy_get_printers (obj.get (), NULL));
|
||||
return search_pp_list (pp_list.get (), value);
|
||||
}
|
||||
|
||||
|
|
|
@ -492,30 +492,31 @@ py_free_pspace (struct program_space *pspace, void *datum)
|
|||
object->pspace = NULL;
|
||||
}
|
||||
|
||||
/* Return a borrowed reference to the Python object of type Pspace
|
||||
/* Return a new reference to the Python object of type Pspace
|
||||
representing PSPACE. If the object has already been created,
|
||||
return it. Otherwise, create it. Return NULL and set the Python
|
||||
error on failure. */
|
||||
|
||||
PyObject *
|
||||
gdbpy_ref<>
|
||||
pspace_to_pspace_object (struct program_space *pspace)
|
||||
{
|
||||
PyObject *result
|
||||
((PyObject *) program_space_data (pspace, pspy_pspace_data_key));
|
||||
if (result == NULL)
|
||||
{
|
||||
gdbpy_ref<pspace_object> object
|
||||
((pspace_object *) program_space_data (pspace, pspy_pspace_data_key));
|
||||
((pspace_object *) PyObject_New (pspace_object, &pspace_object_type));
|
||||
if (object == NULL)
|
||||
{
|
||||
object.reset (PyObject_New (pspace_object, &pspace_object_type));
|
||||
if (object != NULL)
|
||||
{
|
||||
return NULL;
|
||||
if (!pspy_initialize (object.get ()))
|
||||
return NULL;
|
||||
|
||||
object->pspace = pspace;
|
||||
set_program_space_data (pspace, pspy_pspace_data_key, object.get ());
|
||||
}
|
||||
result = (PyObject *) object.release ();
|
||||
}
|
||||
|
||||
return (PyObject *) object.release ();
|
||||
return gdbpy_ref<>::new_reference (result);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
@ -122,7 +122,6 @@ gdbpy_get_matching_xmethod_workers
|
|||
std::vector<xmethod_worker_up> *dm_vec)
|
||||
{
|
||||
struct objfile *objfile;
|
||||
PyObject *py_progspace;
|
||||
|
||||
gdb_assert (obj_type != NULL && method_name != NULL);
|
||||
|
||||
|
@ -170,10 +169,11 @@ gdbpy_get_matching_xmethod_workers
|
|||
|
||||
/* Gather debug methods matchers registered with the current program
|
||||
space. */
|
||||
py_progspace = pspace_to_pspace_object (current_program_space);
|
||||
gdbpy_ref<> py_progspace = pspace_to_pspace_object (current_program_space);
|
||||
if (py_progspace != NULL)
|
||||
{
|
||||
gdbpy_ref<> pspace_matchers (pspy_get_xmethods (py_progspace, NULL));
|
||||
gdbpy_ref<> pspace_matchers (pspy_get_xmethods (py_progspace.get (),
|
||||
NULL));
|
||||
|
||||
gdbpy_ref<> temp (PySequence_Concat (py_xmethod_matcher_list.get (),
|
||||
pspace_matchers.get ()));
|
||||
|
|
|
@ -516,8 +516,7 @@ PyObject *value_to_value_object (struct value *v);
|
|||
PyObject *type_to_type_object (struct type *);
|
||||
PyObject *frame_info_to_frame_object (struct frame_info *frame);
|
||||
PyObject *symtab_to_linetable_object (PyObject *symtab);
|
||||
PyObject *pspace_to_pspace_object (struct program_space *)
|
||||
CPYCHECKER_RETURNS_BORROWED_REF;
|
||||
gdbpy_ref<> pspace_to_pspace_object (struct program_space *);
|
||||
PyObject *pspy_get_printers (PyObject *, void *);
|
||||
PyObject *pspy_get_frame_filters (PyObject *, void *);
|
||||
PyObject *pspy_get_frame_unwinders (PyObject *, void *);
|
||||
|
|
|
@ -1293,9 +1293,9 @@ gdbpy_progspaces (PyObject *unused1, PyObject *unused2)
|
|||
|
||||
ALL_PSPACES (ps)
|
||||
{
|
||||
PyObject *item = pspace_to_pspace_object (ps);
|
||||
gdbpy_ref<> item = pspace_to_pspace_object (ps);
|
||||
|
||||
if (!item || PyList_Append (list.get (), item) == -1)
|
||||
if (item == NULL || PyList_Append (list.get (), item.get ()) == -1)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue