/* Python event definitions -*- c++ -*-

   Copyright (C) 2017-2024 Free Software Foundation, Inc.

   This file is part of GDB.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

/* To use this file, define GDB_PY_DEFINE_EVENT_TYPE to expand how you
   like, then include the file.

   Each invocation is of the form:

   GDB_PY_DEFINE_EVENT_TYPE(name, py_name, doc, base)

   NAME is the 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.
*/

GDB_PY_DEFINE_EVENT_TYPE (breakpoint,
			  "BreakpointEvent",
			  "GDB breakpoint stop event object",
			  stop_event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (continue,
			  "ContinueEvent",
			  "GDB continue event object",
			  thread_event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (exited,
			  "ExitedEvent",
			  "GDB exited event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (new_thread,
			  "NewThreadEvent",
			  "GDB new thread event object",
			  thread_event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (thread_exited,
			  "ThreadExitedEvent",
			  "GDB thread exited event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (new_inferior,
			  "NewInferiorEvent",
			  "GDB new inferior event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (inferior_deleted,
			  "InferiorDeletedEvent",
			  "GDB inferior deleted event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (inferior_call_pre,
			  "InferiorCallPreEvent",
			  "GDB inferior function pre-call event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (inferior_call_post,
			  "InferiorCallPostEvent",
			  "GDB inferior function post-call event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (register_changed,
			  "RegisterChangedEvent",
			  "GDB register change event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (memory_changed,
			  "MemoryChangedEvent",
			  "GDB memory change event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (new_objfile,
			  "NewObjFileEvent",
			  "GDB new object file event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (free_objfile,
			  "FreeObjFileEvent",
			  "GDB free object file event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (clear_objfiles,
			  "ClearObjFilesEvent",
			  "GDB clear object files event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (signal,
			  "SignalEvent",
			  "GDB signal event object",
			  stop_event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (stop,
			  "StopEvent",
			  "GDB stop event object",
			  thread_event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (thread,
			  "ThreadEvent",
			  "GDB thread event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (gdb_exiting,
			  "GdbExitingEvent",
			  "GDB is about to exit",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (connection,
			  "ConnectionEvent",
			  "GDB connection added or removed object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (executable_changed,
			  "ExecutableChangedEvent",
			  "GDB executable changed event",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (new_progspace,
			  "NewProgspaceEvent",
			  "GDB new Progspace event object",
			  event_object_type);

GDB_PY_DEFINE_EVENT_TYPE (free_progspace,
			  "FreeProgspaceEvent",
			  "GDB free Progspace event object",
			  event_object_type);
