public inbox for archer-commits@sourceware.org
help / color / mirror / Atom feed
* [SCM]  archer-swagiaal-oguz: Employ inheritance to eliminate redundant code.
@ 2010-12-09 15:44 swagiaal
  0 siblings, 0 replies; only message in thread
From: swagiaal @ 2010-12-09 15:44 UTC (permalink / raw)
  To: archer-commits

The branch, archer-swagiaal-oguz has been updated
       via  a713c6ad485f2f7d24a0982258b42a56910ae066 (commit)
       via  ec27c0842e68598672cec0c2f5d9a149e6bc5ffb (commit)
       via  9d7af01448c5cbd18150a104286768500955ad15 (commit)
      from  13aea7308f94d103830d0d3ffcd807764c8e4778 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit a713c6ad485f2f7d24a0982258b42a56910ae066
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Thu Dec 9 10:35:50 2010 -0500

    Employ inheritance to eliminate redundant code.

commit ec27c0842e68598672cec0c2f5d9a149e6bc5ffb
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Wed Dec 8 14:05:13 2010 -0500

    formatting

commit 9d7af01448c5cbd18150a104286768500955ad15
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Tue Dec 7 16:13:29 2010 -0500

    Create stop_reason enum
    
    ... and export it to python code.

-----------------------------------------------------------------------

Summary of changes:
 gdb/python/py-breakpointstopevent.c   |   21 +++--------
 gdb/python/py-continueevent.c         |   24 ++----------
 gdb/python/py-event.c                 |   22 +++++-------
 gdb/python/py-event.h                 |    9 ++---
 gdb/python/py-exitedevent.c           |   47 ++++++++++++------------
 gdb/python/py-signalstopevent.c       |   57 ++++++++++++++---------------
 gdb/python/py-stopevent.c             |   64 +++++++++++++++-----------------
 gdb/python/py-stopevent.h             |   35 +++++++++++++++---
 gdb/testsuite/gdb.python/py-events.py |   11 +++---
 9 files changed, 138 insertions(+), 152 deletions(-)

First 500 lines of diff:
diff --git a/gdb/python/py-breakpointstopevent.c b/gdb/python/py-breakpointstopevent.c
index 96719fb..8d06555 100644
--- a/gdb/python/py-breakpointstopevent.c
+++ b/gdb/python/py-breakpointstopevent.c
@@ -17,7 +17,7 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#include "py-event.h"
+#include "py-stopevent.h"
 
 static PyTypeObject breakpoint_stop_event_object_type;
 
