From 872c8b510d28a23a3a49157fcb7323fd8052b8c1 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Tue, 24 Mar 2009 01:51:48 +0000 Subject: [PATCH] * ada-lang.c (ada_get_field_index): Add handling of the case when TYPE is a typedef of a struct. --- gdb/ChangeLog | 5 +++++ gdb/ada-lang.c | 21 ++++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 09f157dbf66..15350a11efc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2009-03-23 Joel Brobecker + + * ada-lang.c (ada_get_field_index): Add handling of the case + when TYPE is a typedef of a struct. + 2009-03-23 Joel Brobecker Add gdb_usleep as a portable version of sleep based on gdb_select. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 08004545294..b4e1eb952c0 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -411,25 +411,28 @@ field_name_match (const char *field_name, const char *target) } -/* Assuming TYPE is a TYPE_CODE_STRUCT, find the field whose name matches - FIELD_NAME, and return its index. This function also handles fields - whose name have ___ suffixes because the compiler sometimes alters - their name by adding such a suffix to represent fields with certain - constraints. If the field could not be found, return a negative - number if MAYBE_MISSING is set. Otherwise raise an error. */ +/* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to + a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME, + and return its index. This function also handles fields whose name + have ___ suffixes because the compiler sometimes alters their name + by adding such a suffix to represent fields with certain constraints. + If the field could not be found, return a negative number if + MAYBE_MISSING is set. Otherwise raise an error. */ int ada_get_field_index (const struct type *type, const char *field_name, int maybe_missing) { int fieldno; - for (fieldno = 0; fieldno < TYPE_NFIELDS (type); fieldno++) - if (field_name_match (TYPE_FIELD_NAME (type, fieldno), field_name)) + struct type *struct_type = check_typedef ((struct type *) type); + + for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++) + if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name)) return fieldno; if (!maybe_missing) error (_("Unable to find field %s in struct %s. Aborting"), - field_name, TYPE_NAME (type)); + field_name, TYPE_NAME (struct_type)); return -1; } -- 2.30.2