This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[rfc] Ada simplification: ada_find_any_type
- From: "Ulrich Weigand" <uweigand at de dot ibm dot com>
- To: gdb-patches at sourceware dot org, brobecker at adacore dot com
- Date: Thu, 14 May 2009 13:38:29 +0200 (CEST)
- Subject: [rfc] Ada simplification: ada_find_any_type
Hello,
this is the last of the Ada patches. A recent change introduced a use of
current_gdbarch into ada_find_any_type, which is somewhat hard to eliminate.
However, it seems to me that for all but one callers of ada_find_any_type,
the check for primitive types isn't really necessary, as they are always
passed Ada-specific types that can never be primitive types.
The one exception is to_fixed_range_type, which indeed should check for
primitive types. The following patch therefore moves the check into this
routine. While this still used current_gdbarch, that instance turns out
to be more straightforward to eliminate here than it would have been in
the generic ada_find_any_type routine ...
Joel, would this be OK?
Bye,
Ulrich
ChangeLog:
* ada-lang.c (ada_find_any_type): Move check for primitive types ...
(to_fixed_range_type): ... to here.
Index: gdb-head/gdb/ada-lang.c
===================================================================
--- gdb-head.orig/gdb/ada-lang.c
+++ gdb-head/gdb/ada-lang.c
@@ -6487,16 +6487,11 @@ struct type *
ada_find_any_type (const char *name)
{
struct symbol *sym = ada_find_any_symbol (name);
- struct type *type = NULL;
if (sym != NULL)
- type = SYMBOL_TYPE (sym);
+ return SYMBOL_TYPE (sym);
- if (type == NULL)
- type = language_lookup_primitive_type_by_name
- (language_def (language_ada), current_gdbarch, name);
-
- return type;
+ return NULL;
}
/* Given NAME and an associated BLOCK, search all symbols for
@@ -9451,6 +9446,11 @@ to_fixed_range_type (char *name, struct
struct type *base_type;
char *subtype_info;
+ /* Also search primitive types if type symbol could not be found. */
+ if (raw_type == NULL)
+ raw_type = language_lookup_primitive_type_by_name
+ (language_def (language_ada), current_gdbarch, name);
+
if (raw_type == NULL)
base_type = builtin_type_int32;
else if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com