Remove some code duplication in py-objfile.c, py-progspace.c.

gdb/ChangeLog:

	* py-objfile.c (objfpy_initialize): New function.
	(objfpy_new, objfile_to_objfile_object): Call it.
	* py-progspace.c (pspy_initialize): New function.
	(pspy_new, pspace_to_pspace_object): Call it.
This commit is contained in:
Doug Evans 2014-10-13 12:24:54 -07:00
parent 5b69e3572d
commit 4e1bbde013
3 changed files with 78 additions and 108 deletions

View File

@ -1,3 +1,10 @@
2014-10-13 Doug Evans <dje@google.com>
* py-objfile.c (objfpy_initialize): New function.
(objfpy_new, objfile_to_objfile_object): Call it.
* py-progspace.c (pspy_initialize): New function.
(pspy_new, pspace_to_pspace_object): Call it.
2014-10-13 Miroslav Franc <mfranc@redhat.com> 2014-10-13 Miroslav Franc <mfranc@redhat.com>
Jan Kratochvil <jan.kratochvil@redhat.com> Jan Kratochvil <jan.kratochvil@redhat.com>

View File

@ -74,6 +74,33 @@ objfpy_dealloc (PyObject *o)
Py_TYPE (self)->tp_free (self); Py_TYPE (self)->tp_free (self);
} }
/* Initialize an objfile_object.
The result is a boolean indicating success. */
static int
objfpy_initialize (objfile_object *self)
{
self->objfile = NULL;
self->printers = PyList_New (0);
if (self->printers == NULL)
return 0;
self->frame_filters = PyDict_New ();
if (self->frame_filters == NULL)
return 0;
self->type_printers = PyList_New (0);
if (self->type_printers == NULL)
return 0;
self->xmethods = PyList_New (0);
if (self->xmethods == NULL)
return 0;
return 1;
}
static PyObject * static PyObject *
objfpy_new (PyTypeObject *type, PyObject *args, PyObject *keywords) objfpy_new (PyTypeObject *type, PyObject *args, PyObject *keywords)
{ {
@ -81,36 +108,13 @@ objfpy_new (PyTypeObject *type, PyObject *args, PyObject *keywords)
if (self) if (self)
{ {
self->objfile = NULL; if (!objfpy_initialize (self))
self->printers = PyList_New (0);
if (!self->printers)
{
Py_DECREF (self);
return NULL;
}
self->frame_filters = PyDict_New ();
if (!self->frame_filters)
{
Py_DECREF (self);
return NULL;
}
self->type_printers = PyList_New (0);
if (!self->type_printers)
{
Py_DECREF (self);
return NULL;
}
self->xmethods = PyList_New (0);
if (self->xmethods == NULL)
{ {
Py_DECREF (self); Py_DECREF (self);
return NULL; return NULL;
} }
} }
return (PyObject *) self; return (PyObject *) self;
} }
@ -280,6 +284,7 @@ py_free_objfile (struct objfile *objfile, void *datum)
representing OBJFILE. If the object has already been created, representing OBJFILE. 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 * PyObject *
objfile_to_objfile_object (struct objfile *objfile) objfile_to_objfile_object (struct objfile *objfile)
{ {
@ -291,36 +296,13 @@ objfile_to_objfile_object (struct objfile *objfile)
object = PyObject_New (objfile_object, &objfile_object_type); object = PyObject_New (objfile_object, &objfile_object_type);
if (object) if (object)
{ {
if (!objfpy_initialize (object))
{
Py_DECREF (object);
return NULL;
}
object->objfile = objfile; object->objfile = objfile;
object->printers = PyList_New (0);
if (!object->printers)
{
Py_DECREF (object);
return NULL;
}
object->frame_filters = PyDict_New ();
if (!object->frame_filters)
{
Py_DECREF (object);
return NULL;
}
object->type_printers = PyList_New (0);
if (!object->type_printers)
{
Py_DECREF (object);
return NULL;
}
object->xmethods = PyList_New (0);
if (object->xmethods == NULL)
{
Py_DECREF (object);
return NULL;
}
set_objfile_data (objfile, objfpy_objfile_data_key, object); set_objfile_data (objfile, objfpy_objfile_data_key, object);
} }
} }

View File

@ -82,6 +82,33 @@ pspy_dealloc (PyObject *self)
Py_TYPE (self)->tp_free (self); Py_TYPE (self)->tp_free (self);
} }
/* Initialize a pspace_object.
The result is a boolean indicating success. */
static int
pspy_initialize (pspace_object *self)
{
self->pspace = NULL;
self->printers = PyList_New (0);
if (self->printers == NULL)
return 0;
self->frame_filters = PyDict_New ();
if (self->frame_filters == NULL)
return 0;
self->type_printers = PyList_New (0);
if (self->type_printers == NULL)
return 0;
self->xmethods = PyList_New (0);
if (self->xmethods == NULL)
return 0;
return 1;
}
static PyObject * static PyObject *
pspy_new (PyTypeObject *type, PyObject *args, PyObject *keywords) pspy_new (PyTypeObject *type, PyObject *args, PyObject *keywords)
{ {
@ -89,36 +116,13 @@ pspy_new (PyTypeObject *type, PyObject *args, PyObject *keywords)
if (self) if (self)
{ {
self->pspace = NULL; if (!pspy_initialize (self))
self->printers = PyList_New (0);
if (!self->printers)
{
Py_DECREF (self);
return NULL;
}
self->frame_filters = PyDict_New ();
if (!self->frame_filters)
{
Py_DECREF (self);
return NULL;
}
self->type_printers = PyList_New (0);
if (!self->type_printers)
{
Py_DECREF (self);
return NULL;
}
self->xmethods = PyList_New (0);
if (self->xmethods == NULL)
{ {
Py_DECREF (self); Py_DECREF (self);
return NULL; return NULL;
} }
} }
return (PyObject *) self; return (PyObject *) self;
} }
@ -296,36 +300,13 @@ pspace_to_pspace_object (struct program_space *pspace)
object = PyObject_New (pspace_object, &pspace_object_type); object = PyObject_New (pspace_object, &pspace_object_type);
if (object) if (object)
{ {
if (!pspy_initialize (object))
{
Py_DECREF (object);
return NULL;
}
object->pspace = pspace; object->pspace = pspace;
object->printers = PyList_New (0);
if (!object->printers)
{
Py_DECREF (object);
return NULL;
}
object->frame_filters = PyDict_New ();
if (!object->frame_filters)
{
Py_DECREF (object);
return NULL;
}
object->type_printers = PyList_New (0);
if (!object->type_printers)
{
Py_DECREF (object);
return NULL;
}
object->xmethods = PyList_New (0);
if (object->xmethods == NULL)
{
Py_DECREF (object);
return NULL;
}
set_program_space_data (pspace, pspy_pspace_data_key, object); set_program_space_data (pspace, pspy_pspace_data_key, object);
} }
} }