@@ -56,25 +56,14 @@ bp_stop_evpy_get_breakpoint (PyObject *self, void *closure)
 breakpoint_stop_event_object *
 create_breakpoint_stop_event_object (breakpoint_object *bp)
 {
-  breakpoint_stop_event_object *breakpoint_stop_event_obj;
-
-  breakpoint_stop_event_obj =
-    PyObject_New (breakpoint_stop_event_object,
-                  &breakpoint_stop_event_object_type);
+  breakpoint_stop_event_object *breakpoint_stop_event_obj =
+      (breakpoint_stop_event_object *)
+      create_stop_event_object (&breakpoint_stop_event_object_type,
+                                BREAKPOINT);
 
   if (!breakpoint_stop_event_obj)
     return NULL;
 
-  // Initialize reference to the inferior thread.
-  breakpoint_stop_event_obj->stop_event.event.inferior_thread =
-    find_thread_object (inferior_ptid);
-  Py_INCREF (breakpoint_stop_event_obj->stop_event.event.inferior_thread);
-
-  breakpoint_stop_event_obj->stop_event.event.event_type =
-      (PyStringObject *) PyString_FromString ("stop");
-  breakpoint_stop_event_obj->stop_event.stop_reason =
-    (PyStringObject*) PyString_FromString ("breakpoint");
-
   breakpoint_stop_event_obj->breakpoint = bp;
   Py_INCREF (breakpoint_stop_event_obj->breakpoint);
 
diff --git a/gdb/python/py-continueevent.c b/gdb/python/py-continueevent.c
index 6352bdb..927fa08 100644
--- a/gdb/python/py-continueevent.c
+++ b/gdb/python/py-continueevent.c
@@ -29,31 +29,15 @@ typedef struct
 static void
 continue_evpy_dealloc (PyObject *self)
 {
-  Py_DECREF (((continue_event_object *) self)->
-             event.inferior_thread);
-
-  self->ob_type->tp_free (self);
+  evpy_dealloc (self);
 }
 
 continue_event_object *
 create_continue_event_object ()
 {
-  continue_event_object *continue_event_obj;
-
-  continue_event_obj = PyObject_New (continue_event_object,
-                                     &continue_event_object_type);
-
-  if (!continue_event_obj)
-    return NULL;
-
-  continue_event_obj->event.inferior_thread =
-    find_thread_object (inferior_ptid);
-
-  Py_INCREF (continue_event_obj->event.inferior_thread);
-  continue_event_obj->event.event_type =
-    (PyStringObject *) PyString_FromString ("continue");
-
-  return continue_event_obj;
+  return (continue_event_object *)
+      create_event_object (&continue_event_object_type,
+                           "continue");
 }
 
 /* Initialize the Python continue event code.  */
diff --git a/gdb/python/py-event.c b/gdb/python/py-event.c
index 5dab2ce..9a66ad5 100644
--- a/gdb/python/py-event.c
+++ b/gdb/python/py-event.c
@@ -19,31 +19,27 @@
 
 #include "py-event.h"
 
+void
+evpy_dealloc (PyObject *self)
+{
+  Py_DECREF (((event_object *) self)->event_type);
+  self->ob_type->tp_free (self);
+}
+
 event_object *
-create_event_object (const char *event_type)
+create_event_object (PyTypeObject *py_type, const char *event_type)
 {
   event_object *event_obj;
 
-  event_obj = PyObject_New (event_object, &event_object_type);
+  event_obj = PyObject_New (event_object, py_type);
   if (!event_obj)
     return NULL;
 
-  event_obj->inferior_thread = find_thread_object (inferior_ptid);
-  Py_INCREF (event_obj->inferior_thread);
-
   event_obj->event_type = (PyStringObject *) PyString_FromString (event_type);
 
   return event_obj;
 }
 
-static void
-evpy_dealloc (PyObject *self)
-{
-  Py_DECREF (((event_object *) self)->inferior_thread);
-  Py_DECREF (((event_object *) self)->event_type);
-  self->ob_type->tp_free (self);
-}
-
 /* Python function to get the event's thread.  */
 
 static PyObject *
diff --git a/gdb/python/py-event.h b/gdb/python/py-event.h
index 5f4e8bc..662c5df 100644
--- a/gdb/python/py-event.h
+++ b/gdb/python/py-event.h
@@ -30,11 +30,8 @@ typedef struct
   PyStringObject *event_type;
 } event_object;
 
-typedef struct
-{
-  event_object event;
-  PyStringObject *stop_reason;
-} stop_event_object;
-
 extern void evpy_emit_event (event_object *event,
                              eventregistry_object *registry);
+extern event_object * create_event_object (PyTypeObject *py_type,
+                                    const char *event_type);
+extern void evpy_dealloc (PyObject *self);
diff --git a/gdb/python/py-exitedevent.c b/gdb/python/py-exitedevent.c
index f56c7ed..b201580 100644
--- a/gdb/python/py-exitedevent.c
+++ b/gdb/python/py-exitedevent.c
@@ -31,40 +31,28 @@ static void
 exit_evpy_dealloc (PyObject *self)
 {
   Py_DECREF (((exited_event_object *) self)->exit_code);
-  self->ob_type->tp_free (self);
-}
-
-/* Python function to get the exited event's exit code.  */
-
-static PyObject *
-exit_evpy_get_exit_code (PyObject *self, void *closure)
-{
-  exited_event_object *exited_event_obj = (exited_event_object *) self;
-
-  Py_INCREF (exited_event_obj->exit_code);
-
-  return (PyObject *) (exited_event_obj->exit_code);
+  evpy_dealloc (self);
 }
 
 exited_event_object *
 create_exited_event_object (thread_object *inferior_thread, LONGEST *exit_code)
 {
-  exited_event_object *exited_event_obj;
+  exited_event_object *exited_event;
 
-  exited_event_obj = PyObject_New (exited_event_object, &exited_event_object_type);
+  exited_event = (exited_event_object *)
+      create_event_object (&exited_event_object_type,
+                           "exit");
 
-  if (!exited_event_obj)
+  if (!exited_event)
     return NULL;
 
-  exited_event_obj->event.inferior_thread = inferior_thread;
-  Py_INCREF (exited_event_obj->event.inferior_thread);
-  exited_event_obj->event.event_type = (PyStringObject *) PyString_FromString ("exit");
-  exited_event_obj->exit_code = (PyLongObject *) PyLong_FromLongLong (*exit_code);
+  exited_event->exit_code = (PyLongObject *) PyLong_FromLongLong (*exit_code);
 
-  return exited_event_obj;
+  return exited_event;
 }
 
