Index: gdb/ada-valprint.c |
diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c |
index f43f3e3be5e405ee461fe21b8129981735245084..95ec7ecdb5ce21cceb7c00b19141b1f5cd83e650 100644 |
--- a/gdb/ada-valprint.c |
+++ b/gdb/ada-valprint.c |
@@ -50,10 +50,10 @@ static int print_field_values (struct type *, const gdb_byte *, |
static void adjust_type_signedness (struct type *); |
-static int ada_val_print_1 (struct type *, const gdb_byte *, int, CORE_ADDR, |
- struct ui_file *, int, |
- const struct value *, |
- const struct value_print_options *); |
+static void ada_val_print_1 (struct type *, const gdb_byte *, int, CORE_ADDR, |
+ struct ui_file *, int, |
+ const struct value *, |
+ const struct value_print_options *); |
/* Make TYPE unsigned if its range of values includes no negatives. */ |
@@ -109,7 +109,7 @@ print_optional_low_bound (struct ui_file *stream, struct type *type, |
return 0; |
break; |
case TYPE_CODE_ENUM: |
- if (low_bound == TYPE_FIELD_BITPOS (index_type, 0)) |
+ if (low_bound == TYPE_FIELD_ENUMVAL (index_type, 0)) |
return 0; |
break; |
case TYPE_CODE_UNDEF: |
@@ -402,7 +402,7 @@ ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream) |
len = TYPE_NFIELDS (type); |
for (i = 0; i < len; i++) |
{ |
- if (TYPE_FIELD_BITPOS (type, i) == val) |
+ if (TYPE_FIELD_ENUMVAL (type, i) == val) |
{ |
break; |
} |
@@ -566,10 +566,9 @@ ada_printstr (struct ui_file *stream, struct type *type, |
/* See val_print for a description of the various parameters of this |
- function; they are identical. The semantics of the return value is |
- also identical to val_print. */ |
+ function; they are identical. */ |
-int |
+void |
ada_val_print (struct type *type, const gdb_byte *valaddr, |
int embedded_offset, CORE_ADDR address, |
struct ui_file *stream, int recurse, |
@@ -577,35 +576,26 @@ ada_val_print (struct type *type, const gdb_byte *valaddr, |
const struct value_print_options *options) |
{ |
volatile struct gdb_exception except; |
- int result = 0; |
/* XXX: this catches QUIT/ctrl-c as well. Isn't that busted? */ |
TRY_CATCH (except, RETURN_MASK_ALL) |
{ |
- result = ada_val_print_1 (type, valaddr, embedded_offset, address, |
- stream, recurse, val, options); |
+ ada_val_print_1 (type, valaddr, embedded_offset, address, |
+ stream, recurse, val, options); |
} |
- |
- if (except.reason < 0) |
- result = 0; |
- |
- return result; |
} |
/* Assuming TYPE is a simple array, print the value of this array located |
at VALADDR + OFFSET. See ada_val_print for a description of the various |
- parameters of this function; they are identical. The semantics |
- of the return value is also identical to ada_val_print. */ |
+ parameters of this function; they are identical. */ |
-static int |
+static void |
ada_val_print_array (struct type *type, const gdb_byte *valaddr, |
int offset, CORE_ADDR address, |
struct ui_file *stream, int recurse, |
const struct value *val, |
const struct value_print_options *options) |
{ |
- int result = 0; |
- |
/* For an array of chars, print with string syntax. */ |
if (ada_is_string_type (type) |
&& (options->format == 0 || options->format == 's')) |
@@ -644,7 +634,6 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr, |
} |
printstr (stream, elttype, valaddr + offset, len, 0, eltlen, options); |
- result = len; |
} |
else |
{ |
@@ -658,24 +647,20 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr, |
stream, recurse, val, options, 0); |
fprintf_filtered (stream, ")"); |
} |
- |
- return result; |
} |
/* See the comment on ada_val_print. This function differs in that it |
does not catch evaluation errors (leaving that to ada_val_print). */ |
-static int |
+static void |
ada_val_print_1 (struct type *type, const gdb_byte *valaddr, |
int offset, CORE_ADDR address, |
struct ui_file *stream, int recurse, |
const struct value *original_value, |
const struct value_print_options *options) |
{ |
- unsigned int len; |
int i; |
struct type *elttype; |
- LONGEST val; |
int offset_aligned; |
type = ada_check_typedef (type); |
@@ -684,11 +669,14 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr, |
|| (ada_is_constrained_packed_array_type (type) |
&& TYPE_CODE (type) != TYPE_CODE_PTR)) |
{ |
- int retn; |
struct value *mark = value_mark (); |
struct value *val; |
val = value_from_contents_and_address (type, valaddr + offset, address); |
+ /* If this is a reference, coerce it now. This helps taking care |
+ of the case where ADDRESS is meaningless because original_value |
+ was not an lval. */ |
+ val = coerce_ref (val); |
if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) /* array access type. */ |
val = ada_coerce_to_simple_array_ptr (val); |
else |
@@ -697,16 +685,15 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr, |
{ |
gdb_assert (TYPE_CODE (type) == TYPE_CODE_TYPEDEF); |
fprintf_filtered (stream, "0x0"); |
- retn = 0; |
} |
else |
- retn = ada_val_print_1 (value_type (val), |
- value_contents_for_printing (val), |
- value_embedded_offset (val), |
- value_address (val), stream, recurse, |
- val, options); |
+ ada_val_print_1 (value_type (val), |
+ value_contents_for_printing (val), |
+ value_embedded_offset (val), |
+ value_address (val), stream, recurse, |
+ val, options); |
value_free_to_mark (mark); |
- return retn; |
+ return; |
} |
offset_aligned = offset + ada_aligned_value_addr (type, valaddr) - valaddr; |
@@ -715,13 +702,14 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr, |
switch (TYPE_CODE (type)) |
{ |
default: |
- return c_val_print (type, valaddr, offset, address, stream, |
- recurse, original_value, options); |
+ c_val_print (type, valaddr, offset, address, stream, |
+ recurse, original_value, options); |
+ break; |
case TYPE_CODE_PTR: |
{ |
- int ret = c_val_print (type, valaddr, offset, address, |
- stream, recurse, original_value, options); |
+ c_val_print (type, valaddr, offset, address, |
+ stream, recurse, original_value, options); |
if (ada_is_tag_type (type)) |
{ |
@@ -733,9 +721,8 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr, |
if (name != NULL) |
fprintf_filtered (stream, " (%s)", name); |
- return 0; |
- } |
- return ret; |
+ } |
+ return; |
} |
case TYPE_CODE_INT: |
@@ -747,7 +734,7 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr, |
fprintf_filtered (stream, len < 4 ? "%.11g" : "%.17g", |
(double) ada_fixed_to_float (type, v)); |
- return 0; |
+ return; |
} |
else if (TYPE_CODE (type) == TYPE_CODE_RANGE) |
{ |
@@ -763,16 +750,17 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr, |
= value_from_contents_and_address (type, valaddr + offset, 0); |
struct value *v = value_cast (target_type, v1); |
- return ada_val_print_1 (target_type, |
- value_contents_for_printing (v), |
- value_embedded_offset (v), 0, |
- stream, recurse + 1, v, options); |
+ ada_val_print_1 (target_type, |
+ value_contents_for_printing (v), |
+ value_embedded_offset (v), 0, |
+ stream, recurse + 1, v, options); |
} |
else |
- return ada_val_print_1 (TYPE_TARGET_TYPE (type), |
- valaddr, offset, |
- address, stream, recurse, |
- original_value, options); |
+ ada_val_print_1 (TYPE_TARGET_TYPE (type), |
+ valaddr, offset, |
+ address, stream, recurse, |
+ original_value, options); |
+ return; |
} |
else |
{ |
@@ -817,53 +805,53 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr, |
ada_printchar (c, type, stream); |
} |
} |
- return 0; |
+ return; |
} |
case TYPE_CODE_ENUM: |
- if (options->format) |
- { |
- val_print_scalar_formatted (type, valaddr, offset_aligned, |
- original_value, options, 0, stream); |
- break; |
- } |
- len = TYPE_NFIELDS (type); |
- val = unpack_long (type, valaddr + offset_aligned); |
- for (i = 0; i < len; i++) |
- { |
- QUIT; |
- if (val == TYPE_FIELD_BITPOS (type, i)) |
- { |
- break; |
- } |
- } |
- if (i < len) |
- { |
- const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i)); |
- |
- if (name[0] == '\'') |
- fprintf_filtered (stream, "%ld %s", (long) val, name); |
- else |
- fputs_filtered (name, stream); |
- } |
- else |
- { |
- print_longest (stream, 'd', 0, val); |
- } |
- break; |
+ { |
+ unsigned int len; |
+ LONGEST val; |
- case TYPE_CODE_FLAGS: |
- if (options->format) |
- val_print_scalar_formatted (type, valaddr, offset_aligned, |
- original_value, options, 0, stream); |
- else |
- val_print_type_code_flags (type, valaddr + offset_aligned, stream); |
- break; |
+ if (options->format) |
+ { |
+ val_print_scalar_formatted (type, valaddr, offset_aligned, |
+ original_value, options, 0, stream); |
+ break; |
+ } |
+ len = TYPE_NFIELDS (type); |
+ val = unpack_long (type, valaddr + offset_aligned); |
+ for (i = 0; i < len; i++) |
+ { |
+ QUIT; |
+ if (val == TYPE_FIELD_ENUMVAL (type, i)) |
+ { |
+ break; |
+ } |
+ } |
+ if (i < len) |
+ { |
+ const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i)); |
+ |
+ if (name[0] == '\'') |
+ fprintf_filtered (stream, "%ld %s", (long) val, name); |
+ else |
+ fputs_filtered (name, stream); |
+ } |
+ else |
+ { |
+ print_longest (stream, 'd', 0, val); |
+ } |
+ break; |
+ } |
case TYPE_CODE_FLT: |
if (options->format) |
- return c_val_print (type, valaddr, offset, address, stream, |
- recurse, original_value, options); |
+ { |
+ c_val_print (type, valaddr, offset, address, stream, |
+ recurse, original_value, options); |
+ return; |
+ } |
else |
ada_print_floating (valaddr + offset, type, stream); |
break; |
@@ -873,19 +861,20 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr, |
if (ada_is_bogus_array_descriptor (type)) |
{ |
fprintf_filtered (stream, "(...?)"); |
- return 0; |
+ return; |
} |
else |
{ |
print_record (type, valaddr, offset_aligned, |
stream, recurse, original_value, options); |
- return 0; |
+ return; |
} |
case TYPE_CODE_ARRAY: |
- return ada_val_print_array (type, valaddr, offset_aligned, |
- address, stream, recurse, original_value, |
- options); |
+ ada_val_print_array (type, valaddr, offset_aligned, |
+ address, stream, recurse, original_value, |
+ options); |
+ return; |
case TYPE_CODE_REF: |
/* For references, the debugger is expected to print the value as |
@@ -911,7 +900,7 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr, |
deref_val_int = unpack_pointer (type, valaddr + offset_aligned); |
if (deref_val_int != 0) |
{ |
- struct value *deref_val = |
+ deref_val = |
ada_value_ind (value_from_pointer |
(lookup_pointer_type (elttype), |
deref_val_int)); |
@@ -931,7 +920,6 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr, |
break; |
} |
gdb_flush (stream); |
- return 0; |
} |
static int |
@@ -959,7 +947,7 @@ print_variant_part (struct type *type, int field_num, |
comma_needed, outer_type, outer_offset); |
} |
-int |
+void |
ada_value_print (struct value *val0, struct ui_file *stream, |
const struct value_print_options *options) |
{ |
@@ -999,14 +987,14 @@ ada_value_print (struct value *val0, struct ui_file *stream, |
fprintf_filtered (stream, "("); |
type_print (type, "", stream, -1); |
fprintf_filtered (stream, ") (...?)"); |
- return 0; |
+ return; |
} |
opts = *options; |
opts.deref_ref = 1; |
- return (val_print (type, value_contents_for_printing (val), |
- value_embedded_offset (val), address, |
- stream, 0, val, &opts, current_language)); |
+ val_print (type, value_contents_for_printing (val), |
+ value_embedded_offset (val), address, |
+ stream, 0, val, &opts, current_language); |
} |
static void |