mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
* ada-valprint.c (ada_val_print_1) [TYPE_CODE_REF]: Ignore deref_ref
and always print the dereferenced value.
This commit is contained in:
parent
b7789565fa
commit
969a136098
@ -1,3 +1,8 @@
|
||||
2008-01-01 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* ada-valprint.c (ada_val_print_1) [TYPE_CODE_REF]: Ignore deref_ref
|
||||
and always print the dereferenced value.
|
||||
|
||||
2008-01-01 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* ada-lang.c (ada_evaluate_subexp, case BINOP_SUB): Add handling
|
||||
|
@ -855,32 +855,35 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr0,
|
||||
return len;
|
||||
|
||||
case TYPE_CODE_REF:
|
||||
/* For references, the debugger is expected to print the value as
|
||||
an address if DEREF_REF is null. But printing an address in place
|
||||
of the object value would be confusing to an Ada programmer.
|
||||
So, for Ada values, we print the actual dereferenced value
|
||||
regardless. */
|
||||
elttype = check_typedef (TYPE_TARGET_TYPE (type));
|
||||
/* De-reference the reference */
|
||||
if (deref_ref)
|
||||
{
|
||||
if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
|
||||
{
|
||||
LONGEST deref_val_int = (LONGEST)
|
||||
unpack_pointer (lookup_pointer_type (builtin_type_void),
|
||||
valaddr);
|
||||
if (deref_val_int != 0)
|
||||
{
|
||||
struct value *deref_val =
|
||||
ada_value_ind (value_from_longest
|
||||
(lookup_pointer_type (elttype),
|
||||
deref_val_int));
|
||||
val_print (value_type (deref_val),
|
||||
value_contents (deref_val), 0,
|
||||
VALUE_ADDRESS (deref_val), stream, format,
|
||||
deref_ref, recurse + 1, pretty);
|
||||
}
|
||||
else
|
||||
fputs_filtered ("(null)", stream);
|
||||
}
|
||||
else
|
||||
fputs_filtered ("???", stream);
|
||||
}
|
||||
|
||||
if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
|
||||
{
|
||||
LONGEST deref_val_int = (LONGEST)
|
||||
unpack_pointer (lookup_pointer_type (builtin_type_void),
|
||||
valaddr);
|
||||
if (deref_val_int != 0)
|
||||
{
|
||||
struct value *deref_val =
|
||||
ada_value_ind (value_from_longest
|
||||
(lookup_pointer_type (elttype),
|
||||
deref_val_int));
|
||||
val_print (value_type (deref_val),
|
||||
value_contents (deref_val), 0,
|
||||
VALUE_ADDRESS (deref_val), stream, format,
|
||||
deref_ref, recurse + 1, pretty);
|
||||
}
|
||||
else
|
||||
fputs_filtered ("(null)", stream);
|
||||
}
|
||||
else
|
||||
fputs_filtered ("???", stream);
|
||||
|
||||
break;
|
||||
}
|
||||
gdb_flush (stream);
|
||||
|
Loading…
Reference in New Issue
Block a user