-/* Initialize the Python exited event code. */
+/* Initialize the Python exited event code.  */
+
 void gdbpy_initialize_exited_event (void)
 {
   exited_event_object_type.tp_base = &event_object_type;
@@ -77,7 +65,8 @@ void gdbpy_initialize_exited_event (void)
 }
 
 /* Callback that is used when an exit event occurs. This function
-   will create a new Python exited event object. */
+   will create a new Python exited event object.  */
+
 void
 emit_exited_event (thread_object *inferior_thread, LONGEST *exit_code)
 {
@@ -92,6 +81,18 @@ emit_exited_event (thread_object *inferior_thread, LONGEST *exit_code)
                    inferior_thread->exited_event);
 }
 
+/* Python function to get the exited event's exit code.  */
+
+static PyObject *
+exit_evpy_get_exit_code (PyObject *self, void *closure)
+{
+  exited_event_object *exited_event_obj = (exited_event_object *) self;
+  //FIXME: is this needed and when is it DECed ?
+  Py_INCREF (exited_event_obj->exit_code);
+
+  return (PyObject *) (exited_event_obj->exit_code);
+}
+
 static PyGetSetDef exited_event_object_getset[] =
 {
   { "exit_code", exit_evpy_get_exit_code, NULL, "Exit code.", NULL },
diff --git a/gdb/python/py-signalstopevent.c b/gdb/python/py-signalstopevent.c
index 5a5994e..6ac583f 100644
--- a/gdb/python/py-signalstopevent.c
+++ b/gdb/python/py-signalstopevent.c
@@ -17,7 +17,7 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#include "py-event.h"
+#include "py-stopevent.h"
 
 static PyTypeObject signal_stop_event_object_type;
 
@@ -31,45 +31,28 @@ static void
 sig_stop_evpy_dealloc (PyObject *self)
 {
   Py_DECREF (((signal_stop_event_object *) self)->stop_signal);
-  self->ob_type->tp_free (self);
-}
-
-/* Python function to get the stop event's stop signal. */
-static PyObject *
-sig_stop_evpy_get_stop_signal (PyObject *self, void *closure)
-{
-  signal_stop_event_object *signal_stop_event_obj =
-(signal_stop_event_object *) self;
-
-  Py_INCREF (signal_stop_event_obj->stop_signal);
-
-  return (PyObject *) (signal_stop_event_obj->stop_signal);
+  stop_evpy_dealloc (self);
 }
 
 signal_stop_event_object *
 create_signal_stop_event_object (const char *stop_signal)
 {
-  signal_stop_event_object *signal_stop_event_obj;
+  signal_stop_event_object *signal_stop_event_obj =
+      (signal_stop_event_object *)
+      create_stop_event_object (&signal_stop_event_object_type,
+                                SIGNAL);
 
-  signal_stop_event_obj = PyObject_New (signal_stop_event_object,
-&signal_stop_event_object_type);
   if (!signal_stop_event_obj)
     return NULL;
 
-  signal_stop_event_obj->stop_event.event.inferior_thread =
-find_thread_object (inferior_ptid);
-  Py_INCREF (signal_stop_event_obj->stop_event.event.inferior_thread);
-  signal_stop_event_obj->stop_event.event.event_type = (PyStringObject
-*) PyString_FromString ("stop");
-  signal_stop_event_obj->stop_event.stop_reason = (PyStringObject *)
-PyString_FromString ("signal");
-  signal_stop_event_obj->stop_signal = (PyStringObject *)
-PyString_FromString (stop_signal);
+  signal_stop_event_obj->stop_signal =
+      (PyStringObject *) PyString_FromString (stop_signal);
 
   return signal_stop_event_obj;
 }
 
-/* Initialize the Python stop event code. */
+/* Initialize the Python stop event code.  */
+
 void
 gdbpy_initialize_signal_stop_event (void)
 {
@@ -78,12 +61,13 @@ gdbpy_initialize_signal_stop_event (void)
     return;
 
   Py_INCREF (&signal_stop_event_object_type);
-  PyModule_AddObject (gdb_module, "SignalStopEvent", (PyObject *)
-&signal_stop_event_object_type);
+  PyModule_AddObject (gdb_module, "SignalStopEvent",
+                      (PyObject *) &signal_stop_event_object_type);
 }
 
 /* Callback that is used when a signal stop event occurs. This function
-   will create a new Python signal stop event object. */
+   will create a new Python signal stop event object.  */
+
 void
 emit_signal_stop_event (const char *stop_signal)
 {
@@ -101,6 +85,19 @@ emit_signal_stop_event (const char *stop_signal)
                    inferior_thread->signal_stop_event);
 }
 
+/* Python function to get the stop event's stop signal.  */
+
+static PyObject *
+sig_stop_evpy_get_stop_signal (PyObject *self, void *closure)
+{
+  signal_stop_event_object *signal_stop_event_obj =
+      (signal_stop_event_object *) self;
+
+  Py_INCREF (signal_stop_event_obj->stop_signal);
+
+  return (PyObject *) (signal_stop_event_obj->stop_signal);
+}
+
 static PyGetSetDef signal_stop_event_object_getset[] =
 {
   { "stop_signal", sig_stop_evpy_get_stop_signal, NULL, "Stop signal.", NULL },
diff --git a/gdb/python/py-stopevent.c b/gdb/python/py-stopevent.c
index ea3329b..5a0ea46 100644
--- a/gdb/python/py-stopevent.c
+++ b/gdb/python/py-stopevent.c
@@ -17,42 +17,25 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#include "py-event.h"
+#include "py-stopevent.h"
 
-static void
+void
 stop_evpy_dealloc (PyObject *self)
 {
-  Py_DECREF (((stop_event_object *) self)->stop_reason);
-  self->ob_type->tp_free (self);
-}
-
-/* Python function to get the stop event's stop reason. */
-static PyObject *
-stop_evpy_get_stop_reason (PyObject *self, void *closure)
-{
-  stop_event_object *stop_event_obj = (stop_event_object *) self;
-
-  Py_INCREF (stop_event_obj->stop_reason);
-
-  return (PyObject *) (stop_event_obj->stop_reason);
+  evpy_dealloc (self);
 }
 
 stop_event_object *
-create_stop_event_object (const char *stop_reason)
+create_stop_event_object (PyTypeObject *py_type, enum stop_reason reason)
 {
-  stop_event_object *stop_event_obj;
+  stop_event_object *stop_event_obj =
+      (stop_event_object *) create_event_object (py_type,
+                                                 "stop");
 
-  stop_event_obj = PyObject_New (stop_event_object, &stop_event_object_type);
   if (!stop_event_obj)
     return NULL;
 
-  stop_event_obj->event.inferior_thread = find_thread_object (inferior_ptid);
-  Py_INCREF (stop_event_obj->event.inferior_thread);
-  stop_event_obj->event.event_type =
-    (PyStringObject *) PyString_FromString ("stop");
-  stop_event_obj->stop_reason =
-    (PyStringObject *)PyString_FromString (stop_reason);
-
+  stop_event_obj->reason = reason;
   return stop_event_obj;
 }
 
@@ -60,10 +43,18 @@ create_stop_event_object (const char *stop_reason)
 void
 gdbpy_initialize_stop_event (void)
 {
+  int i;
+
   stop_event_object_type.tp_base = &event_object_type;
   if (PyType_Ready (&stop_event_object_type) < 0)
     return;
 
+  for (i = 0; py_stop_reasons[i].name; i++)
+    {
+      PyDict_SetItemString (stop_event_object_type.tp_dict,
+                            py_stop_reasons[i].name,
+                            PyInt_FromLong(py_stop_reasons[i].reason));
+    }
   Py_INCREF (&stop_event_object_type);
   PyModule_AddObject (gdb_module, "StopEvent", (PyObject *) &stop_event_object_type);
 }
@@ -83,23 +74,28 @@ emit_stop_event (struct bpstats *bs, const char *stop_signal)
   inferior_thread = find_thread_object (inferior_ptid);
 
   if (bs)
-    {
-      stop_event_obj = create_stop_event_object ("breakpoint");
       emit_breakpoint_stop_event (bs);
-    }
 
   /* Check if the signal is "Signal 0" or "Trace/breakpoint trap". */
   if ((strcmp (stop_signal, "0") != 0) && (strcmp (stop_signal, "SIGTRAP") != 0))
-    {
-      stop_event_obj = create_stop_event_object ("signal");
       emit_signal_stop_event (stop_signal);
-    }
 
   if (!stop_event_obj)
-    stop_event_obj = create_stop_event_object ("unknown");
+    {
+      stop_event_obj = create_stop_event_object (&stop_event_object_type,
+                                                 UNKNOWN);
 
-  evpy_emit_event ((event_object *) stop_event_obj,
-                   inferior_thread->stop_event);
+      evpy_emit_event ((event_object *) stop_event_obj,
+                       inferior_thread->stop_event);
+    }
+}
+
+/* Python function to get the stop event's stop reason. */
+static PyObject *
+stop_evpy_get_stop_reason (PyObject *self, void *closure)
+{
+  stop_event_object *stop_event_obj = (stop_event_object *) self;
+  return PyInt_FromLong (stop_event_obj->reason);
 }
 
 static PyGetSetDef stop_event_object_getset[] =
diff --git a/gdb/python/py-stopevent.h b/gdb/python/py-stopevent.h
index 2f57a03..7959adf 100644
--- a/gdb/python/py-stopevent.h
+++ b/gdb/python/py-stopevent.h
@@ -1,4 +1,4 @@
-/* Python interface to inferior stop events.
+/* Python interface to inferior events.
 
    Copyright (C) 2009, 2010 Free Software Foundation, Inc.
 
@@ -17,7 +17,32 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#include "defs.h"
-#include "command.h"
-#include "python-internal.h"
-#include "inferior.h"
+#include "py-event.h"
+
+enum stop_reason {BREAKPOINT, SIGNAL, UNKNOWN};
+
+/* This is used to initialize various gdb.TYPE_ constants.  */
+struct py_stop_reason
+{
+  enum stop_reason reason;
+  const char *name;
+};
+
+#define ENTRY(X) { X, #X }
+
+static struct py_stop_reason py_stop_reasons [] =
+{
+  ENTRY (BREAKPOINT),
+  ENTRY (SIGNAL),
+  { UNKNOWN, NULL }
+};
+
+typedef struct
+{
+  event_object event;
+  enum stop_reason reason;
+} stop_event_object;
+
+extern stop_event_object * create_stop_event_object (PyTypeObject *py_type,
+                                                    enum stop_reason reason);
+extern void stop_evpy_dealloc (PyObject *self);
diff --git a/gdb/testsuite/gdb.python/py-events.py b/gdb/testsuite/gdb.python/py-events.py
index 0800700..f107a24 100644
--- a/gdb/testsuite/gdb.python/py-events.py
+++ b/gdb/testsuite/gdb.python/py-events.py
@@ -19,13 +19,15 @@ import gdb


hooks/post-receive
--
Repository for Project Archer.


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2010-12-09 15:44 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-09 15:44 [SCM] archer-swagiaal-oguz: Employ inheritance to eliminate redundant code swagiaal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).