/* Python interface to inferior events.
- Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2009-2020 Free Software Foundation, Inc.
This file is part of GDB.
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 "py-events.h"
+#ifdef IS_PY3K
+static struct PyModuleDef EventModuleDef =
+{
+ PyModuleDef_HEAD_INIT,
+ "gdb.events",
+ NULL,
+ -1,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+#endif
+
/* Initialize python events. */
-static int
-add_new_registry (eventregistry_object **registryp, char *name)
+static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
+add_new_registry (eventregistry_object **registryp, const char *name)
{
*registryp = create_eventregistry_object ();
if (*registryp == NULL)
- goto fail;
-
- if (PyModule_AddObject (gdb_py_events.module,
- name,
- (PyObject *)(*registryp)) < 0)
- goto fail;
-
- return 0;
+ return -1;
- fail:
- Py_XDECREF (*registryp);
- return -1;
+ return gdb_pymodule_addobject (gdb_py_events.module,
+ name,
+ (PyObject *)(*registryp));
}
-void
+int
gdbpy_initialize_py_events (void)
{
+#ifdef IS_PY3K
+ gdb_py_events.module = PyModule_Create (&EventModuleDef);
+#else
gdb_py_events.module = Py_InitModule ("events", NULL);
+#endif
if (!gdb_py_events.module)
- goto fail;
+ return -1;
- if (add_new_registry (&gdb_py_events.stop, "stop") < 0)
- goto fail;
+#define GDB_PY_DEFINE_EVENT(name) \
+ if (add_new_registry (&gdb_py_events.name, #name) < 0) \
+ return -1;
+#include "py-all-events.def"
+#undef GDB_PY_DEFINE_EVENT
- if (add_new_registry (&gdb_py_events.cont, "cont") < 0)
- goto fail;
+ if (gdb_pymodule_addobject (gdb_module,
+ "events",
+ (PyObject *) gdb_py_events.module) < 0)
+ return -1;
- if (add_new_registry (&gdb_py_events.exited, "exited") < 0)
- goto fail;
-
- if (add_new_registry (&gdb_py_events.new_objfile, "new_objfile") < 0)
- goto fail;
-
- Py_INCREF (gdb_py_events.module);
- if (PyModule_AddObject (gdb_module,
- "events",
- (PyObject *) gdb_py_events.module) < 0)
- goto fail;
-
- return;
-
- fail:
- gdbpy_print_stack ();
+ return 0;
}