+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)
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
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 (),
- "progspace",
- py_progspace) < 0)
+ gdbpy_ref<> py_progspace = pspace_to_pspace_object (current_program_space);
+ if (py_progspace == NULL || evpy_add_attribute (objfile_event.get (),
+ "progspace",
+ py_progspace.get ()) < 0)
return NULL;
return objfile_event;
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;
}
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);
}
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)
{
- gdbpy_ref<pspace_object> object
- ((pspace_object *) program_space_data (pspace, pspy_pspace_data_key));
- if (object == NULL)
+ PyObject *result
+ ((PyObject *) program_space_data (pspace, pspy_pspace_data_key));
+ if (result == NULL)
{
- object.reset (PyObject_New (pspace_object, &pspace_object_type));
- if (object != NULL)
- {
- if (!pspy_initialize (object.get ()))
- return NULL;
+ gdbpy_ref<pspace_object> object
+ ((pspace_object *) 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 ());
- }
+ 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
std::vector<xmethod_worker_up> *dm_vec)
{
struct objfile *objfile;
- PyObject *py_progspace;
gdb_assert (obj_type != NULL && method_name != NULL);
/* 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 ()));
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 *);
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;
}