diff options
author | Tom Tromey <tom@tromey.com> | 2017-09-08 15:38:12 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-09-11 14:15:22 -0600 |
commit | 7d221d749c0239f06ca571be6c9452cd22b5d582 (patch) | |
tree | 0195f0e127b789e980939faeb79c6ed13ef7fd3d /gdb/python/py-event.h | |
parent | 35c61a1dd5462ceab42618c48c9a60238245761b (diff) | |
download | binutils-7d221d749c0239f06ca571be6c9452cd22b5d582.zip binutils-7d221d749c0239f06ca571be6c9452cd22b5d582.tar.gz binutils-7d221d749c0239f06ca571be6c9452cd22b5d582.tar.bz2 |
Make it simpler to add events to Python
The first patch in this series went through several iterations as I'd
forgotten how many places had to be touched to add a new event and a
new event type.
This patch simplifies the process using two new ".def" files. Now, a
new event type can be added by adding a line to "py-event-types.def",
and a new event registry can be added by adding a line to
"py-all-events.def".
ChangeLog
2017-09-11 Tom Tromey <tom@tromey.com>
* python/python.c (do_start_initialization): Use
py-event-types.def to initialize types.
Define all object type structures.
* python/python-internal.h: Don't declare event initialization
functions.
* python/py-threadevent.c (thread_event_object_type): Don't
define.
* python/py-stopevent.c (stop_event_object_type): Don't define.
* python/py-signalevent.c (signal_event_object_type): Don't
declare or define.
* python/py-newobjfileevent.c (new_objfile_event_object_type)
(clear_objfiles_event_object_type): Don't declare or define.
* python/py-infevents.c (inferior_call_pre_event_object_type)
(inferior_call_post_event_object_type)
(register_changed_event_object_type)
(memory_changed_event_object_type): Don't declare or define.
* python/py-inferior.c (new_thread_event_object_type)
(new_inferior_event_object_type)
(inferior_deleted_event_object_type): Don't declare or define.
* python/py-exitedevent.c (exited_event_object_type): Don't
declare or define.
* python/py-evts.c (gdbpy_initialize_py_events): Use
py-all-events.def.
* python/py-events.h (thread_event_object_type): Don't declare.
(events_object): Use py-all-events.def.
* python/py-event.h (GDBPY_NEW_EVENT_TYPE): Remove. Use
py-event-types.def.
* python/py-event-types.def: New file.
* python/py-continueevent.c (create_continue_event_object): Don't
declare or define.
* python/py-bpevent.c (breakpoint_event_object_type): Don't
declare or define.
* python/py-all-events.def: New file.
Diffstat (limited to 'gdb/python/py-event.h')
-rw-r--r-- | gdb/python/py-event.h | 74 |
1 files changed, 6 insertions, 68 deletions
diff --git a/gdb/python/py-event.h b/gdb/python/py-event.h index 27db828..2444260 100644 --- a/gdb/python/py-event.h +++ b/gdb/python/py-event.h @@ -26,74 +26,12 @@ #include "inferior.h" #include "py-ref.h" -/* This macro creates the following functions: - - gdbpy_initialize_{NAME}_event - Used to add the newly created event type to the gdb module. - - and the python type data structure for the event: - - struct PyTypeObject {NAME}_event_object_type - - NAME is the name of the event. - PY_PATH is a string representing the module and python name of - the event. - PY_NAME a string representing what the event should be called in - python. - DOC Python documentation for the new event type - BASE the base event for this event usually just event_object_type. -*/ - -#define GDBPY_NEW_EVENT_TYPE(name, py_path, py_name, doc, base) \ -\ - PyTypeObject name##_event_object_type \ - CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object") \ - = { \ - PyVarObject_HEAD_INIT (NULL, 0) \ - py_path, /* tp_name */ \ - sizeof (event_object), /* tp_basicsize */ \ - 0, /* tp_itemsize */ \ - evpy_dealloc, /* tp_dealloc */ \ - 0, /* tp_print */ \ - 0, /* tp_getattr */ \ - 0, /* tp_setattr */ \ - 0, /* tp_compare */ \ - 0, /* tp_repr */ \ - 0, /* tp_as_number */ \ - 0, /* tp_as_sequence */ \ - 0, /* tp_as_mapping */ \ - 0, /* tp_hash */ \ - 0, /* tp_call */ \ - 0, /* tp_str */ \ - 0, /* tp_getattro */ \ - 0, /* tp_setattro */ \ - 0, /* tp_as_buffer */ \ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ \ - doc, /* tp_doc */ \ - 0, /* tp_traverse */ \ - 0, /* tp_clear */ \ - 0, /* tp_richcompare */ \ - 0, /* tp_weaklistoffset */ \ - 0, /* tp_iter */ \ - 0, /* tp_iternext */ \ - 0, /* tp_methods */ \ - 0, /* tp_members */ \ - 0, /* tp_getset */ \ - &base, /* tp_base */ \ - 0, /* tp_dict */ \ - 0, /* tp_descr_get */ \ - 0, /* tp_descr_set */ \ - 0, /* tp_dictoffset */ \ - 0, /* tp_init */ \ - 0 /* tp_alloc */ \ - }; \ -\ -int \ -gdbpy_initialize_##name##_event (void) \ -{ \ - return gdbpy_initialize_event_generic (&name##_event_object_type, \ - py_name); \ -} +/* Declare all event types. */ +#define GDB_PY_DEFINE_EVENT_TYPE(name, py_name, doc, base) \ + extern PyTypeObject name##_event_object_type \ + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object"); +#include "py-event-types.def" +#undef GDB_PY_DEFINE_EVENT_TYPE typedef struct { |