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>
|
2018-09-16 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* python/lib/gdb/__init__.py (current_progspace, objfiles)
|
* 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;
|
program_space *pspace = inf->inferior->pspace;
|
||||||
gdb_assert (pspace != nullptr);
|
gdb_assert (pspace != nullptr);
|
||||||
|
|
||||||
PyObject *py_pspace = pspace_to_pspace_object (pspace);
|
return pspace_to_pspace_object (pspace).release ();
|
||||||
Py_XINCREF (py_pspace);
|
|
||||||
return py_pspace;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -66,12 +66,10 @@ create_clear_objfiles_event_object (void)
|
||||||
if (objfile_event == NULL)
|
if (objfile_event == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* Note that pspace_to_pspace_object returns a borrowed reference,
|
gdbpy_ref<> py_progspace = pspace_to_pspace_object (current_program_space);
|
||||||
so we don't need a decref here. */
|
if (py_progspace == NULL || evpy_add_attribute (objfile_event.get (),
|
||||||
PyObject *py_progspace = pspace_to_pspace_object (current_program_space);
|
|
||||||
if (!py_progspace || evpy_add_attribute (objfile_event.get (),
|
|
||||||
"progspace",
|
"progspace",
|
||||||
py_progspace) < 0)
|
py_progspace.get ()) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return objfile_event;
|
return objfile_event;
|
||||||
|
|
|
@ -166,12 +166,7 @@ objfpy_get_progspace (PyObject *self, void *closure)
|
||||||
objfile_object *obj = (objfile_object *) self;
|
objfile_object *obj = (objfile_object *) self;
|
||||||
|
|
||||||
if (obj->objfile)
|
if (obj->objfile)
|
||||||
{
|
return pspace_to_pspace_object (obj->objfile->pspace).release ();
|
||||||
PyObject *pspace = pspace_to_pspace_object (obj->objfile->pspace);
|
|
||||||
|
|
||||||
Py_XINCREF (pspace);
|
|
||||||
return pspace;
|
|
||||||
}
|
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -128,11 +128,11 @@ find_pretty_printer_from_objfiles (PyObject *value)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
find_pretty_printer_from_progspace (PyObject *value)
|
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;
|
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);
|
return search_pp_list (pp_list.get (), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -492,30 +492,31 @@ py_free_pspace (struct program_space *pspace, void *datum)
|
||||||
object->pspace = NULL;
|
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,
|
representing PSPACE. If the object has already been created,
|
||||||
return it. Otherwise, create it. Return NULL and set the Python
|
return it. Otherwise, create it. Return NULL and set the Python
|
||||||
error on failure. */
|
error on failure. */
|
||||||
|
|
||||||
PyObject *
|
gdbpy_ref<>
|
||||||
pspace_to_pspace_object (struct program_space *pspace)
|
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
|
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)
|
if (object == NULL)
|
||||||
{
|
return NULL;
|
||||||
object.reset (PyObject_New (pspace_object, &pspace_object_type));
|
|
||||||
if (object != NULL)
|
|
||||||
{
|
|
||||||
if (!pspy_initialize (object.get ()))
|
if (!pspy_initialize (object.get ()))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
object->pspace = pspace;
|
object->pspace = pspace;
|
||||||
set_program_space_data (pspace, pspy_pspace_data_key, object.get ());
|
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
|
int
|
||||||
|
|
|
@ -122,7 +122,6 @@ gdbpy_get_matching_xmethod_workers
|
||||||
std::vector<xmethod_worker_up> *dm_vec)
|
std::vector<xmethod_worker_up> *dm_vec)
|
||||||
{
|
{
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
PyObject *py_progspace;
|
|
||||||
|
|
||||||
gdb_assert (obj_type != NULL && method_name != NULL);
|
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
|
/* Gather debug methods matchers registered with the current program
|
||||||
space. */
|
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)
|
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 (),
|
gdbpy_ref<> temp (PySequence_Concat (py_xmethod_matcher_list.get (),
|
||||||
pspace_matchers.get ()));
|
pspace_matchers.get ()));
|
||||||
|
|
|
@ -516,8 +516,7 @@ PyObject *value_to_value_object (struct value *v);
|
||||||
PyObject *type_to_type_object (struct type *);
|
PyObject *type_to_type_object (struct type *);
|
||||||
PyObject *frame_info_to_frame_object (struct frame_info *frame);
|
PyObject *frame_info_to_frame_object (struct frame_info *frame);
|
||||||
PyObject *symtab_to_linetable_object (PyObject *symtab);
|
PyObject *symtab_to_linetable_object (PyObject *symtab);
|
||||||
PyObject *pspace_to_pspace_object (struct program_space *)
|
gdbpy_ref<> pspace_to_pspace_object (struct program_space *);
|
||||||
CPYCHECKER_RETURNS_BORROWED_REF;
|
|
||||||
PyObject *pspy_get_printers (PyObject *, void *);
|
PyObject *pspy_get_printers (PyObject *, void *);
|
||||||
PyObject *pspy_get_frame_filters (PyObject *, void *);
|
PyObject *pspy_get_frame_filters (PyObject *, void *);
|
||||||
PyObject *pspy_get_frame_unwinders (PyObject *, void *);
|
PyObject *pspy_get_frame_unwinders (PyObject *, void *);
|
||||||
|
|
|
@ -1293,9 +1293,9 @@ gdbpy_progspaces (PyObject *unused1, PyObject *unused2)
|
||||||
|
|
||||||
ALL_PSPACES (ps)
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue