Index: gdb/python/py-type.c |
diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c |
index dadb0375a93ad1fb010b1f5f23d7fd83a8951d3e..98030a6fecc6e6ff5b4442ad81b3f1b965e0002c 100644 |
--- a/gdb/python/py-type.c |
+++ b/gdb/python/py-type.c |
@@ -167,11 +167,24 @@ convert_field (struct type *type, int field) |
if (!field_is_static (&TYPE_FIELD (type, field))) |
{ |
- arg = PyLong_FromLong (TYPE_FIELD_BITPOS (type, field)); |
+ const char *attrstring; |
+ |
+ if (TYPE_CODE (type) == TYPE_CODE_ENUM) |
+ { |
+ arg = gdb_py_long_from_longest (TYPE_FIELD_ENUMVAL (type, field)); |
+ attrstring = "enumval"; |
+ } |
+ else |
+ { |
+ arg = PyLong_FromLong (TYPE_FIELD_BITPOS (type, field)); |
+ attrstring = "bitpos"; |
+ } |
+ |
if (!arg) |
goto fail; |
- if (PyObject_SetAttrString (result, "bitpos", arg) < 0) |
+ /* At least python-2.4 had the second parameter non-const. */ |
+ if (PyObject_SetAttrString (result, (char *) attrstring, arg) < 0) |
goto failarg; |
} |
@@ -1018,6 +1031,10 @@ check_types_equal (struct type *type1, struct type *type2, |
if (FIELD_BITPOS (*field1) != FIELD_BITPOS (*field2)) |
return Py_NE; |
break; |
+ case FIELD_LOC_KIND_ENUMVAL: |
+ if (FIELD_ENUMVAL (*field1) != FIELD_ENUMVAL (*field2)) |
+ return Py_NE; |
+ break; |
case FIELD_LOC_KIND_PHYSADDR: |
if (FIELD_STATIC_PHYSADDR (*field1) |
!= FIELD_STATIC_PHYSADDR (*field2)) |
@@ -1055,7 +1072,6 @@ check_types_equal (struct type *type1, struct type *type2, |
if (TYPE_TARGET_TYPE (type1) != NULL) |
{ |
struct type_equality_entry entry; |
- int added; |
if (TYPE_TARGET_TYPE (type2) == NULL) |
return Py_NE; |
@@ -1255,7 +1271,6 @@ typy_getitem (PyObject *self, PyObject *key) |
struct type *type = ((type_object *) self)->type; |
char *field; |
int i; |
- volatile struct gdb_exception except; |
field = python_string_to_host_string (key); |
if (field == NULL) |
@@ -1271,7 +1286,7 @@ typy_getitem (PyObject *self, PyObject *key) |
for (i = 0; i < TYPE_NFIELDS (type); i++) |
{ |
- char *t_field_name = TYPE_FIELD_NAME (type, i); |
+ const char *t_field_name = TYPE_FIELD_NAME (type, i); |
if (t_field_name && (strcmp_iw (t_field_name, field) == 0)) |
{ |
@@ -1317,7 +1332,6 @@ typy_has_key (PyObject *self, PyObject *args) |
struct type *type = ((type_object *) self)->type; |
const char *field; |
int i; |
- volatile struct gdb_exception except; |
if (!PyArg_ParseTuple (args, "s", &field)) |
return NULL; |
@@ -1332,7 +1346,7 @@ typy_has_key (PyObject *self, PyObject *args) |
for (i = 0; i < TYPE_NFIELDS (type); i++) |
{ |
- char *t_field_name = TYPE_FIELD_NAME (type, i); |
+ const char *t_field_name = TYPE_FIELD_NAME (type, i); |
if (t_field_name && (strcmp_iw (t_field_name, field) == 0)) |
Py_RETURN_TRUE; |
@@ -1414,7 +1428,6 @@ typy_iterator_iternext (PyObject *self) |
{ |
typy_iterator_object *iter_obj = (typy_iterator_object *) self; |
struct type *type = iter_obj->source->type; |
- int i; |
PyObject *result; |
if (iter_obj->field < TYPE_NFIELDS (type)) |
@@ -1681,6 +1694,13 @@ static PyTypeObject type_object_type = |
0, /* tp_new */ |
}; |
+static PyGetSetDef field_object_getset[] = |
+{ |
+ { "__dict__", gdb_py_generic_dict, NULL, |
+ "The __dict__ for this field.", &field_object_type }, |
+ { NULL } |
+}; |
+ |
static PyTypeObject field_object_type = |
{ |
PyObject_HEAD_INIT (NULL) |
@@ -1713,7 +1733,7 @@ static PyTypeObject field_object_type = |
0, /* tp_iternext */ |
0, /* tp_methods */ |
0, /* tp_members */ |
- 0, /* tp_getset */ |
+ field_object_getset, /* tp_getset */ |
0, /* tp_base */ |
0, /* tp_dict */ |
0, /* tp_descr_get */ |