ada-valprint.c: Reorder functions to reduce advance declarations.
Advance function declarations add to the maintenance cost, since any update to the function prototype needs to be made twice. For static functions, this is not necessary, and this patch reorders the function so as to reduce the use of such advanche declarations. gdb/ChangeLog: * ada-valprint.c (print_record): Delete declaration. (adjust_type_signedness, ada_val_print_1): Likewise. (ada_val_print): Move function implementation down. (print_variant_part, print_field_values, print_record): Move function implementation up.
This commit is contained in:
parent
c0d4881122
commit
bdf779a0c5
2 changed files with 195 additions and 200 deletions
|
@ -1,3 +1,11 @@
|
|||
2014-01-07 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* ada-valprint.c (print_record): Delete declaration.
|
||||
(adjust_type_signedness, ada_val_print_1): Likewise.
|
||||
(ada_val_print): Move function implementation down.
|
||||
(print_variant_part, print_field_values, print_record):
|
||||
Move function implementation up.
|
||||
|
||||
2014-01-07 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* python/py-type.c (typy_get_name): New function.
|
||||
|
|
|
@ -34,25 +34,12 @@
|
|||
#include "exceptions.h"
|
||||
#include "objfiles.h"
|
||||
|
||||
static void print_record (struct type *, const gdb_byte *, int,
|
||||
struct ui_file *,
|
||||
int,
|
||||
const struct value *,
|
||||
const struct value_print_options *);
|
||||
|
||||
static int print_field_values (struct type *, const gdb_byte *,
|
||||
int,
|
||||
struct ui_file *, int,
|
||||
const struct value *,
|
||||
const struct value_print_options *,
|
||||
int, struct type *, int);
|
||||
|
||||
static void adjust_type_signedness (struct type *);
|
||||
|
||||
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. */
|
||||
|
@ -551,26 +538,6 @@ 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. */
|
||||
|
||||
void
|
||||
ada_val_print (struct type *type, const gdb_byte *valaddr,
|
||||
int embedded_offset, CORE_ADDR address,
|
||||
struct ui_file *stream, int recurse,
|
||||
const struct value *val,
|
||||
const struct value_print_options *options)
|
||||
{
|
||||
volatile struct gdb_exception except;
|
||||
|
||||
/* XXX: this catches QUIT/ctrl-c as well. Isn't that busted? */
|
||||
TRY_CATCH (except, RETURN_MASK_ALL)
|
||||
{
|
||||
ada_val_print_1 (type, valaddr, embedded_offset, address,
|
||||
stream, recurse, val, options);
|
||||
}
|
||||
}
|
||||
|
||||
/* 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. */
|
||||
|
@ -635,6 +602,176 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr,
|
|||
}
|
||||
}
|
||||
|
||||
static int
|
||||
print_variant_part (struct type *type, int field_num,
|
||||
const gdb_byte *valaddr, int offset,
|
||||
struct ui_file *stream, int recurse,
|
||||
const struct value *val,
|
||||
const struct value_print_options *options,
|
||||
int comma_needed,
|
||||
struct type *outer_type, int outer_offset)
|
||||
{
|
||||
struct type *var_type = TYPE_FIELD_TYPE (type, field_num);
|
||||
int which = ada_which_variant_applies (var_type, outer_type,
|
||||
valaddr + outer_offset);
|
||||
|
||||
if (which < 0)
|
||||
return 0;
|
||||
else
|
||||
return print_field_values
|
||||
(TYPE_FIELD_TYPE (var_type, which),
|
||||
valaddr,
|
||||
offset + TYPE_FIELD_BITPOS (type, field_num) / HOST_CHAR_BIT
|
||||
+ TYPE_FIELD_BITPOS (var_type, which) / HOST_CHAR_BIT,
|
||||
stream, recurse, val, options,
|
||||
comma_needed, outer_type, outer_offset);
|
||||
}
|
||||
|
||||
/* Print out fields of value at VALADDR + OFFSET having structure type TYPE.
|
||||
|
||||
TYPE, VALADDR, OFFSET, STREAM, RECURSE, and OPTIONS have the same
|
||||
meanings as in ada_print_value and ada_val_print.
|
||||
|
||||
OUTER_TYPE and OUTER_OFFSET give type and address of enclosing
|
||||
record (used to get discriminant values when printing variant
|
||||
parts).
|
||||
|
||||
COMMA_NEEDED is 1 if fields have been printed at the current recursion
|
||||
level, so that a comma is needed before any field printed by this
|
||||
call.
|
||||
|
||||
Returns 1 if COMMA_NEEDED or any fields were printed. */
|
||||
|
||||
static int
|
||||
print_field_values (struct type *type, const gdb_byte *valaddr,
|
||||
int offset, struct ui_file *stream, int recurse,
|
||||
const struct value *val,
|
||||
const struct value_print_options *options,
|
||||
int comma_needed,
|
||||
struct type *outer_type, int outer_offset)
|
||||
{
|
||||
int i, len;
|
||||
|
||||
len = TYPE_NFIELDS (type);
|
||||
|
||||
for (i = 0; i < len; i += 1)
|
||||
{
|
||||
if (ada_is_ignored_field (type, i))
|
||||
continue;
|
||||
|
||||
if (ada_is_wrapper_field (type, i))
|
||||
{
|
||||
comma_needed =
|
||||
print_field_values (TYPE_FIELD_TYPE (type, i),
|
||||
valaddr,
|
||||
(offset
|
||||
+ TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT),
|
||||
stream, recurse, val, options,
|
||||
comma_needed, type, offset);
|
||||
continue;
|
||||
}
|
||||
else if (ada_is_variant_part (type, i))
|
||||
{
|
||||
comma_needed =
|
||||
print_variant_part (type, i, valaddr,
|
||||
offset, stream, recurse, val,
|
||||
options, comma_needed,
|
||||
outer_type, outer_offset);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (comma_needed)
|
||||
fprintf_filtered (stream, ", ");
|
||||
comma_needed = 1;
|
||||
|
||||
if (options->prettyformat)
|
||||
{
|
||||
fprintf_filtered (stream, "\n");
|
||||
print_spaces_filtered (2 + 2 * recurse, stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
wrap_here (n_spaces (2 + 2 * recurse));
|
||||
}
|
||||
|
||||
annotate_field_begin (TYPE_FIELD_TYPE (type, i));
|
||||
fprintf_filtered (stream, "%.*s",
|
||||
ada_name_prefix_len (TYPE_FIELD_NAME (type, i)),
|
||||
TYPE_FIELD_NAME (type, i));
|
||||
annotate_field_name_end ();
|
||||
fputs_filtered (" => ", stream);
|
||||
annotate_field_value ();
|
||||
|
||||
if (TYPE_FIELD_PACKED (type, i))
|
||||
{
|
||||
struct value *v;
|
||||
|
||||
/* Bitfields require special handling, especially due to byte
|
||||
order problems. */
|
||||
if (HAVE_CPLUS_STRUCT (type) && TYPE_FIELD_IGNORE (type, i))
|
||||
{
|
||||
fputs_filtered (_("<optimized out or zero length>"), stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
int bit_pos = TYPE_FIELD_BITPOS (type, i);
|
||||
int bit_size = TYPE_FIELD_BITSIZE (type, i);
|
||||
struct value_print_options opts;
|
||||
|
||||
adjust_type_signedness (TYPE_FIELD_TYPE (type, i));
|
||||
v = ada_value_primitive_packed_val
|
||||
(NULL, valaddr,
|
||||
offset + bit_pos / HOST_CHAR_BIT,
|
||||
bit_pos % HOST_CHAR_BIT,
|
||||
bit_size, TYPE_FIELD_TYPE (type, i));
|
||||
opts = *options;
|
||||
opts.deref_ref = 0;
|
||||
val_print (TYPE_FIELD_TYPE (type, i),
|
||||
value_contents_for_printing (v),
|
||||
value_embedded_offset (v), 0,
|
||||
stream, recurse + 1, v,
|
||||
&opts, current_language);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
struct value_print_options opts = *options;
|
||||
|
||||
opts.deref_ref = 0;
|
||||
ada_val_print (TYPE_FIELD_TYPE (type, i),
|
||||
valaddr,
|
||||
(offset
|
||||
+ TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT),
|
||||
0, stream, recurse + 1, val, &opts);
|
||||
}
|
||||
annotate_field_end ();
|
||||
}
|
||||
|
||||
return comma_needed;
|
||||
}
|
||||
|
||||
static void
|
||||
print_record (struct type *type, const gdb_byte *valaddr,
|
||||
int offset,
|
||||
struct ui_file *stream, int recurse,
|
||||
const struct value *val,
|
||||
const struct value_print_options *options)
|
||||
{
|
||||
type = ada_check_typedef (type);
|
||||
|
||||
fprintf_filtered (stream, "(");
|
||||
|
||||
if (print_field_values (type, valaddr, offset,
|
||||
stream, recurse, val, options,
|
||||
0, type, offset) != 0 && options->prettyformat)
|
||||
{
|
||||
fprintf_filtered (stream, "\n");
|
||||
print_spaces_filtered (2 * recurse, stream);
|
||||
}
|
||||
|
||||
fprintf_filtered (stream, ")");
|
||||
}
|
||||
|
||||
/* See the comment on ada_val_print. This function differs in that it
|
||||
does not catch evaluation errors (leaving that to ada_val_print). */
|
||||
|
||||
|
@ -913,29 +1050,24 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
|
|||
gdb_flush (stream);
|
||||
}
|
||||
|
||||
static int
|
||||
print_variant_part (struct type *type, int field_num,
|
||||
const gdb_byte *valaddr, int offset,
|
||||
struct ui_file *stream, int recurse,
|
||||
const struct value *val,
|
||||
const struct value_print_options *options,
|
||||
int comma_needed,
|
||||
struct type *outer_type, int outer_offset)
|
||||
{
|
||||
struct type *var_type = TYPE_FIELD_TYPE (type, field_num);
|
||||
int which = ada_which_variant_applies (var_type, outer_type,
|
||||
valaddr + outer_offset);
|
||||
/* See val_print for a description of the various parameters of this
|
||||
function; they are identical. */
|
||||
|
||||
if (which < 0)
|
||||
return 0;
|
||||
else
|
||||
return print_field_values
|
||||
(TYPE_FIELD_TYPE (var_type, which),
|
||||
valaddr,
|
||||
offset + TYPE_FIELD_BITPOS (type, field_num) / HOST_CHAR_BIT
|
||||
+ TYPE_FIELD_BITPOS (var_type, which) / HOST_CHAR_BIT,
|
||||
stream, recurse, val, options,
|
||||
comma_needed, outer_type, outer_offset);
|
||||
void
|
||||
ada_val_print (struct type *type, const gdb_byte *valaddr,
|
||||
int embedded_offset, CORE_ADDR address,
|
||||
struct ui_file *stream, int recurse,
|
||||
const struct value *val,
|
||||
const struct value_print_options *options)
|
||||
{
|
||||
volatile struct gdb_exception except;
|
||||
|
||||
/* XXX: this catches QUIT/ctrl-c as well. Isn't that busted? */
|
||||
TRY_CATCH (except, RETURN_MASK_ALL)
|
||||
{
|
||||
ada_val_print_1 (type, valaddr, embedded_offset, address,
|
||||
stream, recurse, val, options);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -987,148 +1119,3 @@ ada_value_print (struct value *val0, struct ui_file *stream,
|
|||
value_embedded_offset (val), address,
|
||||
stream, 0, val, &opts, current_language);
|
||||
}
|
||||
|
||||
static void
|
||||
print_record (struct type *type, const gdb_byte *valaddr,
|
||||
int offset,
|
||||
struct ui_file *stream, int recurse,
|
||||
const struct value *val,
|
||||
const struct value_print_options *options)
|
||||
{
|
||||
type = ada_check_typedef (type);
|
||||
|
||||
fprintf_filtered (stream, "(");
|
||||
|
||||
if (print_field_values (type, valaddr, offset,
|
||||
stream, recurse, val, options,
|
||||
0, type, offset) != 0 && options->prettyformat)
|
||||
{
|
||||
fprintf_filtered (stream, "\n");
|
||||
print_spaces_filtered (2 * recurse, stream);
|
||||
}
|
||||
|
||||
fprintf_filtered (stream, ")");
|
||||
}
|
||||
|
||||
/* Print out fields of value at VALADDR + OFFSET having structure type TYPE.
|
||||
|
||||
TYPE, VALADDR, OFFSET, STREAM, RECURSE, and OPTIONS have the same
|
||||
meanings as in ada_print_value and ada_val_print.
|
||||
|
||||
OUTER_TYPE and OUTER_OFFSET give type and address of enclosing
|
||||
record (used to get discriminant values when printing variant
|
||||
parts).
|
||||
|
||||
COMMA_NEEDED is 1 if fields have been printed at the current recursion
|
||||
level, so that a comma is needed before any field printed by this
|
||||
call.
|
||||
|
||||
Returns 1 if COMMA_NEEDED or any fields were printed. */
|
||||
|
||||
static int
|
||||
print_field_values (struct type *type, const gdb_byte *valaddr,
|
||||
int offset, struct ui_file *stream, int recurse,
|
||||
const struct value *val,
|
||||
const struct value_print_options *options,
|
||||
int comma_needed,
|
||||
struct type *outer_type, int outer_offset)
|
||||
{
|
||||
int i, len;
|
||||
|
||||
len = TYPE_NFIELDS (type);
|
||||
|
||||
for (i = 0; i < len; i += 1)
|
||||
{
|
||||
if (ada_is_ignored_field (type, i))
|
||||
continue;
|
||||
|
||||
if (ada_is_wrapper_field (type, i))
|
||||
{
|
||||
comma_needed =
|
||||
print_field_values (TYPE_FIELD_TYPE (type, i),
|
||||
valaddr,
|
||||
(offset
|
||||
+ TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT),
|
||||
stream, recurse, val, options,
|
||||
comma_needed, type, offset);
|
||||
continue;
|
||||
}
|
||||
else if (ada_is_variant_part (type, i))
|
||||
{
|
||||
comma_needed =
|
||||
print_variant_part (type, i, valaddr,
|
||||
offset, stream, recurse, val,
|
||||
options, comma_needed,
|
||||
outer_type, outer_offset);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (comma_needed)
|
||||
fprintf_filtered (stream, ", ");
|
||||
comma_needed = 1;
|
||||
|
||||
if (options->prettyformat)
|
||||
{
|
||||
fprintf_filtered (stream, "\n");
|
||||
print_spaces_filtered (2 + 2 * recurse, stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
wrap_here (n_spaces (2 + 2 * recurse));
|
||||
}
|
||||
|
||||
annotate_field_begin (TYPE_FIELD_TYPE (type, i));
|
||||
fprintf_filtered (stream, "%.*s",
|
||||
ada_name_prefix_len (TYPE_FIELD_NAME (type, i)),
|
||||
TYPE_FIELD_NAME (type, i));
|
||||
annotate_field_name_end ();
|
||||
fputs_filtered (" => ", stream);
|
||||
annotate_field_value ();
|
||||
|
||||
if (TYPE_FIELD_PACKED (type, i))
|
||||
{
|
||||
struct value *v;
|
||||
|
||||
/* Bitfields require special handling, especially due to byte
|
||||
order problems. */
|
||||
if (HAVE_CPLUS_STRUCT (type) && TYPE_FIELD_IGNORE (type, i))
|
||||
{
|
||||
fputs_filtered (_("<optimized out or zero length>"), stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
int bit_pos = TYPE_FIELD_BITPOS (type, i);
|
||||
int bit_size = TYPE_FIELD_BITSIZE (type, i);
|
||||
struct value_print_options opts;
|
||||
|
||||
adjust_type_signedness (TYPE_FIELD_TYPE (type, i));
|
||||
v = ada_value_primitive_packed_val
|
||||
(NULL, valaddr,
|
||||
offset + bit_pos / HOST_CHAR_BIT,
|
||||
bit_pos % HOST_CHAR_BIT,
|
||||
bit_size, TYPE_FIELD_TYPE (type, i));
|
||||
opts = *options;
|
||||
opts.deref_ref = 0;
|
||||
val_print (TYPE_FIELD_TYPE (type, i),
|
||||
value_contents_for_printing (v),
|
||||
value_embedded_offset (v), 0,
|
||||
stream, recurse + 1, v,
|
||||
&opts, current_language);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
struct value_print_options opts = *options;
|
||||
|
||||
opts.deref_ref = 0;
|
||||
ada_val_print (TYPE_FIELD_TYPE (type, i),
|
||||
valaddr,
|
||||
(offset
|
||||
+ TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT),
|
||||
0, stream, recurse + 1, val, &opts);
|
||||
}
|
||||
annotate_field_end ();
|
||||
}
|
||||
|
||||
return comma_needed;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue