aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/ada-valprint.c385
2 files changed, 194 insertions, 199 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 13d2e16..64d1e6b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
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.
(type_object_getset): Add entry for attribute "name".
* NEWS: Add entry mentioning this new attribute.
diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c
index bef5ff9..5162737 100644
--- a/gdb/ada-valprint.c
+++ b/gdb/ada-valprint.c
@@ -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)
+/* 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)
{
- struct type *var_type = TYPE_FIELD_TYPE (type, field_num);
- int which = ada_which_variant_applies (var_type, outer_type,
- valaddr + outer_offset);
+ volatile struct gdb_exception except;
- 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);
+ /* 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;
-}