/* Python interface to inferior exit events.
- Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2009-2012 Free Software Foundation, Inc.
This file is part of GDB.
static PyTypeObject exited_event_object_type;
-PyObject *
-create_exited_event_object (LONGEST exit_code)
+static PyObject *
+create_exited_event_object (const LONGEST *exit_code, struct inferior *inf)
{
PyObject *exited_event;
+ PyObject *inf_obj = NULL;
exited_event = create_event_object (&exited_event_object_type);
if (!exited_event)
goto fail;
- if (evpy_add_attribute (exited_event,
- "exit_code",
- PyLong_FromLongLong (exit_code)) < 0)
+ if (exit_code)
+ {
+ PyObject *exit_code_obj = PyLong_FromLongLong (*exit_code);
+ int failed;
+
+ if (exit_code_obj == NULL)
+ goto fail;
+
+ failed = evpy_add_attribute (exited_event, "exit_code",
+ exit_code_obj) < 0;
+ Py_DECREF (exit_code_obj);
+ if (failed)
+ goto fail;
+ }
+
+ inf_obj = inferior_to_inferior_object (inf);
+ if (!inf_obj || evpy_add_attribute (exited_event,
+ "inferior",
+ inf_obj) < 0)
goto fail;
+ Py_DECREF (inf_obj);
return exited_event;
- fail:
- Py_XDECREF (exited_event);
- return NULL;
+ fail:
+ Py_XDECREF (inf_obj);
+ Py_XDECREF (exited_event);
+ return NULL;
}
/* Callback that is used when an exit event occurs. This function
will create a new Python exited event object. */
int
-emit_exited_event (LONGEST exit_code)
+emit_exited_event (const LONGEST *exit_code, struct inferior *inf)
{
PyObject *event;
if (evregpy_no_listeners_p (gdb_py_events.exited))
return 0;
- event = create_exited_event_object (exit_code);
+ event = create_exited_event_object (exit_code, inf);
if (event)
return evpy_emit_event (event, gdb_py_events.exited);