1 /* Python interface to new object file loading events. 2 3 Copyright (C) 2011-2012 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 #include "py-event.h" 21 22 static PyTypeObject new_objfile_event_object_type; 23 24 PyObject * 25 create_new_objfile_event_object (struct objfile *objfile) 26 { 27 PyObject *objfile_event; 28 PyObject *py_objfile; 29 30 objfile_event = create_event_object (&new_objfile_event_object_type); 31 if (!objfile_event) 32 goto fail; 33 34 py_objfile = objfile_to_objfile_object (objfile); 35 if (!py_objfile || evpy_add_attribute (objfile_event, 36 "new_objfile", 37 py_objfile) < 0) 38 goto fail; 39 40 return objfile_event; 41 42 fail: 43 Py_XDECREF (objfile_event); 44 return NULL; 45 } 46 47 /* Callback function which notifies observers when a new objfile event occurs. 48 This function will create a new Python new_objfile event object. 49 Return -1 if emit fails. */ 50 51 int 52 emit_new_objfile_event (struct objfile *objfile) 53 { 54 PyObject *event; 55 56 if (evregpy_no_listeners_p (gdb_py_events.new_objfile)) 57 return 0; 58 59 event = create_new_objfile_event_object (objfile); 60 if (event) 61 return evpy_emit_event (event, gdb_py_events.new_objfile); 62 return -1; 63 } 64 65 GDBPY_NEW_EVENT_TYPE (new_objfile, 66 "gdb.NewObjFileEvent", 67 "NewObjFileEvent", 68 "GDB new object file event object", 69 event_object_type, 70 static); 71