From: brobecke Date: Tue, 24 Mar 2009 01:51:48 +0000 (+0000) Subject: * ada-lang.c (ada_get_field_index): Add handling of the case X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=78272f6741a3901accf878b693a223a9148bfbd4;p=pf3gnuchains%2Fpf3gnuchains3x.git * ada-lang.c (ada_get_field_index): Add handling of the case when TYPE is a typedef of a struct. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 09f157dbf6..15350a11ef 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 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. * gdb_usleep.h, gdb_usleep.c: New files. * Makefile.in (SFILES): Add gdb_usleep.c. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 0800454529..b4e1eb952c 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; }