This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Remove duplicate code to init python objfile/progspace objects


Hi.

This patch just removes some duplicate code.

2014-10-09  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.

diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c
index 5d00d62..df29691 100644
--- a/gdb/python/py-objfile.c
+++ b/gdb/python/py-objfile.c
@@ -74,6 +74,33 @@ objfpy_dealloc (PyObject *o)
   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 *
 objfpy_new (PyTypeObject *type, PyObject *args, PyObject *keywords)
 {
@@ -81,36 +108,13 @@ objfpy_new (PyTypeObject *type, PyObject *args, PyObject *keywords)
 
   if (self)
     {
-      self->objfile = NULL;
-
-      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)
+      if (!objfpy_initialize (self))
 	{
 	  Py_DECREF (self);
 	  return NULL;
 	}
     }
+
   return (PyObject *) self;
 }
 
@@ -280,6 +284,7 @@ py_free_objfile (struct objfile *objfile, void *datum)
    representing OBJFILE.  If the object has already been created,
    return it.  Otherwise, create it.  Return NULL and set the Python
    error on failure.  */
+
 PyObject *
 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);
       if (object)
 	{
-	  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)
+	  if (!objfpy_initialize (object))
 	    {
 	      Py_DECREF (object);
 	      return NULL;
 	    }
 
+	  object->objfile = objfile;
 	  set_objfile_data (objfile, objfpy_objfile_data_key, object);
 	}
     }
diff --git a/gdb/python/py-progspace.c b/gdb/python/py-progspace.c
index b0092c5..4280032 100644
--- a/gdb/python/py-progspace.c
+++ b/gdb/python/py-progspace.c
@@ -82,6 +82,33 @@ pspy_dealloc (PyObject *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 *
 pspy_new (PyTypeObject *type, PyObject *args, PyObject *keywords)
 {
@@ -89,36 +116,13 @@ pspy_new (PyTypeObject *type, PyObject *args, PyObject *keywords)
 
   if (self)
     {
-      self->pspace = NULL;
-
-      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)
+      if (!pspy_initialize (self))
 	{
 	  Py_DECREF (self);
 	  return NULL;
 	}
     }
+
   return (PyObject *) self;
 }
 
@@ -296,36 +300,13 @@ pspace_to_pspace_object (struct program_space *pspace)
       object = PyObject_New (pspace_object, &pspace_object_type);
       if (object)
 	{
-	  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)
+	  if (!pspy_initialize (object))
 	    {
 	      Py_DECREF (object);
 	      return NULL;
 	    }
 
+	  object->pspace = pspace;
 	  set_program_space_data (pspace, pspy_pspace_data_key, object);
 	}
     }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]