| Index: gdb/ada-typeprint.c
|
| diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c
|
| index 40f30585f68fc18c6125416c38f49abe059d5b69..0c3d3140c07e0ab49e7573b8cfb47f3a5150596a 100644
|
| --- a/gdb/ada-typeprint.c
|
| +++ b/gdb/ada-typeprint.c
|
| @@ -1,6 +1,5 @@
|
| /* Support for printing Ada types for GDB, the GNU debugger.
|
| - Copyright (C) 1986, 1988-1989, 1991, 1997-2004, 2007-2012 Free
|
| - Software Foundation, Inc.
|
| + Copyright (C) 1986-2013 Free Software Foundation, Inc.
|
|
|
| This file is part of GDB.
|
|
|
| @@ -35,17 +34,20 @@
|
| #include "ada-lang.h"
|
|
|
| #include <ctype.h>
|
| -#include "gdb_string.h"
|
| +#include <string.h>
|
| #include <errno.h>
|
|
|
| static int print_selected_record_field_types (struct type *, struct type *,
|
| int, int,
|
| - struct ui_file *, int, int);
|
| + struct ui_file *, int, int,
|
| + const struct type_print_options *);
|
|
|
| static int print_record_field_types (struct type *, struct type *,
|
| - struct ui_file *, int, int);
|
| + struct ui_file *, int, int,
|
| + const struct type_print_options *);
|
|
|
| -static void print_array_type (struct type *, struct ui_file *, int, int);
|
| +static void print_array_type (struct type *, struct ui_file *, int, int,
|
| + const struct type_print_options *);
|
|
|
| static int print_choices (struct type *, int, struct ui_file *,
|
| struct type *);
|
| @@ -324,7 +326,7 @@ print_fixed_point_type (struct type *type, struct ui_file *stream)
|
|
|
| static void
|
| print_array_type (struct type *type, struct ui_file *stream, int show,
|
| - int level)
|
| + int level, const struct type_print_options *flags)
|
| {
|
| int bitsize;
|
| int n_indices;
|
| @@ -392,7 +394,7 @@ print_array_type (struct type *type, struct ui_file *stream, int show,
|
| fprintf_filtered (stream, ") of ");
|
| wrap_here ("");
|
| ada_print_type (ada_array_element_type (type, n_indices), "", stream,
|
| - show == 0 ? 0 : show - 1, level + 1);
|
| + show == 0 ? 0 : show - 1, level + 1, flags);
|
| if (bitsize > 0)
|
| fprintf_filtered (stream, " <packed: %d-bit elements>", bitsize);
|
| }
|
| @@ -488,7 +490,8 @@ Huh:
|
| static void
|
| print_variant_clauses (struct type *type, int field_num,
|
| struct type *outer_type, struct ui_file *stream,
|
| - int show, int level)
|
| + int show, int level,
|
| + const struct type_print_options *flags)
|
| {
|
| int i;
|
| struct type *var_type, *par_type;
|
| @@ -514,13 +517,14 @@ print_variant_clauses (struct type *type, int field_num,
|
| if (print_choices (var_type, i, stream, discr_type))
|
| {
|
| if (print_record_field_types (TYPE_FIELD_TYPE (var_type, i),
|
| - outer_type, stream, show, level + 4)
|
| + outer_type, stream, show, level + 4,
|
| + flags)
|
| <= 0)
|
| fprintf_filtered (stream, " null;");
|
| }
|
| else
|
| print_selected_record_field_types (var_type, outer_type, i, i,
|
| - stream, show, level + 4);
|
| + stream, show, level + 4, flags);
|
| }
|
| }
|
|
|
| @@ -534,13 +538,14 @@ print_variant_clauses (struct type *type, int field_num,
|
|
|
| static void
|
| print_variant_part (struct type *type, int field_num, struct type *outer_type,
|
| - struct ui_file *stream, int show, int level)
|
| + struct ui_file *stream, int show, int level,
|
| + const struct type_print_options *flags)
|
| {
|
| fprintf_filtered (stream, "\n%*scase %s is", level + 4, "",
|
| ada_variant_discrim_name
|
| (TYPE_FIELD_TYPE (type, field_num)));
|
| print_variant_clauses (type, field_num, outer_type, stream, show,
|
| - level + 4);
|
| + level + 4, flags);
|
| fprintf_filtered (stream, "\n%*send case;", level + 4, "");
|
| }
|
|
|
| @@ -556,7 +561,8 @@ print_variant_part (struct type *type, int field_num, struct type *outer_type,
|
| static int
|
| print_selected_record_field_types (struct type *type, struct type *outer_type,
|
| int fld0, int fld1,
|
| - struct ui_file *stream, int show, int level)
|
| + struct ui_file *stream, int show, int level,
|
| + const struct type_print_options *flags)
|
| {
|
| int i, flds;
|
|
|
| @@ -573,10 +579,10 @@ print_selected_record_field_types (struct type *type, struct type *outer_type,
|
| ;
|
| else if (ada_is_wrapper_field (type, i))
|
| flds += print_record_field_types (TYPE_FIELD_TYPE (type, i), type,
|
| - stream, show, level);
|
| + stream, show, level, flags);
|
| else if (ada_is_variant_part (type, i))
|
| {
|
| - print_variant_part (type, i, outer_type, stream, show, level);
|
| + print_variant_part (type, i, outer_type, stream, show, level, flags);
|
| flds = 1;
|
| }
|
| else
|
| @@ -585,7 +591,7 @@ print_selected_record_field_types (struct type *type, struct type *outer_type,
|
| fprintf_filtered (stream, "\n%*s", level + 4, "");
|
| ada_print_type (TYPE_FIELD_TYPE (type, i),
|
| TYPE_FIELD_NAME (type, i),
|
| - stream, show - 1, level + 4);
|
| + stream, show - 1, level + 4, flags);
|
| fprintf_filtered (stream, ";");
|
| }
|
| }
|
| @@ -598,11 +604,12 @@ print_selected_record_field_types (struct type *type, struct type *outer_type,
|
|
|
| static int
|
| print_record_field_types (struct type *type, struct type *outer_type,
|
| - struct ui_file *stream, int show, int level)
|
| + struct ui_file *stream, int show, int level,
|
| + const struct type_print_options *flags)
|
| {
|
| return print_selected_record_field_types (type, outer_type,
|
| 0, TYPE_NFIELDS (type) - 1,
|
| - stream, show, level);
|
| + stream, show, level, flags);
|
| }
|
|
|
|
|
| @@ -612,7 +619,7 @@ print_record_field_types (struct type *type, struct type *outer_type,
|
|
|
| static void
|
| print_record_type (struct type *type0, struct ui_file *stream, int show,
|
| - int level)
|
| + int level, const struct type_print_options *flags)
|
| {
|
| struct type *parent_type;
|
| struct type *type;
|
| @@ -648,8 +655,9 @@ print_record_type (struct type *type0, struct ui_file *stream, int show,
|
| flds = 0;
|
| if (parent_type != NULL && ada_type_name (parent_type) == NULL)
|
| flds += print_record_field_types (parent_type, parent_type,
|
| - stream, show, level);
|
| - flds += print_record_field_types (type, type, stream, show, level);
|
| + stream, show, level, flags);
|
| + flds += print_record_field_types (type, type, stream, show, level,
|
| + flags);
|
|
|
| if (flds > 0)
|
| fprintf_filtered (stream, "\n%*send record", level, "");
|
| @@ -666,7 +674,8 @@ print_record_type (struct type *type0, struct ui_file *stream, int show,
|
| number of levels of internal structure to show (see ada_print_type). */
|
| static void
|
| print_unchecked_union_type (struct type *type, struct ui_file *stream,
|
| - int show, int level)
|
| + int show, int level,
|
| + const struct type_print_options *flags)
|
| {
|
| if (show < 0)
|
| fprintf_filtered (stream, "record (?) is ... end record");
|
| @@ -684,7 +693,7 @@ print_unchecked_union_type (struct type *type, struct ui_file *stream,
|
| level + 12, "");
|
| ada_print_type (TYPE_FIELD_TYPE (type, i),
|
| TYPE_FIELD_NAME (type, i),
|
| - stream, show - 1, level + 12);
|
| + stream, show - 1, level + 12, flags);
|
| fprintf_filtered (stream, ";");
|
| }
|
|
|
| @@ -699,7 +708,8 @@ print_unchecked_union_type (struct type *type, struct ui_file *stream,
|
| for function or procedure NAME if NAME is not null. */
|
|
|
| static void
|
| -print_func_type (struct type *type, struct ui_file *stream, const char *name)
|
| +print_func_type (struct type *type, struct ui_file *stream, const char *name,
|
| + const struct type_print_options *flags)
|
| {
|
| int i, len = TYPE_NFIELDS (type);
|
|
|
| @@ -722,7 +732,8 @@ print_func_type (struct type *type, struct ui_file *stream, const char *name)
|
| wrap_here (" ");
|
| }
|
| fprintf_filtered (stream, "a%d: ", i + 1);
|
| - ada_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0);
|
| + ada_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0,
|
| + flags);
|
| }
|
| fprintf_filtered (stream, ")");
|
| }
|
| @@ -730,7 +741,7 @@ print_func_type (struct type *type, struct ui_file *stream, const char *name)
|
| if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
|
| {
|
| fprintf_filtered (stream, " return ");
|
| - ada_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0);
|
| + ada_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0, flags);
|
| }
|
| }
|
|
|
| @@ -750,7 +761,8 @@ print_func_type (struct type *type, struct ui_file *stream, const char *name)
|
|
|
| void
|
| ada_print_type (struct type *type0, const char *varstring,
|
| - struct ui_file *stream, int show, int level)
|
| + struct ui_file *stream, int show, int level,
|
| + const struct type_print_options *flags)
|
| {
|
| struct type *type = ada_check_typedef (ada_get_base_type (type0));
|
| char *type_name = decoded_type_name (type0);
|
| @@ -780,29 +792,31 @@ ada_print_type (struct type *type0, const char *varstring,
|
| }
|
|
|
| if (ada_is_aligner_type (type))
|
| - ada_print_type (ada_aligned_type (type), "", stream, show, level);
|
| + ada_print_type (ada_aligned_type (type), "", stream, show, level, flags);
|
| else if (ada_is_constrained_packed_array_type (type)
|
| && TYPE_CODE (type) != TYPE_CODE_PTR)
|
| - print_array_type (type, stream, show, level);
|
| + print_array_type (type, stream, show, level, flags);
|
| else
|
| switch (TYPE_CODE (type))
|
| {
|
| default:
|
| fprintf_filtered (stream, "<");
|
| - c_print_type (type, "", stream, show, level);
|
| + c_print_type (type, "", stream, show, level, flags);
|
| fprintf_filtered (stream, ">");
|
| break;
|
| case TYPE_CODE_PTR:
|
| case TYPE_CODE_TYPEDEF:
|
| fprintf_filtered (stream, "access ");
|
| - ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level);
|
| + ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
|
| + flags);
|
| break;
|
| case TYPE_CODE_REF:
|
| fprintf_filtered (stream, "<ref> ");
|
| - ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level);
|
| + ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
|
| + flags);
|
| break;
|
| case TYPE_CODE_ARRAY:
|
| - print_array_type (type, stream, show, level);
|
| + print_array_type (type, stream, show, level, flags);
|
| break;
|
| case TYPE_CODE_BOOL:
|
| fprintf_filtered (stream, "(false, true)");
|
| @@ -847,18 +861,18 @@ ada_print_type (struct type *type0, const char *varstring,
|
| break;
|
| case TYPE_CODE_STRUCT:
|
| if (ada_is_array_descriptor_type (type))
|
| - print_array_type (type, stream, show, level);
|
| + print_array_type (type, stream, show, level, flags);
|
| else if (ada_is_bogus_array_descriptor (type))
|
| fprintf_filtered (stream,
|
| _("array (?) of ? (<mal-formed descriptor>)"));
|
| else
|
| - print_record_type (type, stream, show, level);
|
| + print_record_type (type, stream, show, level, flags);
|
| break;
|
| case TYPE_CODE_UNION:
|
| - print_unchecked_union_type (type, stream, show, level);
|
| + print_unchecked_union_type (type, stream, show, level, flags);
|
| break;
|
| case TYPE_CODE_FUNC:
|
| - print_func_type (type, stream, varstring);
|
| + print_func_type (type, stream, varstring, flags);
|
| break;
|
| }
|
| }
|
| @@ -870,6 +884,6 @@ ada_print_typedef (struct type *type, struct symbol *new_symbol,
|
| struct ui_file *stream)
|
| {
|
| type = ada_check_typedef (type);
|
| - ada_print_type (type, "", stream, 0, 0);
|
| + ada_print_type (type, "", stream, 0, 0, &type_print_raw_options);
|
| fprintf_filtered (stream, "\n");
|
| }
|
|
|