* ada-lang.c (static_unwrap_type): Add forward declaration.
(template_to_static_fixed_type): Fields of dynamic types sometimes also need to be unwrapped. Take this into account. (ada_to_fixed_type_1): Renamed from ada_to_fixed_type. (ada_to_fixed_type): New wrapper around ada_to_fixed_type_1. * ada-typeprint.c (ada_print_type): Get the typename from the original type, not the base type.
This commit is contained in:
parent
1ed6ede010
commit
f192137b09
@ -1,3 +1,13 @@
|
|||||||
|
2008-01-03 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
|
* ada-lang.c (static_unwrap_type): Add forward declaration.
|
||||||
|
(template_to_static_fixed_type): Fields of dynamic types sometimes
|
||||||
|
also need to be unwrapped. Take this into account.
|
||||||
|
(ada_to_fixed_type_1): Renamed from ada_to_fixed_type.
|
||||||
|
(ada_to_fixed_type): New wrapper around ada_to_fixed_type_1.
|
||||||
|
* ada-typeprint.c (ada_print_type): Get the typename from
|
||||||
|
the original type, not the base type.
|
||||||
|
|
||||||
2008-01-03 Jerome Guitton <guitton@adacore.com>
|
2008-01-03 Jerome Guitton <guitton@adacore.com>
|
||||||
|
|
||||||
* ada-lang.c (ada_value_struct_elt, to_fixed_array_type)
|
* ada-lang.c (ada_value_struct_elt, to_fixed_array_type)
|
||||||
|
@ -181,6 +181,7 @@ static struct type *to_fixed_range_type (char *, struct value *,
|
|||||||
struct objfile *);
|
struct objfile *);
|
||||||
|
|
||||||
static struct type *to_static_fixed_type (struct type *);
|
static struct type *to_static_fixed_type (struct type *);
|
||||||
|
static struct type *static_unwrap_type (struct type *type);
|
||||||
|
|
||||||
static struct value *unwrap_value (struct value *);
|
static struct value *unwrap_value (struct value *);
|
||||||
|
|
||||||
@ -6854,7 +6855,7 @@ template_to_static_fixed_type (struct type *type0)
|
|||||||
if (is_dynamic_field (type0, f))
|
if (is_dynamic_field (type0, f))
|
||||||
new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
|
new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
|
||||||
else
|
else
|
||||||
new_type = to_static_fixed_type (field_type);
|
new_type = static_unwrap_type (field_type);
|
||||||
if (type == type0 && new_type != field_type)
|
if (type == type0 && new_type != field_type)
|
||||||
{
|
{
|
||||||
TYPE_TARGET_TYPE (type0) = type = alloc_type (TYPE_OBJFILE (type0));
|
TYPE_TARGET_TYPE (type0) = type = alloc_type (TYPE_OBJFILE (type0));
|
||||||
@ -7125,8 +7126,8 @@ to_fixed_array_type (struct type *type0, struct value *dval,
|
|||||||
location of the tag, and therefore compute the tagged type's actual type.
|
location of the tag, and therefore compute the tagged type's actual type.
|
||||||
So we return the tagged type without consulting the tag. */
|
So we return the tagged type without consulting the tag. */
|
||||||
|
|
||||||
struct type *
|
static struct type *
|
||||||
ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
|
ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
|
||||||
CORE_ADDR address, struct value *dval, int check_tag)
|
CORE_ADDR address, struct value *dval, int check_tag)
|
||||||
{
|
{
|
||||||
type = ada_check_typedef (type);
|
type = ada_check_typedef (type);
|
||||||
@ -7168,6 +7169,25 @@ ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The same as ada_to_fixed_type_1, except that it preserves the type
|
||||||
|
if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
|
||||||
|
ada_to_fixed_type_1 would return the type referenced by TYPE. */
|
||||||
|
|
||||||
|
struct type *
|
||||||
|
ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
|
||||||
|
CORE_ADDR address, struct value *dval, int check_tag)
|
||||||
|
|
||||||
|
{
|
||||||
|
struct type *fixed_type =
|
||||||
|
ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
|
||||||
|
|
||||||
|
if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
|
||||||
|
&& TYPE_TARGET_TYPE (type) == fixed_type)
|
||||||
|
return type;
|
||||||
|
|
||||||
|
return fixed_type;
|
||||||
|
}
|
||||||
|
|
||||||
/* A standard (static-sized) type corresponding as well as possible to
|
/* A standard (static-sized) type corresponding as well as possible to
|
||||||
TYPE0, but based on no runtime data. */
|
TYPE0, but based on no runtime data. */
|
||||||
|
|
||||||
|
@ -753,7 +753,7 @@ ada_print_type (struct type *type0, char *varstring, struct ui_file *stream,
|
|||||||
int show, int level)
|
int show, int level)
|
||||||
{
|
{
|
||||||
struct type *type = ada_check_typedef (ada_get_base_type (type0));
|
struct type *type = ada_check_typedef (ada_get_base_type (type0));
|
||||||
char *type_name = decoded_type_name (type);
|
char *type_name = decoded_type_name (type0);
|
||||||
int is_var_decl = (varstring != NULL && varstring[0] != '\0');
|
int is_var_decl = (varstring != NULL && varstring[0] != '\0');
|
||||||
|
|
||||||
if (type == NULL)
|
if (type == NULL)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user