Add ability to add attributes to gdb.Objfile and gdb.Progspace objects.

gdb/ChangeLog:

	* NEWS: Mention ability add attributes to gdb.Objfile and
	gdb.Progspace objects.
	* python/py-objfile.c (objfile_object): New member dict.
	(objfpy_dealloc): Py_XDECREF dict.
	(objfpy_initialize): Initialize dict.
	(objfile_getset): Add __dict__.
	(objfile_object_type): Set tp_dictoffset member.
	* python/py-progspace.c (progspace_object): New member dict.
	(pspy_dealloc): Py_XDECREF dict.
	(pspy_initialize): Initialize dict.
	(pspace_getset): Add __dict__.
	(pspace_object_type): Set tp_dictoffset member.

gdb/doc/ChangeLog:

	* python.texi (Progspaces In Python): Document ability to add
	random attributes to gdb.Progspace objects.
	(Objfiles In Python): Document ability to add random attributes to
	gdb.objfile objects.

gdb/testsuite/ChangeLog:

	* gdb.python/py-objfile.exp: Add tests for setting random attributes
	in objfiles.
	* gdb.python/py-progspace.exp: Add tests for setting random attributes
	in progspaces.
This commit is contained in:
Doug Evans 2014-10-30 17:05:17 -07:00
parent c21c8bde37
commit 02be9a7100
9 changed files with 130 additions and 3 deletions

View file

@ -32,6 +32,10 @@ typedef struct
/* The corresponding pspace. */
struct program_space *pspace;
/* Dictionary holding user-added attributes.
This is the __dict__ attribute of the object. */
PyObject *dict;
/* The pretty-printer list of functions. */
PyObject *printers;
@ -75,6 +79,7 @@ pspy_dealloc (PyObject *self)
{
pspace_object *ps_self = (pspace_object *) self;
Py_XDECREF (ps_self->dict);
Py_XDECREF (ps_self->printers);
Py_XDECREF (ps_self->frame_filters);
Py_XDECREF (ps_self->type_printers);
@ -89,6 +94,7 @@ static int
pspy_initialize (pspace_object *self)
{
self->pspace = NULL;
self->dict = NULL;
self->printers = PyList_New (0);
if (self->printers == NULL)
@ -331,6 +337,8 @@ gdbpy_initialize_pspace (void)
static PyGetSetDef pspace_getset[] =
{
{ "__dict__", gdb_py_generic_dict, NULL,
"The __dict__ for this progspace.", &pspace_object_type },
{ "filename", pspy_get_filename, NULL,
"The progspace's main filename, or None.", NULL },
{ "pretty_printers", pspy_get_printers, pspy_set_printers,
@ -380,7 +388,7 @@ static PyTypeObject pspace_object_type =
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
offsetof (pspace_object, dict), /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
pspy_new, /* tp_new */