* python/py-type.c (typy_fields_items): Call check_typedef.

testsuite/
	* gdb.python/py-type.c (TS): New typedef.
	(ts): New global.
	* gdb.python/py-type.exp: Test field list of typedef.
This commit is contained in:
Doug Evans 2011-11-10 19:15:10 +00:00
parent bd119cf152
commit f6b47be484
5 changed files with 43 additions and 7 deletions

View file

@ -294,14 +294,33 @@ make_fielditem (struct type *type, int i, enum gdbpy_iter_kind kind)
static PyObject *
typy_fields_items (PyObject *self, enum gdbpy_iter_kind kind)
{
PyObject *py_type = self;
PyObject *result = NULL, *iter = NULL;
iter = typy_make_iter (self, kind);
if (iter == NULL)
return NULL;
result = PySequence_List (iter);
Py_DECREF (iter);
volatile struct gdb_exception except;
struct type *type = ((type_object *) py_type)->type;
struct type *checked_type = type;
TRY_CATCH (except, RETURN_MASK_ALL)
{
CHECK_TYPEDEF (checked_type);
}
GDB_PY_HANDLE_EXCEPTION (except);
if (checked_type != type)
py_type = type_to_type_object (checked_type);
iter = typy_make_iter (py_type, kind);
if (checked_type != type)
{
/* Need to wrap this in braces because Py_DECREF isn't wrapped
in a do{}while(0). */
Py_DECREF (py_type);
}
if (iter != NULL)
{
result = PySequence_List (iter);
Py_DECREF (iter);
}
return result;
}