Automatic date update in version.in
[binutils-gdb/blckswan.git] / gdb / ada-typeprint.c
blob05ffb8b833137e29528bdecac640bf75f5665bde
1 /* Support for printing Ada types for GDB, the GNU debugger.
2 Copyright (C) 1986-2022 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 #include "defs.h"
20 #include "bfd.h" /* Binary File Description */
21 #include "gdbtypes.h"
22 #include "value.h"
23 #include "c-lang.h"
24 #include "cli/cli-style.h"
25 #include "typeprint.h"
26 #include "target-float.h"
27 #include "ada-lang.h"
28 #include <ctype.h>
30 static int print_selected_record_field_types (struct type *, struct type *,
31 int, int,
32 struct ui_file *, int, int,
33 const struct type_print_options *);
35 static int print_record_field_types (struct type *, struct type *,
36 struct ui_file *, int, int,
37 const struct type_print_options *);
41 static char *name_buffer;
42 static int name_buffer_len;
44 /* The (decoded) Ada name of TYPE. This value persists until the
45 next call. */
47 static char *
48 decoded_type_name (struct type *type)
50 if (ada_type_name (type) == NULL)
51 return NULL;
52 else
54 const char *raw_name = ada_type_name (type);
55 char *s, *q;
57 if (name_buffer == NULL || name_buffer_len <= strlen (raw_name))
59 name_buffer_len = 16 + 2 * strlen (raw_name);
60 name_buffer = (char *) xrealloc (name_buffer, name_buffer_len);
62 strcpy (name_buffer, raw_name);
64 s = (char *) strstr (name_buffer, "___");
65 if (s != NULL)
66 *s = '\0';
68 s = name_buffer + strlen (name_buffer) - 1;
69 while (s > name_buffer && (s[0] != '_' || s[-1] != '_'))
70 s -= 1;
72 if (s == name_buffer)
73 return name_buffer;
75 if (!islower (s[1]))
76 return NULL;
78 for (s = q = name_buffer; *s != '\0'; q += 1)
80 if (s[0] == '_' && s[1] == '_')
82 *q = '.';
83 s += 2;
85 else
87 *q = *s;
88 s += 1;
91 *q = '\0';
92 return name_buffer;
96 /* Return nonzero if TYPE is a subrange type, and its bounds
97 are identical to the bounds of its subtype. */
99 static int
100 type_is_full_subrange_of_target_type (struct type *type)
102 struct type *subtype;
104 if (type->code () != TYPE_CODE_RANGE)
105 return 0;
107 subtype = TYPE_TARGET_TYPE (type);
108 if (subtype == NULL)
109 return 0;
111 if (is_dynamic_type (type))
112 return 0;
114 if (ada_discrete_type_low_bound (type)
115 != ada_discrete_type_low_bound (subtype))
116 return 0;
118 if (ada_discrete_type_high_bound (type)
119 != ada_discrete_type_high_bound (subtype))
120 return 0;
122 return 1;
125 /* Print TYPE on STREAM, preferably as a range if BOUNDS_PREFERED_P
126 is nonzero. */
128 static void
129 print_range (struct type *type, struct ui_file *stream,
130 int bounds_prefered_p)
132 if (!bounds_prefered_p)
134 /* Try stripping all TYPE_CODE_RANGE layers whose bounds
135 are identical to the bounds of their subtype. When
136 the bounds of both types match, it can allow us to
137 print a range using the name of its base type, which
138 is easier to read. For instance, we would print...
140 array (character) of ...
142 ... instead of...
144 array ('["00"]' .. '["ff"]') of ... */
145 while (type_is_full_subrange_of_target_type (type))
146 type = TYPE_TARGET_TYPE (type);
149 switch (type->code ())
151 case TYPE_CODE_RANGE:
152 case TYPE_CODE_ENUM:
154 LONGEST lo = 0, hi = 0; /* init for gcc -Wall */
155 int got_error = 0;
159 lo = ada_discrete_type_low_bound (type);
160 hi = ada_discrete_type_high_bound (type);
162 catch (const gdb_exception_error &e)
164 /* This can happen when the range is dynamic. Sometimes,
165 resolving dynamic property values requires us to have
166 access to an actual object, which is not available
167 when the user is using the "ptype" command on a type.
168 Print the range as an unbounded range. */
169 gdb_printf (stream, "<>");
170 got_error = 1;
173 if (!got_error)
175 ada_print_scalar (type, lo, stream);
176 gdb_printf (stream, " .. ");
177 ada_print_scalar (type, hi, stream);
180 break;
181 default:
182 gdb_printf (stream, "%.*s",
183 ada_name_prefix_len (type->name ()),
184 type->name ());
185 break;
189 /* Print the number or discriminant bound at BOUNDS+*N on STREAM, and
190 set *N past the bound and its delimiter, if any. */
192 static void
193 print_range_bound (struct type *type, const char *bounds, int *n,
194 struct ui_file *stream)
196 LONGEST B;
198 if (ada_scan_number (bounds, *n, &B, n))
200 /* STABS decodes all range types which bounds are 0 .. -1 as
201 unsigned integers (ie. the type code is TYPE_CODE_INT, not
202 TYPE_CODE_RANGE). Unfortunately, ada_print_scalar() relies
203 on the unsigned flag to determine whether the bound should
204 be printed as a signed or an unsigned value. This causes
205 the upper bound of the 0 .. -1 range types to be printed as
206 a very large unsigned number instead of -1.
207 To workaround this stabs deficiency, we replace the TYPE by NULL
208 to indicate default output when we detect that the bound is negative,
209 and the type is a TYPE_CODE_INT. The bound is negative when
210 'm' is the last character of the number scanned in BOUNDS. */
211 if (bounds[*n - 1] == 'm' && type->code () == TYPE_CODE_INT)
212 type = NULL;
213 ada_print_scalar (type, B, stream);
214 if (bounds[*n] == '_')
215 *n += 2;
217 else
219 int bound_len;
220 const char *bound = bounds + *n;
221 const char *pend;
223 pend = strstr (bound, "__");
224 if (pend == NULL)
225 *n += bound_len = strlen (bound);
226 else
228 bound_len = pend - bound;
229 *n += bound_len + 2;
231 gdb_printf (stream, "%.*s", bound_len, bound);
235 /* Assuming NAME[0 .. NAME_LEN-1] is the name of a range type, print
236 the value (if found) of the bound indicated by SUFFIX ("___L" or
237 "___U") according to the ___XD conventions. */
239 static void
240 print_dynamic_range_bound (struct type *type, const char *name, int name_len,
241 const char *suffix, struct ui_file *stream)
243 LONGEST B;
244 std::string name_buf (name, name_len);
245 name_buf += suffix;
247 if (get_int_var_value (name_buf.c_str (), B))
248 ada_print_scalar (type, B, stream);
249 else
250 gdb_printf (stream, "?");
253 /* Print RAW_TYPE as a range type, using any bound information
254 following the GNAT encoding (if available).
256 If BOUNDS_PREFERED_P is nonzero, force the printing of the range
257 using its bounds. Otherwise, try printing the range without
258 printing the value of the bounds, if possible (this is only
259 considered a hint, not a guaranty). */
261 static void
262 print_range_type (struct type *raw_type, struct ui_file *stream,
263 int bounds_prefered_p)
265 const char *name;
266 struct type *base_type;
267 const char *subtype_info;
269 gdb_assert (raw_type != NULL);
270 name = raw_type->name ();
271 gdb_assert (name != NULL);
273 if (raw_type->code () == TYPE_CODE_RANGE)
274 base_type = TYPE_TARGET_TYPE (raw_type);
275 else
276 base_type = raw_type;
278 subtype_info = strstr (name, "___XD");
279 if (subtype_info == NULL)
280 print_range (raw_type, stream, bounds_prefered_p);
281 else
283 int prefix_len = subtype_info - name;
284 const char *bounds_str;
285 int n;
287 subtype_info += 5;
288 bounds_str = strchr (subtype_info, '_');
289 n = 1;
291 if (*subtype_info == 'L')
293 print_range_bound (base_type, bounds_str, &n, stream);
294 subtype_info += 1;
296 else
297 print_dynamic_range_bound (base_type, name, prefix_len, "___L",
298 stream);
300 gdb_printf (stream, " .. ");
302 if (*subtype_info == 'U')
303 print_range_bound (base_type, bounds_str, &n, stream);
304 else
305 print_dynamic_range_bound (base_type, name, prefix_len, "___U",
306 stream);
310 /* Print enumerated type TYPE on STREAM. */
312 static void
313 print_enum_type (struct type *type, struct ui_file *stream)
315 int len = type->num_fields ();
316 int i;
317 LONGEST lastval;
319 gdb_printf (stream, "(");
320 stream->wrap_here (1);
322 lastval = 0;
323 for (i = 0; i < len; i++)
325 QUIT;
326 if (i)
327 gdb_printf (stream, ", ");
328 stream->wrap_here (4);
329 fputs_styled (ada_enum_name (type->field (i).name ()),
330 variable_name_style.style (), stream);
331 if (lastval != type->field (i).loc_enumval ())
333 gdb_printf (stream, " => %s",
334 plongest (type->field (i).loc_enumval ()));
335 lastval = type->field (i).loc_enumval ();
337 lastval += 1;
339 gdb_printf (stream, ")");
342 /* Print simple (constrained) array type TYPE on STREAM. LEVEL is the
343 recursion (indentation) level, in case the element type itself has
344 nested structure, and SHOW is the number of levels of internal
345 structure to show (see ada_print_type). */
347 static void
348 print_array_type (struct type *type, struct ui_file *stream, int show,
349 int level, const struct type_print_options *flags)
351 int bitsize;
352 int n_indices;
353 struct type *elt_type = NULL;
355 if (ada_is_constrained_packed_array_type (type))
356 type = ada_coerce_to_simple_array_type (type);
358 bitsize = 0;
359 gdb_printf (stream, "array (");
361 if (type == NULL)
363 fprintf_styled (stream, metadata_style.style (),
364 _("<undecipherable array type>"));
365 return;
368 n_indices = -1;
369 if (ada_is_simple_array_type (type))
371 struct type *range_desc_type;
372 struct type *arr_type;
374 range_desc_type = ada_find_parallel_type (type, "___XA");
375 ada_fixup_array_indexes_type (range_desc_type);
377 bitsize = 0;
378 if (range_desc_type == NULL)
380 for (arr_type = type; arr_type->code () == TYPE_CODE_ARRAY;
381 arr_type = TYPE_TARGET_TYPE (arr_type))
383 if (arr_type != type)
384 gdb_printf (stream, ", ");
385 print_range (arr_type->index_type (), stream,
386 0 /* bounds_prefered_p */);
387 if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
388 bitsize = TYPE_FIELD_BITSIZE (arr_type, 0);
391 else
393 int k;
395 n_indices = range_desc_type->num_fields ();
396 for (k = 0, arr_type = type;
397 k < n_indices;
398 k += 1, arr_type = TYPE_TARGET_TYPE (arr_type))
400 if (k > 0)
401 gdb_printf (stream, ", ");
402 print_range_type (range_desc_type->field (k).type (),
403 stream, 0 /* bounds_prefered_p */);
404 if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
405 bitsize = TYPE_FIELD_BITSIZE (arr_type, 0);
409 else
411 int i, i0;
413 for (i = i0 = ada_array_arity (type); i > 0; i -= 1)
414 gdb_printf (stream, "%s<>", i == i0 ? "" : ", ");
417 elt_type = ada_array_element_type (type, n_indices);
418 gdb_printf (stream, ") of ");
419 stream->wrap_here (0);
420 ada_print_type (elt_type, "", stream, show == 0 ? 0 : show - 1, level + 1,
421 flags);
422 /* Arrays with variable-length elements are never bit-packed in practice but
423 compilers have to describe their stride so that we can properly fetch
424 individual elements. Do not say the array is packed in this case. */
425 if (bitsize > 0 && !is_dynamic_type (elt_type))
426 gdb_printf (stream, " <packed: %d-bit elements>", bitsize);
429 /* Print the choices encoded by field FIELD_NUM of variant-part TYPE on
430 STREAM, assuming that VAL_TYPE (if non-NULL) is the type of the
431 values. Return non-zero if the field is an encoding of
432 discriminant values, as in a standard variant record, and 0 if the
433 field is not so encoded (as happens with single-component variants
434 in types annotated with pragma Unchecked_Union). */
436 static int
437 print_choices (struct type *type, int field_num, struct ui_file *stream,
438 struct type *val_type)
440 int have_output;
441 int p;
442 const char *name = type->field (field_num).name ();
444 have_output = 0;
446 /* Skip over leading 'V': NOTE soon to be obsolete. */
447 if (name[0] == 'V')
449 if (!ada_scan_number (name, 1, NULL, &p))
450 goto Huh;
452 else
453 p = 0;
455 while (1)
457 switch (name[p])
459 default:
460 goto Huh;
461 case '_':
462 case '\0':
463 gdb_printf (stream, " =>");
464 return 1;
465 case 'S':
466 case 'R':
467 case 'O':
468 if (have_output)
469 gdb_printf (stream, " | ");
470 have_output = 1;
471 break;
474 switch (name[p])
476 case 'S':
478 LONGEST W;
480 if (!ada_scan_number (name, p + 1, &W, &p))
481 goto Huh;
482 ada_print_scalar (val_type, W, stream);
483 break;
485 case 'R':
487 LONGEST L, U;
489 if (!ada_scan_number (name, p + 1, &L, &p)
490 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
491 goto Huh;
492 ada_print_scalar (val_type, L, stream);
493 gdb_printf (stream, " .. ");
494 ada_print_scalar (val_type, U, stream);
495 break;
497 case 'O':
498 gdb_printf (stream, "others");
499 p += 1;
500 break;
504 Huh:
505 gdb_printf (stream, "? =>");
506 return 0;
509 /* A helper for print_variant_clauses that prints the members of
510 VAR_TYPE. DISCR_TYPE is the type of the discriminant (or nullptr
511 if not available). The discriminant is contained in OUTER_TYPE.
512 STREAM, LEVEL, SHOW, and FLAGS are the same as for
513 ada_print_type. */
515 static void
516 print_variant_clauses (struct type *var_type, struct type *discr_type,
517 struct type *outer_type, struct ui_file *stream,
518 int show, int level,
519 const struct type_print_options *flags)
521 for (int i = 0; i < var_type->num_fields (); i += 1)
523 gdb_printf (stream, "\n%*swhen ", level, "");
524 if (print_choices (var_type, i, stream, discr_type))
526 if (print_record_field_types (var_type->field (i).type (),
527 outer_type, stream, show, level,
528 flags)
529 <= 0)
530 gdb_printf (stream, " null;");
532 else
533 print_selected_record_field_types (var_type, outer_type, i, i,
534 stream, show, level, flags);
538 /* Assuming that field FIELD_NUM of TYPE represents variants whose
539 discriminant is contained in OUTER_TYPE, print its components on STREAM.
540 LEVEL is the recursion (indentation) level, in case any of the fields
541 themselves have nested structure, and SHOW is the number of levels of
542 internal structure to show (see ada_print_type). For this purpose,
543 fields nested in a variant part are taken to be at the same level as
544 the fields immediately outside the variant part. */
546 static void
547 print_variant_clauses (struct type *type, int field_num,
548 struct type *outer_type, struct ui_file *stream,
549 int show, int level,
550 const struct type_print_options *flags)
552 struct type *var_type, *par_type;
553 struct type *discr_type;
555 var_type = type->field (field_num).type ();
556 discr_type = ada_variant_discrim_type (var_type, outer_type);
558 if (var_type->code () == TYPE_CODE_PTR)
560 var_type = TYPE_TARGET_TYPE (var_type);
561 if (var_type == NULL || var_type->code () != TYPE_CODE_UNION)
562 return;
565 par_type = ada_find_parallel_type (var_type, "___XVU");
566 if (par_type != NULL)
567 var_type = par_type;
569 print_variant_clauses (var_type, discr_type, outer_type, stream, show,
570 level + 4, flags);
573 /* Assuming that field FIELD_NUM of TYPE is a variant part whose
574 discriminants are contained in OUTER_TYPE, print a description of it
575 on STREAM. LEVEL is the recursion (indentation) level, in case any of
576 the fields themselves have nested structure, and SHOW is the number of
577 levels of internal structure to show (see ada_print_type). For this
578 purpose, fields nested in a variant part are taken to be at the same
579 level as the fields immediately outside the variant part. */
581 static void
582 print_variant_part (struct type *type, int field_num, struct type *outer_type,
583 struct ui_file *stream, int show, int level,
584 const struct type_print_options *flags)
586 const char *variant
587 = ada_variant_discrim_name (type->field (field_num).type ());
588 if (*variant == '\0')
589 variant = "?";
591 gdb_printf (stream, "\n%*scase %s is", level + 4, "", variant);
592 print_variant_clauses (type, field_num, outer_type, stream, show,
593 level + 4, flags);
594 gdb_printf (stream, "\n%*send case;", level + 4, "");
597 /* Print a description on STREAM of the fields FLD0 through FLD1 in
598 record or union type TYPE, whose discriminants are in OUTER_TYPE.
599 LEVEL is the recursion (indentation) level, in case any of the
600 fields themselves have nested structure, and SHOW is the number of
601 levels of internal structure to show (see ada_print_type). Does
602 not print parent type information of TYPE. Returns 0 if no fields
603 printed, -1 for an incomplete type, else > 0. Prints each field
604 beginning on a new line, but does not put a new line at end. */
606 static int
607 print_selected_record_field_types (struct type *type, struct type *outer_type,
608 int fld0, int fld1,
609 struct ui_file *stream, int show, int level,
610 const struct type_print_options *flags)
612 int i, flds;
614 flds = 0;
616 if (fld0 > fld1 && type->is_stub ())
617 return -1;
619 for (i = fld0; i <= fld1; i += 1)
621 QUIT;
623 if (ada_is_parent_field (type, i) || ada_is_ignored_field (type, i))
625 else if (ada_is_wrapper_field (type, i))
626 flds += print_record_field_types (type->field (i).type (), type,
627 stream, show, level, flags);
628 else if (ada_is_variant_part (type, i))
630 print_variant_part (type, i, outer_type, stream, show, level, flags);
631 flds = 1;
633 else
635 flds += 1;
636 gdb_printf (stream, "\n%*s", level + 4, "");
637 ada_print_type (type->field (i).type (),
638 type->field (i).name (),
639 stream, show - 1, level + 4, flags);
640 gdb_printf (stream, ";");
644 return flds;
647 static void print_record_field_types_dynamic
648 (const gdb::array_view<variant_part> &parts,
649 int from, int to, struct type *type, struct ui_file *stream,
650 int show, int level, const struct type_print_options *flags);
652 /* Print the choices encoded by VARIANT on STREAM. LEVEL is the
653 indentation level. The type of the discriminant for VARIANT is
654 given by DISR_TYPE. */
656 static void
657 print_choices (struct type *discr_type, const variant &variant,
658 struct ui_file *stream, int level)
660 gdb_printf (stream, "\n%*swhen ", level, "");
661 if (variant.is_default ())
662 gdb_printf (stream, "others");
663 else
665 bool first = true;
666 for (const discriminant_range &range : variant.discriminants)
668 if (!first)
669 gdb_printf (stream, " | ");
670 first = false;
672 ada_print_scalar (discr_type, range.low, stream);
673 if (range.low != range.high)
674 ada_print_scalar (discr_type, range.high, stream);
678 gdb_printf (stream, " =>");
681 /* Print a single variant part, PART, on STREAM. TYPE is the
682 enclosing type. SHOW, LEVEL, and FLAGS are the usual type-printing
683 settings. This prints information about PART and the fields it
684 controls. It returns the index of the next field that should be
685 shown -- that is, one after the last field printed by this
686 call. */
688 static int
689 print_variant_part (const variant_part &part,
690 struct type *type, struct ui_file *stream,
691 int show, int level,
692 const struct type_print_options *flags)
694 struct type *discr_type = nullptr;
695 const char *name;
696 if (part.discriminant_index == -1)
697 name = "?";
698 else
700 name = type->field (part.discriminant_index).name ();;
701 discr_type = type->field (part.discriminant_index).type ();
704 gdb_printf (stream, "\n%*scase %s is", level + 4, "", name);
706 int last_field = -1;
707 for (const variant &variant : part.variants)
709 print_choices (discr_type, variant, stream, level + 8);
711 if (variant.first_field == variant.last_field)
712 gdb_printf (stream, " null;");
713 else
715 print_record_field_types_dynamic (variant.parts,
716 variant.first_field,
717 variant.last_field, type, stream,
718 show, level + 8, flags);
719 last_field = variant.last_field;
723 gdb_printf (stream, "\n%*send case;", level + 4, "");
725 return last_field;
728 /* Print some fields of TYPE to STREAM. SHOW, LEVEL, and FLAGS are
729 the usual type-printing settings. PARTS is the array of variant
730 parts that correspond to the range of fields to be printed. FROM
731 and TO are the range of fields to print. */
733 static void
734 print_record_field_types_dynamic (const gdb::array_view<variant_part> &parts,
735 int from, int to,
736 struct type *type, struct ui_file *stream,
737 int show, int level,
738 const struct type_print_options *flags)
740 int field = from;
742 for (const variant_part &part : parts)
744 if (part.variants.empty ())
745 continue;
747 /* Print any non-varying fields. */
748 int first_varying = part.variants[0].first_field;
749 print_selected_record_field_types (type, type, field,
750 first_varying - 1, stream,
751 show, level, flags);
753 field = print_variant_part (part, type, stream, show, level, flags);
756 /* Print any trailing fields that we were asked to print. */
757 print_selected_record_field_types (type, type, field, to - 1, stream, show,
758 level, flags);
761 /* Print a description on STREAM of all fields of record or union type
762 TYPE, as for print_selected_record_field_types, above. */
764 static int
765 print_record_field_types (struct type *type, struct type *outer_type,
766 struct ui_file *stream, int show, int level,
767 const struct type_print_options *flags)
769 struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
770 if (prop != nullptr)
772 if (prop->kind () == PROP_TYPE)
774 type = prop->original_type ();
775 prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
777 gdb_assert (prop->kind () == PROP_VARIANT_PARTS);
778 print_record_field_types_dynamic (*prop->variant_parts (),
779 0, type->num_fields (),
780 type, stream, show, level, flags);
781 return type->num_fields ();
784 return print_selected_record_field_types (type, outer_type,
785 0, type->num_fields () - 1,
786 stream, show, level, flags);
790 /* Print record type TYPE on STREAM. LEVEL is the recursion (indentation)
791 level, in case the element type itself has nested structure, and SHOW is
792 the number of levels of internal structure to show (see ada_print_type). */
794 static void
795 print_record_type (struct type *type0, struct ui_file *stream, int show,
796 int level, const struct type_print_options *flags)
798 struct type *parent_type;
799 struct type *type;
801 type = ada_find_parallel_type (type0, "___XVE");
802 if (type == NULL)
803 type = type0;
805 parent_type = ada_parent_type (type);
806 if (ada_type_name (parent_type) != NULL)
808 const char *parent_name = decoded_type_name (parent_type);
810 /* If we fail to decode the parent type name, then use the parent
811 type name as is. Not pretty, but should never happen except
812 when the debugging info is incomplete or incorrect. This
813 prevents a crash trying to print a NULL pointer. */
814 if (parent_name == NULL)
815 parent_name = ada_type_name (parent_type);
816 gdb_printf (stream, "new %s with record", parent_name);
818 else if (parent_type == NULL && ada_is_tagged_type (type, 0))
819 gdb_printf (stream, "tagged record");
820 else
821 gdb_printf (stream, "record");
823 if (show < 0)
824 gdb_printf (stream, " ... end record");
825 else
827 int flds;
829 flds = 0;
830 if (parent_type != NULL && ada_type_name (parent_type) == NULL)
831 flds += print_record_field_types (parent_type, parent_type,
832 stream, show, level, flags);
833 flds += print_record_field_types (type, type, stream, show, level,
834 flags);
836 if (flds > 0)
837 gdb_printf (stream, "\n%*send record", level, "");
838 else if (flds < 0)
839 gdb_printf (stream, _(" <incomplete type> end record"));
840 else
841 gdb_printf (stream, " null; end record");
845 /* Print the unchecked union type TYPE in something resembling Ada
846 format on STREAM. LEVEL is the recursion (indentation) level
847 in case the element type itself has nested structure, and SHOW is the
848 number of levels of internal structure to show (see ada_print_type). */
849 static void
850 print_unchecked_union_type (struct type *type, struct ui_file *stream,
851 int show, int level,
852 const struct type_print_options *flags)
854 if (show < 0)
855 gdb_printf (stream, "record (?) is ... end record");
856 else if (type->num_fields () == 0)
857 gdb_printf (stream, "record (?) is null; end record");
858 else
860 gdb_printf (stream, "record (?) is\n%*scase ? is", level + 4, "");
862 print_variant_clauses (type, nullptr, type, stream, show, level + 8, flags);
864 gdb_printf (stream, "\n%*send case;\n%*send record",
865 level + 4, "", level, "");
871 /* Print function or procedure type TYPE on STREAM. Make it a header
872 for function or procedure NAME if NAME is not null. */
874 static void
875 print_func_type (struct type *type, struct ui_file *stream, const char *name,
876 const struct type_print_options *flags)
878 int i, len = type->num_fields ();
880 if (TYPE_TARGET_TYPE (type) != NULL
881 && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_VOID)
882 gdb_printf (stream, "procedure");
883 else
884 gdb_printf (stream, "function");
886 if (name != NULL && name[0] != '\0')
888 gdb_puts (" ", stream);
889 fputs_styled (name, function_name_style.style (), stream);
892 if (len > 0)
894 gdb_printf (stream, " (");
895 for (i = 0; i < len; i += 1)
897 if (i > 0)
899 gdb_puts ("; ", stream);
900 stream->wrap_here (4);
902 gdb_printf (stream, "a%d: ", i + 1);
903 ada_print_type (type->field (i).type (), "", stream, -1, 0,
904 flags);
906 gdb_printf (stream, ")");
909 if (TYPE_TARGET_TYPE (type) == NULL)
910 gdb_printf (stream, " return <unknown return type>");
911 else if (TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
913 gdb_printf (stream, " return ");
914 ada_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0, flags);
919 /* Print a description of a type TYPE0.
920 Output goes to STREAM (via stdio).
921 If VARSTRING is a non-empty string, print as an Ada variable/field
922 declaration.
923 SHOW+1 is the maximum number of levels of internal type structure
924 to show (this applies to record types, enumerated types, and
925 array types).
926 SHOW is the number of levels of internal type structure to show
927 when there is a type name for the SHOWth deepest level (0th is
928 outer level).
929 When SHOW<0, no inner structure is shown.
930 LEVEL indicates level of recursion (for nested definitions). */
932 void
933 ada_print_type (struct type *type0, const char *varstring,
934 struct ui_file *stream, int show, int level,
935 const struct type_print_options *flags)
937 struct type *type = ada_check_typedef (ada_get_base_type (type0));
938 /* If we can decode the original type name, use it. However, there
939 are cases where the original type is an internally-generated type
940 with a name that can't be decoded (and whose encoded name might
941 not actually bear any relation to the type actually declared in
942 the sources). In that case, try using the name of the base type
943 in its place.
945 Note that we looked at the possibility of always using the name
946 of the base type. This does not always work, unfortunately, as
947 there are situations where it's the base type which has an
948 internally-generated name. */
949 const char *type_name = decoded_type_name (type0);
950 if (type_name == nullptr)
951 type_name = decoded_type_name (type);
952 int is_var_decl = (varstring != NULL && varstring[0] != '\0');
954 if (type == NULL)
956 if (is_var_decl)
957 gdb_printf (stream, "%.*s: ",
958 ada_name_prefix_len (varstring), varstring);
959 fprintf_styled (stream, metadata_style.style (), "<null type?>");
960 return;
963 if (is_var_decl && type->code () != TYPE_CODE_FUNC)
964 gdb_printf (stream, "%.*s: ",
965 ada_name_prefix_len (varstring), varstring);
967 if (type_name != NULL && show <= 0 && !ada_is_aligner_type (type))
969 gdb_printf (stream, "%.*s",
970 ada_name_prefix_len (type_name), type_name);
971 return;
974 if (ada_is_aligner_type (type))
975 ada_print_type (ada_aligned_type (type), "", stream, show, level, flags);
976 else if (ada_is_constrained_packed_array_type (type)
977 && type->code () != TYPE_CODE_PTR)
978 print_array_type (type, stream, show, level, flags);
979 else
980 switch (type->code ())
982 default:
983 gdb_printf (stream, "<");
984 c_print_type (type, "", stream, show, level, language_ada, flags);
985 gdb_printf (stream, ">");
986 break;
987 case TYPE_CODE_PTR:
988 case TYPE_CODE_TYPEDEF:
989 /* An __XVL field is not truly a pointer, so don't print
990 "access" in this case. */
991 if (type->code () != TYPE_CODE_PTR
992 || strstr (varstring, "___XVL") == nullptr)
993 gdb_printf (stream, "access ");
994 ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
995 flags);
996 break;
997 case TYPE_CODE_REF:
998 gdb_printf (stream, "<ref> ");
999 ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
1000 flags);
1001 break;
1002 case TYPE_CODE_ARRAY:
1003 print_array_type (type, stream, show, level, flags);
1004 break;
1005 case TYPE_CODE_BOOL:
1006 gdb_printf (stream, "(false, true)");
1007 break;
1008 case TYPE_CODE_INT:
1010 const char *name = ada_type_name (type);
1012 if (!ada_is_range_type_name (name))
1013 fprintf_styled (stream, metadata_style.style (),
1014 _("<%s-byte integer>"),
1015 pulongest (TYPE_LENGTH (type)));
1016 else
1018 gdb_printf (stream, "range ");
1019 print_range_type (type, stream, 1 /* bounds_prefered_p */);
1022 break;
1023 case TYPE_CODE_RANGE:
1024 if (is_fixed_point_type (type))
1026 gdb_printf (stream, "<");
1027 print_type_fixed_point (type, stream);
1028 gdb_printf (stream, ">");
1030 else if (ada_is_modular_type (type))
1031 gdb_printf (stream, "mod %s",
1032 int_string (ada_modulus (type), 10, 0, 0, 1));
1033 else
1035 gdb_printf (stream, "range ");
1036 print_range (type, stream, 1 /* bounds_prefered_p */);
1038 break;
1039 case TYPE_CODE_FLT:
1040 fprintf_styled (stream, metadata_style.style (),
1041 _("<%s-byte float>"),
1042 pulongest (TYPE_LENGTH (type)));
1043 break;
1044 case TYPE_CODE_ENUM:
1045 if (show < 0)
1046 gdb_printf (stream, "(...)");
1047 else
1048 print_enum_type (type, stream);
1049 break;
1050 case TYPE_CODE_STRUCT:
1051 if (ada_is_array_descriptor_type (type))
1052 print_array_type (type, stream, show, level, flags);
1053 else if (ada_is_bogus_array_descriptor (type))
1054 gdb_printf (stream,
1055 _("array (?) of ? (<mal-formed descriptor>)"));
1056 else
1057 print_record_type (type, stream, show, level, flags);
1058 break;
1059 case TYPE_CODE_UNION:
1060 print_unchecked_union_type (type, stream, show, level, flags);
1061 break;
1062 case TYPE_CODE_FUNC:
1063 print_func_type (type, stream, varstring, flags);
1064 break;
1068 /* Implement the la_print_typedef language method for Ada. */
1070 void
1071 ada_print_typedef (struct type *type, struct symbol *new_symbol,
1072 struct ui_file *stream)
1074 type = ada_check_typedef (type);
1075 ada_print_type (type, "", stream, 0, 0, &type_print_raw_options);