Introduce ada_value_print_array

This adds ada_value_print_array, a value-based analogue of
ada_val_print_array.  It also removes some unused parameters from a
couple of helper functions.

gdb/ChangeLog
2020-03-13  Tom Tromey  <tom@tromey.com>

	* ada-valprint.c (val_print_packed_array_elements): Remove
	bitoffset and val parameters.  Call common_val_print.
	(ada_val_print_string): Remove offset, address, and original_value
	parameters.
	(ada_val_print_array): Update.
	(ada_value_print_array): New function.
	(ada_value_print_1): Call it.
This commit is contained in:
Tom Tromey 2020-03-13 17:39:52 -06:00
parent 0337112903
commit b59eac3732
2 changed files with 58 additions and 23 deletions

View File

@ -1,3 +1,13 @@
2020-03-13 Tom Tromey <tom@tromey.com>
* ada-valprint.c (val_print_packed_array_elements): Remove
bitoffset and val parameters. Call common_val_print.
(ada_val_print_string): Remove offset, address, and original_value
parameters.
(ada_val_print_array): Update.
(ada_value_print_array): New function.
(ada_value_print_1): Call it.
2020-03-13 Tom Tromey <tom@tromey.com>
* ada-valprint.c (ada_value_print): Use common_val_print.

View File

@ -112,17 +112,15 @@ print_optional_low_bound (struct ui_file *stream, struct type *type,
}
/* Version of val_print_array_elements for GNAT-style packed arrays.
Prints elements of packed array of type TYPE at bit offset
BITOFFSET from VALADDR on STREAM. Formats according to OPTIONS and
separates with commas. RECURSE is the recursion (nesting) level.
TYPE must have been decoded (as by ada_coerce_to_simple_array). */
Prints elements of packed array of type TYPE from VALADDR on
STREAM. Formats according to OPTIONS and separates with commas.
RECURSE is the recursion (nesting) level. TYPE must have been
decoded (as by ada_coerce_to_simple_array). */
static void
val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
int offset,
int bitoffset, struct ui_file *stream,
int offset, struct ui_file *stream,
int recurse,
struct value *val,
const struct value_print_options *options)
{
unsigned int i;
@ -230,9 +228,7 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
struct value_print_options opts = *options;
opts.deref_ref = 0;
val_print (elttype,
value_embedded_offset (v0), 0, stream,
recurse + 1, v0, &opts, current_language);
common_val_print (v0, stream, recurse + 1, &opts, current_language);
annotate_elt_rep (i - i0);
fprintf_filtered (stream, _(" %p[<repeats %u times>%p]"),
metadata_style.style ().ptr (), i - i0, nullptr);
@ -262,9 +258,8 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
maybe_print_array_index (index_type, j + low,
stream, options);
}
val_print (elttype,
value_embedded_offset (v0), 0, stream,
recurse + 1, v0, &opts, current_language);
common_val_print (v0, stream, recurse + 1, &opts,
current_language);
annotate_elt ();
}
}
@ -715,9 +710,8 @@ print_field_values (struct type *type, const gdb_byte *valaddr,
static void
ada_val_print_string (struct type *type, const gdb_byte *valaddr,
int offset, int offset_aligned, CORE_ADDR address,
int offset_aligned,
struct ui_file *stream, int recurse,
struct value *original_value,
const struct value_print_options *options)
{
enum bfd_endian byte_order = type_byte_order (type);
@ -1129,9 +1123,8 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr,
if (ada_is_string_type (type)
&& (options->format == 0 || options->format == 's'))
{
ada_val_print_string (type, valaddr, offset, offset_aligned,
address, stream, recurse, original_value,
options);
ada_val_print_string (type, valaddr, offset_aligned,
stream, recurse, options);
return;
}
@ -1139,8 +1132,7 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr,
print_optional_low_bound (stream, type, options);
if (TYPE_FIELD_BITSIZE (type, 0) > 0)
val_print_packed_array_elements (type, valaddr, offset_aligned,
0, stream, recurse,
original_value, options);
stream, recurse, options);
else
val_print_array_elements (type, offset_aligned, address,
stream, recurse, original_value,
@ -1148,6 +1140,41 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr,
fprintf_filtered (stream, ")");
}
/* Implement Ada value_print'ing for the case where TYPE is a
TYPE_CODE_ARRAY. */
static void
ada_value_print_array (struct value *val, struct ui_file *stream, int recurse,
const struct value_print_options *options)
{
struct type *type = ada_check_typedef (value_type (val));
/* For an array of characters, print with string syntax. */
if (ada_is_string_type (type)
&& (options->format == 0 || options->format == 's'))
{
const gdb_byte *valaddr = value_contents_for_printing (val);
int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr;
ada_val_print_string (type, valaddr, offset_aligned, stream, recurse,
options);
return;
}
fprintf_filtered (stream, "(");
print_optional_low_bound (stream, type, options);
if (TYPE_FIELD_BITSIZE (type, 0) > 0)
{
const gdb_byte *valaddr = value_contents_for_printing (val);
int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr;
val_print_packed_array_elements (type, valaddr, offset_aligned,
stream, recurse, options);
}
else
value_print_array_elements (val, stream, recurse, options, 0);
fprintf_filtered (stream, ")");
}
/* Implement Ada val_print'ing for the case where TYPE is
a TYPE_CODE_REF. */
@ -1390,9 +1417,7 @@ ada_value_print_1 (struct value *val, struct ui_file *stream, int recurse,
break;
case TYPE_CODE_ARRAY:
ada_val_print_array (type, valaddr, 0, 0,
address, stream, recurse, val,
options);
ada_value_print_array (val, stream, recurse, options);
return;
case TYPE_CODE_REF: