[rfc] Ada simplification: ada_find_any_type

Ulrich Weigand
2009-05-14T11:38:40Z

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