* valprint.h (get_array_bounds): Change low and high parameter types

to LONGEST *.
	* valprint.c (get_array_bounds): Use get_discrete_bounds call to
	compute bounds.
	(val_print_array_elements): Adapt to change above.
	* ada-valprint.c (print_optional_low_bound): Adapt to change above.
	* p-valprint.c (pascal_val_print): Likewise.
This commit is contained in:
Pierre Muller 2010-06-03 06:50:49 +00:00
parent 416a7ddd02
commit df17845119
5 changed files with 32 additions and 39 deletions

View File

@ -1,3 +1,13 @@
2010-06-03 Pierre Muller <muller@ics.u-strasbg.fr>
* valprint.h (get_array_bounds): Change low and high parameter types
to LONGEST *.
* valprint.c (get_array_bounds): Use get_discrete_bounds call to
compute bounds.
(val_print_array_elements): Adapt to change above.
* ada-valprint.c (print_optional_low_bound): Adapt to change above.
* p-valprint.c (pascal_val_print): Likewise.
2010-06-02 Jan Kratochvil <jan.kratochvil@redhat.com>
* symfile.c (init_filename_language_table): New extensions .for, .FOR,

View File

@ -85,8 +85,8 @@ print_optional_low_bound (struct ui_file *stream, struct type *type,
const struct value_print_options *options)
{
struct type *index_type;
long low_bound;
long high_bound;
LONGEST low_bound;
LONGEST high_bound;
if (options->print_array_indexes)
return 0;
@ -131,7 +131,7 @@ print_optional_low_bound (struct ui_file *stream, struct type *type,
break;
}
ada_print_scalar (index_type, (LONGEST) low_bound, stream);
ada_print_scalar (index_type, low_bound, stream);
fprintf_filtered (stream, " => ");
return 1;
}

View File

@ -60,7 +60,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
unsigned int i = 0; /* Number of characters printed */
unsigned len;
long low_bound, high_bound;
LONGEST low_bound, high_bound;
struct type *elttype;
unsigned eltlen;
int length_pos, length_size, string_pos;

View File

@ -1034,44 +1034,27 @@ print_char_chars (struct ui_file *stream, struct type *type,
Return 1 if the operation was successful. Return zero otherwise,
in which case the values of LOW_BOUND and HIGH_BOUNDS are unmodified.
Computing the array upper and lower bounds is pretty easy, but this
function does some additional verifications before returning them.
If something incorrect is detected, it is better to return a status
rather than throwing an error, making it easier for the caller to
implement an error-recovery plan. For instance, it may decide to
warn the user that the bounds were not found and then use some
default values instead. */
We now simply use get_discrete_bounds call to get the values
of the low and high bounds.
get_discrete_bounds can return three values:
1, meaning that index is a range,
0, meaning that index is a discrete type,
or -1 for failure. */
int
get_array_bounds (struct type *type, long *low_bound, long *high_bound)
get_array_bounds (struct type *type, LONGEST *low_bound, LONGEST *high_bound)
{
struct type *index = TYPE_INDEX_TYPE (type);
long low = 0;
long high = 0;
LONGEST low = 0;
LONGEST high = 0;
int res;
if (index == NULL)
return 0;
if (TYPE_CODE (index) == TYPE_CODE_RANGE)
{
low = TYPE_LOW_BOUND (index);
high = TYPE_HIGH_BOUND (index);
}
else if (TYPE_CODE (index) == TYPE_CODE_ENUM)
{
const int n_enums = TYPE_NFIELDS (index);
low = TYPE_FIELD_BITPOS (index, 0);
high = TYPE_FIELD_BITPOS (index, n_enums - 1);
}
else
return 0;
/* Abort if the lower bound is greater than the higher bound, except
when low = high + 1. This is a very common idiom used in Ada when
defining empty ranges (for instance "range 1 .. 0"). */
if (low > high + 1)
res = get_discrete_bounds (index, &low, &high);
if (res == -1)
return 0;
if (low_bound)
@ -1126,7 +1109,7 @@ val_print_array_elements (struct type *type, const gdb_byte *valaddr,
unsigned int rep1;
/* Number of repetitions we have detected so far. */
unsigned int reps;
long low_bound_index = 0;
LONGEST low_bound_index = 0;
elttype = TYPE_TARGET_TYPE (type);
eltlen = TYPE_LENGTH (check_typedef (elttype));
@ -1141,7 +1124,7 @@ val_print_array_elements (struct type *type, const gdb_byte *valaddr,
len = TYPE_LENGTH (type) / eltlen;
else
{
long low, hi;
LONGEST low, hi;
if (get_array_bounds (type, &low, &hi))
len = hi - low + 1;

View File

@ -109,8 +109,8 @@ extern void get_raw_print_options (struct value_print_options *opts);
extern void get_formatted_print_options (struct value_print_options *opts,
char format);
extern int get_array_bounds (struct type *type, long *low_bound,
long *high_bound);
extern int get_array_bounds (struct type *type, LONGEST *low_bound,
LONGEST *high_bound);
extern void maybe_print_array_index (struct type *index_type, LONGEST index,
struct ui_file *stream,