]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ada-typeprint.c
gdb: move a bunch of quit-related things to event-top.{c,h}
[thirdparty/binutils-gdb.git] / gdb / ada-typeprint.c
CommitLineData
14f9c5c9 1/* Support for printing Ada types for GDB, the GNU debugger.
1d506c26 2 Copyright (C) 1986-2024 Free Software Foundation, Inc.
14f9c5c9 3
a9762ec7 4 This file is part of GDB.
14f9c5c9 5
a9762ec7
JB
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.
14f9c5c9 10
a9762ec7
JB
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.
14f9c5c9 15
a9762ec7
JB
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/>. */
14f9c5c9 18
ef0f16cc 19#include "bfd.h"
e5dc0d5d 20#include "event-top.h"
4de283e4 21#include "gdbtypes.h"
4de283e4 22#include "value.h"
4de283e4
TT
23#include "c-lang.h"
24#include "cli/cli-style.h"
d55e5aa6 25#include "typeprint.h"
4de283e4
TT
26#include "target-float.h"
27#include "ada-lang.h"
28#include <ctype.h>
14f9c5c9 29
83e3a93c
PH
30static int print_selected_record_field_types (struct type *, struct type *,
31 int, int,
79d43c61
TT
32 struct ui_file *, int, int,
33 const struct type_print_options *);
aba02109 34
d2e4a39e 35static int print_record_field_types (struct type *, struct type *,
79d43c61
TT
36 struct ui_file *, int, int,
37 const struct type_print_options *);
14f9c5c9
AS
38\f
39
d2e4a39e
AS
40
41static char *name_buffer;
14f9c5c9
AS
42static int name_buffer_len;
43
4c4b4cd2
PH
44/* The (decoded) Ada name of TYPE. This value persists until the
45 next call. */
14f9c5c9 46
d2e4a39e 47static char *
4c4b4cd2 48decoded_type_name (struct type *type)
14f9c5c9
AS
49{
50 if (ada_type_name (type) == NULL)
51 return NULL;
d2e4a39e 52 else
14f9c5c9 53 {
0d5cff50 54 const char *raw_name = ada_type_name (type);
d2e4a39e 55 char *s, *q;
14f9c5c9
AS
56
57 if (name_buffer == NULL || name_buffer_len <= strlen (raw_name))
58 {
59 name_buffer_len = 16 + 2 * strlen (raw_name);
224c3ddb 60 name_buffer = (char *) xrealloc (name_buffer, name_buffer_len);
14f9c5c9
AS
61 }
62 strcpy (name_buffer, raw_name);
63
d2e4a39e 64 s = (char *) strstr (name_buffer, "___");
14f9c5c9
AS
65 if (s != NULL)
66 *s = '\0';
67
68 s = name_buffer + strlen (name_buffer) - 1;
69 while (s > name_buffer && (s[0] != '_' || s[-1] != '_'))
70 s -= 1;
71
72 if (s == name_buffer)
73 return name_buffer;
74
d2e4a39e 75 if (!islower (s[1]))
14f9c5c9
AS
76 return NULL;
77
78 for (s = q = name_buffer; *s != '\0'; q += 1)
79 {
80 if (s[0] == '_' && s[1] == '_')
81 {
d2e4a39e
AS
82 *q = '.';
83 s += 2;
14f9c5c9
AS
84 }
85 else
86 {
d2e4a39e
AS
87 *q = *s;
88 s += 1;
14f9c5c9
AS
89 }
90 }
91 *q = '\0';
92 return name_buffer;
93 }
94}
95
fb151210
JB
96/* Return nonzero if TYPE is a subrange type, and its bounds
97 are identical to the bounds of its subtype. */
98
99static int
100type_is_full_subrange_of_target_type (struct type *type)
101{
102 struct type *subtype;
103
78134374 104 if (type->code () != TYPE_CODE_RANGE)
fb151210
JB
105 return 0;
106
27710edb 107 subtype = type->target_type ();
fb151210
JB
108 if (subtype == NULL)
109 return 0;
110
950c97d8
JB
111 if (is_dynamic_type (type))
112 return 0;
113
fb151210
JB
114 if (ada_discrete_type_low_bound (type)
115 != ada_discrete_type_low_bound (subtype))
116 return 0;
117
118 if (ada_discrete_type_high_bound (type)
119 != ada_discrete_type_high_bound (subtype))
120 return 0;
121
122 return 1;
123}
124
6d280fed 125/* Print TYPE on STREAM, preferably as a range if BOUNDS_PREFERRED_P
fb151210 126 is nonzero. */
14f9c5c9
AS
127
128static void
fb151210 129print_range (struct type *type, struct ui_file *stream,
6d280fed 130 int bounds_preferred_p)
14f9c5c9 131{
6d280fed 132 if (!bounds_preferred_p)
fb151210
JB
133 {
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...
139
140 array (character) of ...
141
142 ... instead of...
143
144 array ('["00"]' .. '["ff"]') of ... */
145 while (type_is_full_subrange_of_target_type (type))
27710edb 146 type = type->target_type ();
fb151210
JB
147 }
148
78134374 149 switch (type->code ())
14f9c5c9
AS
150 {
151 case TYPE_CODE_RANGE:
14f9c5c9 152 case TYPE_CODE_ENUM:
43bbcdc2 153 {
ded4fc8f 154 LONGEST lo = 0, hi = 0; /* init for gcc -Wall */
492d29ea 155 int got_error = 0;
e62e21fd 156
a70b8144 157 try
950c97d8
JB
158 {
159 lo = ada_discrete_type_low_bound (type);
160 hi = ada_discrete_type_high_bound (type);
161 }
230d2906 162 catch (const gdb_exception_error &e)
950c97d8
JB
163 {
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. */
6cb06a8c 169 gdb_printf (stream, "<>");
492d29ea 170 got_error = 1;
950c97d8 171 }
492d29ea
PA
172
173 if (!got_error)
950c97d8 174 {
16b9eb7b 175 ada_print_scalar (type, lo, stream);
6cb06a8c 176 gdb_printf (stream, " .. ");
16b9eb7b 177 ada_print_scalar (type, hi, stream);
950c97d8 178 }
43bbcdc2 179 }
14f9c5c9
AS
180 break;
181 default:
6cb06a8c
TT
182 gdb_printf (stream, "%.*s",
183 ada_name_prefix_len (type->name ()),
184 type->name ());
43bbcdc2 185 break;
14f9c5c9
AS
186 }
187}
188
189/* Print the number or discriminant bound at BOUNDS+*N on STREAM, and
4c4b4cd2 190 set *N past the bound and its delimiter, if any. */
14f9c5c9
AS
191
192static void
e6a959d6 193print_range_bound (struct type *type, const char *bounds, int *n,
d2e4a39e 194 struct ui_file *stream)
14f9c5c9
AS
195{
196 LONGEST B;
5b4ee69b 197
14f9c5c9
AS
198 if (ada_scan_number (bounds, *n, &B, n))
199 {
4c4b4cd2 200 /* STABS decodes all range types which bounds are 0 .. -1 as
dda83cd7
SM
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. */
78134374 211 if (bounds[*n - 1] == 'm' && type->code () == TYPE_CODE_INT)
7c964f07 212 type = NULL;
14f9c5c9
AS
213 ada_print_scalar (type, B, stream);
214 if (bounds[*n] == '_')
215 *n += 2;
216 }
217 else
218 {
219 int bound_len;
e6a959d6
PA
220 const char *bound = bounds + *n;
221 const char *pend;
14f9c5c9
AS
222
223 pend = strstr (bound, "__");
224 if (pend == NULL)
225 *n += bound_len = strlen (bound);
d2e4a39e 226 else
14f9c5c9
AS
227 {
228 bound_len = pend - bound;
229 *n += bound_len + 2;
230 }
6cb06a8c 231 gdb_printf (stream, "%.*s", bound_len, bound);
14f9c5c9
AS
232 }
233}
234
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
4c4b4cd2 237 "___U") according to the ___XD conventions. */
14f9c5c9
AS
238
239static void
d2e4a39e
AS
240print_dynamic_range_bound (struct type *type, const char *name, int name_len,
241 const char *suffix, struct ui_file *stream)
14f9c5c9 242{
14f9c5c9 243 LONGEST B;
3ec5942f
SM
244 std::string name_buf (name, name_len);
245 name_buf += suffix;
14f9c5c9 246
3ec5942f 247 if (get_int_var_value (name_buf.c_str (), B))
14f9c5c9
AS
248 ada_print_scalar (type, B, stream);
249 else
6cb06a8c 250 gdb_printf (stream, "?");
14f9c5c9
AS
251}
252
28c85d6c 253/* Print RAW_TYPE as a range type, using any bound information
fb151210
JB
254 following the GNAT encoding (if available).
255
6d280fed 256 If BOUNDS_PREFERRED_P is nonzero, force the printing of the range
fb151210
JB
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). */
14f9c5c9
AS
260
261static void
fb151210 262print_range_type (struct type *raw_type, struct ui_file *stream,
6d280fed 263 int bounds_preferred_p)
14f9c5c9 264{
0d5cff50 265 const char *name;
14f9c5c9 266 struct type *base_type;
0d5cff50 267 const char *subtype_info;
14f9c5c9 268
28c85d6c 269 gdb_assert (raw_type != NULL);
7d93a1e0 270 name = raw_type->name ();
28c85d6c 271 gdb_assert (name != NULL);
1ce677a4 272
78134374 273 if (raw_type->code () == TYPE_CODE_RANGE)
27710edb 274 base_type = raw_type->target_type ();
14f9c5c9
AS
275 else
276 base_type = raw_type;
277
278 subtype_info = strstr (name, "___XD");
1ce677a4 279 if (subtype_info == NULL)
6d280fed 280 print_range (raw_type, stream, bounds_preferred_p);
14f9c5c9
AS
281 else
282 {
283 int prefix_len = subtype_info - name;
e6a959d6 284 const char *bounds_str;
14f9c5c9
AS
285 int n;
286
287 subtype_info += 5;
288 bounds_str = strchr (subtype_info, '_');
289 n = 1;
290
d2e4a39e 291 if (*subtype_info == 'L')
14f9c5c9 292 {
4c4b4cd2 293 print_range_bound (base_type, bounds_str, &n, stream);
14f9c5c9
AS
294 subtype_info += 1;
295 }
296 else
4c4b4cd2 297 print_dynamic_range_bound (base_type, name, prefix_len, "___L",
d2e4a39e 298 stream);
14f9c5c9 299
6cb06a8c 300 gdb_printf (stream, " .. ");
14f9c5c9 301
d2e4a39e 302 if (*subtype_info == 'U')
4c4b4cd2 303 print_range_bound (base_type, bounds_str, &n, stream);
14f9c5c9 304 else
4c4b4cd2 305 print_dynamic_range_bound (base_type, name, prefix_len, "___U",
d2e4a39e 306 stream);
14f9c5c9 307 }
d2e4a39e 308}
14f9c5c9 309
4c4b4cd2 310/* Print enumerated type TYPE on STREAM. */
14f9c5c9
AS
311
312static void
ebf56fd3 313print_enum_type (struct type *type, struct ui_file *stream)
14f9c5c9 314{
1f704f76 315 int len = type->num_fields ();
14e75d8e
JK
316 int i;
317 LONGEST lastval;
14f9c5c9 318
6cb06a8c 319 gdb_printf (stream, "(");
1285ce86 320 stream->wrap_here (1);
14f9c5c9
AS
321
322 lastval = 0;
323 for (i = 0; i < len; i++)
324 {
325 QUIT;
d2e4a39e 326 if (i)
6cb06a8c 327 gdb_printf (stream, ", ");
1285ce86 328 stream->wrap_here (4);
33d16dd9 329 fputs_styled (ada_enum_name (type->field (i).name ()),
3f0cbb04 330 variable_name_style.style (), stream);
970db518 331 if (lastval != type->field (i).loc_enumval ())
14f9c5c9 332 {
6cb06a8c
TT
333 gdb_printf (stream, " => %s",
334 plongest (type->field (i).loc_enumval ()));
970db518 335 lastval = type->field (i).loc_enumval ();
14f9c5c9
AS
336 }
337 lastval += 1;
338 }
6cb06a8c 339 gdb_printf (stream, ")");
14f9c5c9
AS
340}
341
4c4b4cd2
PH
342/* Print simple (constrained) array type TYPE on STREAM. LEVEL is the
343 recursion (indentation) level, in case the element type itself has
14f9c5c9 344 nested structure, and SHOW is the number of levels of internal
4c4b4cd2 345 structure to show (see ada_print_type). */
14f9c5c9
AS
346
347static void
d2e4a39e 348print_array_type (struct type *type, struct ui_file *stream, int show,
79d43c61 349 int level, const struct type_print_options *flags)
14f9c5c9
AS
350{
351 int bitsize;
352 int n_indices;
bfca584f 353 struct type *elt_type = NULL;
14f9c5c9 354
ad82864c 355 if (ada_is_constrained_packed_array_type (type))
727e3d2e
JB
356 type = ada_coerce_to_simple_array_type (type);
357
14f9c5c9 358 bitsize = 0;
6cb06a8c 359 gdb_printf (stream, "array (");
14f9c5c9 360
cb249c71
TT
361 if (type == NULL)
362 {
7f6aba03
TT
363 fprintf_styled (stream, metadata_style.style (),
364 _("<undecipherable array type>"));
cb249c71
TT
365 return;
366 }
367
14f9c5c9 368 n_indices = -1;
54ae186f 369 if (ada_is_simple_array_type (type))
14f9c5c9 370 {
54ae186f
JB
371 struct type *range_desc_type;
372 struct type *arr_type;
14f9c5c9 373
54ae186f
JB
374 range_desc_type = ada_find_parallel_type (type, "___XA");
375 ada_fixup_array_indexes_type (range_desc_type);
28c85d6c 376
54ae186f
JB
377 bitsize = 0;
378 if (range_desc_type == NULL)
379 {
6a40c6e4 380 for (arr_type = type; arr_type->code () == TYPE_CODE_ARRAY; )
14f9c5c9 381 {
54ae186f 382 if (arr_type != type)
6cb06a8c 383 gdb_printf (stream, ", ");
3d967001 384 print_range (arr_type->index_type (), stream,
6d280fed 385 0 /* bounds_preferred_p */);
3757d2d4
SM
386 if (arr_type->field (0).bitsize () > 0)
387 bitsize = arr_type->field (0).bitsize ();
6a40c6e4
TT
388 /* A multi-dimensional array is represented using a
389 sequence of array types. If one of these types has a
390 name, then it is not another dimension of the outer
391 array, but rather the element type of the outermost
392 array. */
27710edb 393 arr_type = arr_type->target_type ();
6a40c6e4
TT
394 if (arr_type->name () != nullptr)
395 break;
14f9c5c9
AS
396 }
397 }
d2e4a39e 398 else
14f9c5c9 399 {
54ae186f 400 int k;
5b4ee69b 401
1f704f76 402 n_indices = range_desc_type->num_fields ();
54ae186f
JB
403 for (k = 0, arr_type = type;
404 k < n_indices;
27710edb 405 k += 1, arr_type = arr_type->target_type ())
54ae186f
JB
406 {
407 if (k > 0)
6cb06a8c 408 gdb_printf (stream, ", ");
940da03e 409 print_range_type (range_desc_type->field (k).type (),
6d280fed 410 stream, 0 /* bounds_preferred_p */);
3757d2d4
SM
411 if (arr_type->field (0).bitsize () > 0)
412 bitsize = arr_type->field (0).bitsize ();
54ae186f 413 }
14f9c5c9
AS
414 }
415 }
54ae186f
JB
416 else
417 {
418 int i, i0;
419
420 for (i = i0 = ada_array_arity (type); i > 0; i -= 1)
6cb06a8c 421 gdb_printf (stream, "%s<>", i == i0 ? "" : ", ");
54ae186f 422 }
14f9c5c9 423
bfca584f 424 elt_type = ada_array_element_type (type, n_indices);
6cb06a8c 425 gdb_printf (stream, ") of ");
1285ce86 426 stream->wrap_here (0);
bfca584f
PMR
427 ada_print_type (elt_type, "", stream, show == 0 ? 0 : show - 1, level + 1,
428 flags);
429 /* Arrays with variable-length elements are never bit-packed in practice but
430 compilers have to describe their stride so that we can properly fetch
431 individual elements. Do not say the array is packed in this case. */
432 if (bitsize > 0 && !is_dynamic_type (elt_type))
6cb06a8c 433 gdb_printf (stream, " <packed: %d-bit elements>", bitsize);
14f9c5c9
AS
434}
435
436/* Print the choices encoded by field FIELD_NUM of variant-part TYPE on
83e3a93c 437 STREAM, assuming that VAL_TYPE (if non-NULL) is the type of the
feb864b7 438 values. Return non-zero if the field is an encoding of
83e3a93c
PH
439 discriminant values, as in a standard variant record, and 0 if the
440 field is not so encoded (as happens with single-component variants
e7a82140 441 in types annotated with pragma Unchecked_Union). */
14f9c5c9 442
83e3a93c 443static int
d2e4a39e
AS
444print_choices (struct type *type, int field_num, struct ui_file *stream,
445 struct type *val_type)
14f9c5c9
AS
446{
447 int have_output;
448 int p;
33d16dd9 449 const char *name = type->field (field_num).name ();
14f9c5c9
AS
450
451 have_output = 0;
452
4c4b4cd2 453 /* Skip over leading 'V': NOTE soon to be obsolete. */
14f9c5c9
AS
454 if (name[0] == 'V')
455 {
d2e4a39e 456 if (!ada_scan_number (name, 1, NULL, &p))
14f9c5c9
AS
457 goto Huh;
458 }
459 else
460 p = 0;
461
462 while (1)
463 {
d2e4a39e 464 switch (name[p])
14f9c5c9
AS
465 {
466 default:
83e3a93c
PH
467 goto Huh;
468 case '_':
469 case '\0':
6cb06a8c 470 gdb_printf (stream, " =>");
83e3a93c 471 return 1;
14f9c5c9
AS
472 case 'S':
473 case 'R':
474 case 'O':
d2e4a39e 475 if (have_output)
6cb06a8c 476 gdb_printf (stream, " | ");
14f9c5c9
AS
477 have_output = 1;
478 break;
479 }
480
d2e4a39e 481 switch (name[p])
14f9c5c9
AS
482 {
483 case 'S':
484 {
485 LONGEST W;
5b4ee69b 486
d2e4a39e 487 if (!ada_scan_number (name, p + 1, &W, &p))
14f9c5c9
AS
488 goto Huh;
489 ada_print_scalar (val_type, W, stream);
490 break;
491 }
492 case 'R':
493 {
494 LONGEST L, U;
5b4ee69b 495
d2e4a39e
AS
496 if (!ada_scan_number (name, p + 1, &L, &p)
497 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
14f9c5c9
AS
498 goto Huh;
499 ada_print_scalar (val_type, L, stream);
6cb06a8c 500 gdb_printf (stream, " .. ");
14f9c5c9
AS
501 ada_print_scalar (val_type, U, stream);
502 break;
503 }
504 case 'O':
6cb06a8c 505 gdb_printf (stream, "others");
14f9c5c9
AS
506 p += 1;
507 break;
508 }
509 }
510
511Huh:
6cb06a8c 512 gdb_printf (stream, "? =>");
83e3a93c 513 return 0;
14f9c5c9
AS
514}
515
48015786
TT
516/* A helper for print_variant_clauses that prints the members of
517 VAR_TYPE. DISCR_TYPE is the type of the discriminant (or nullptr
518 if not available). The discriminant is contained in OUTER_TYPE.
519 STREAM, LEVEL, SHOW, and FLAGS are the same as for
520 ada_print_type. */
521
522static void
523print_variant_clauses (struct type *var_type, struct type *discr_type,
524 struct type *outer_type, struct ui_file *stream,
525 int show, int level,
526 const struct type_print_options *flags)
527{
528 for (int i = 0; i < var_type->num_fields (); i += 1)
529 {
6cb06a8c 530 gdb_printf (stream, "\n%*swhen ", level, "");
48015786
TT
531 if (print_choices (var_type, i, stream, discr_type))
532 {
533 if (print_record_field_types (var_type->field (i).type (),
534 outer_type, stream, show, level,
535 flags)
536 <= 0)
6cb06a8c 537 gdb_printf (stream, " null;");
48015786
TT
538 }
539 else
540 print_selected_record_field_types (var_type, outer_type, i, i,
541 stream, show, level, flags);
542 }
543}
544
83e3a93c
PH
545/* Assuming that field FIELD_NUM of TYPE represents variants whose
546 discriminant is contained in OUTER_TYPE, print its components on STREAM.
547 LEVEL is the recursion (indentation) level, in case any of the fields
548 themselves have nested structure, and SHOW is the number of levels of
549 internal structure to show (see ada_print_type). For this purpose,
550 fields nested in a variant part are taken to be at the same level as
551 the fields immediately outside the variant part. */
14f9c5c9
AS
552
553static void
ebf56fd3
AS
554print_variant_clauses (struct type *type, int field_num,
555 struct type *outer_type, struct ui_file *stream,
79d43c61
TT
556 int show, int level,
557 const struct type_print_options *flags)
14f9c5c9 558{
4c4b4cd2 559 struct type *var_type, *par_type;
14f9c5c9
AS
560 struct type *discr_type;
561
940da03e 562 var_type = type->field (field_num).type ();
14f9c5c9
AS
563 discr_type = ada_variant_discrim_type (var_type, outer_type);
564
78134374 565 if (var_type->code () == TYPE_CODE_PTR)
14f9c5c9 566 {
27710edb 567 var_type = var_type->target_type ();
78134374 568 if (var_type == NULL || var_type->code () != TYPE_CODE_UNION)
4c4b4cd2 569 return;
14f9c5c9
AS
570 }
571
4c4b4cd2
PH
572 par_type = ada_find_parallel_type (var_type, "___XVU");
573 if (par_type != NULL)
574 var_type = par_type;
575
48015786
TT
576 print_variant_clauses (var_type, discr_type, outer_type, stream, show,
577 level + 4, flags);
14f9c5c9
AS
578}
579
4c4b4cd2 580/* Assuming that field FIELD_NUM of TYPE is a variant part whose
14f9c5c9 581 discriminants are contained in OUTER_TYPE, print a description of it
4c4b4cd2
PH
582 on STREAM. LEVEL is the recursion (indentation) level, in case any of
583 the fields themselves have nested structure, and SHOW is the number of
584 levels of internal structure to show (see ada_print_type). For this
585 purpose, fields nested in a variant part are taken to be at the same
586 level as the fields immediately outside the variant part. */
14f9c5c9
AS
587
588static void
ebf56fd3 589print_variant_part (struct type *type, int field_num, struct type *outer_type,
79d43c61
TT
590 struct ui_file *stream, int show, int level,
591 const struct type_print_options *flags)
14f9c5c9 592{
6c71eb7d 593 const char *variant
940da03e 594 = ada_variant_discrim_name (type->field (field_num).type ());
6c71eb7d
TT
595 if (*variant == '\0')
596 variant = "?";
597
6cb06a8c 598 gdb_printf (stream, "\n%*scase %s is", level + 4, "", variant);
d2e4a39e 599 print_variant_clauses (type, field_num, outer_type, stream, show,
79d43c61 600 level + 4, flags);
6cb06a8c 601 gdb_printf (stream, "\n%*send case;", level + 4, "");
14f9c5c9
AS
602}
603
83e3a93c
PH
604/* Print a description on STREAM of the fields FLD0 through FLD1 in
605 record or union type TYPE, whose discriminants are in OUTER_TYPE.
606 LEVEL is the recursion (indentation) level, in case any of the
607 fields themselves have nested structure, and SHOW is the number of
608 levels of internal structure to show (see ada_print_type). Does
feb864b7 609 not print parent type information of TYPE. Returns 0 if no fields
83e3a93c
PH
610 printed, -1 for an incomplete type, else > 0. Prints each field
611 beginning on a new line, but does not put a new line at end. */
14f9c5c9
AS
612
613static int
83e3a93c
PH
614print_selected_record_field_types (struct type *type, struct type *outer_type,
615 int fld0, int fld1,
79d43c61
TT
616 struct ui_file *stream, int show, int level,
617 const struct type_print_options *flags)
14f9c5c9 618{
83e3a93c 619 int i, flds;
14f9c5c9
AS
620
621 flds = 0;
14f9c5c9 622
e46d3488 623 if (fld0 > fld1 && type->is_stub ())
14f9c5c9
AS
624 return -1;
625
83e3a93c 626 for (i = fld0; i <= fld1; i += 1)
14f9c5c9
AS
627 {
628 QUIT;
629
d2e4a39e 630 if (ada_is_parent_field (type, i) || ada_is_ignored_field (type, i))
14f9c5c9
AS
631 ;
632 else if (ada_is_wrapper_field (type, i))
940da03e 633 flds += print_record_field_types (type->field (i).type (), type,
79d43c61 634 stream, show, level, flags);
d2e4a39e 635 else if (ada_is_variant_part (type, i))
14f9c5c9 636 {
79d43c61 637 print_variant_part (type, i, outer_type, stream, show, level, flags);
14f9c5c9
AS
638 flds = 1;
639 }
640 else
641 {
642 flds += 1;
6cb06a8c 643 gdb_printf (stream, "\n%*s", level + 4, "");
940da03e 644 ada_print_type (type->field (i).type (),
33d16dd9 645 type->field (i).name (),
79d43c61 646 stream, show - 1, level + 4, flags);
6cb06a8c 647 gdb_printf (stream, ";");
14f9c5c9
AS
648 }
649 }
650
651 return flds;
652}
653
d656f129
TT
654static void print_record_field_types_dynamic
655 (const gdb::array_view<variant_part> &parts,
656 int from, int to, struct type *type, struct ui_file *stream,
657 int show, int level, const struct type_print_options *flags);
658
659/* Print the choices encoded by VARIANT on STREAM. LEVEL is the
660 indentation level. The type of the discriminant for VARIANT is
661 given by DISR_TYPE. */
662
663static void
664print_choices (struct type *discr_type, const variant &variant,
665 struct ui_file *stream, int level)
666{
6cb06a8c 667 gdb_printf (stream, "\n%*swhen ", level, "");
d656f129 668 if (variant.is_default ())
6cb06a8c 669 gdb_printf (stream, "others");
d656f129
TT
670 else
671 {
672 bool first = true;
673 for (const discriminant_range &range : variant.discriminants)
674 {
675 if (!first)
6cb06a8c 676 gdb_printf (stream, " | ");
d656f129
TT
677 first = false;
678
679 ada_print_scalar (discr_type, range.low, stream);
680 if (range.low != range.high)
681 ada_print_scalar (discr_type, range.high, stream);
682 }
683 }
684
6cb06a8c 685 gdb_printf (stream, " =>");
d656f129
TT
686}
687
688/* Print a single variant part, PART, on STREAM. TYPE is the
689 enclosing type. SHOW, LEVEL, and FLAGS are the usual type-printing
690 settings. This prints information about PART and the fields it
691 controls. It returns the index of the next field that should be
692 shown -- that is, one after the last field printed by this
693 call. */
694
695static int
696print_variant_part (const variant_part &part,
697 struct type *type, struct ui_file *stream,
698 int show, int level,
699 const struct type_print_options *flags)
700{
701 struct type *discr_type = nullptr;
702 const char *name;
703 if (part.discriminant_index == -1)
704 name = "?";
705 else
706 {
33d16dd9 707 name = type->field (part.discriminant_index).name ();;
940da03e 708 discr_type = type->field (part.discriminant_index).type ();
d656f129
TT
709 }
710
6cb06a8c 711 gdb_printf (stream, "\n%*scase %s is", level + 4, "", name);
d656f129
TT
712
713 int last_field = -1;
714 for (const variant &variant : part.variants)
715 {
716 print_choices (discr_type, variant, stream, level + 8);
717
718 if (variant.first_field == variant.last_field)
6cb06a8c 719 gdb_printf (stream, " null;");
d656f129
TT
720 else
721 {
722 print_record_field_types_dynamic (variant.parts,
723 variant.first_field,
724 variant.last_field, type, stream,
725 show, level + 8, flags);
726 last_field = variant.last_field;
727 }
728 }
729
6cb06a8c 730 gdb_printf (stream, "\n%*send case;", level + 4, "");
d656f129
TT
731
732 return last_field;
733}
734
735/* Print some fields of TYPE to STREAM. SHOW, LEVEL, and FLAGS are
736 the usual type-printing settings. PARTS is the array of variant
737 parts that correspond to the range of fields to be printed. FROM
738 and TO are the range of fields to print. */
739
740static void
741print_record_field_types_dynamic (const gdb::array_view<variant_part> &parts,
742 int from, int to,
743 struct type *type, struct ui_file *stream,
744 int show, int level,
745 const struct type_print_options *flags)
746{
747 int field = from;
748
749 for (const variant_part &part : parts)
750 {
751 if (part.variants.empty ())
752 continue;
753
754 /* Print any non-varying fields. */
755 int first_varying = part.variants[0].first_field;
756 print_selected_record_field_types (type, type, field,
757 first_varying - 1, stream,
758 show, level, flags);
759
760 field = print_variant_part (part, type, stream, show, level, flags);
761 }
762
763 /* Print any trailing fields that we were asked to print. */
764 print_selected_record_field_types (type, type, field, to - 1, stream, show,
765 level, flags);
766}
767
83e3a93c
PH
768/* Print a description on STREAM of all fields of record or union type
769 TYPE, as for print_selected_record_field_types, above. */
770
771static int
772print_record_field_types (struct type *type, struct type *outer_type,
79d43c61
TT
773 struct ui_file *stream, int show, int level,
774 const struct type_print_options *flags)
83e3a93c 775{
24e99c6c 776 struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
d656f129
TT
777 if (prop != nullptr)
778 {
8c2e4e06 779 if (prop->kind () == PROP_TYPE)
d656f129 780 {
8c2e4e06 781 type = prop->original_type ();
24e99c6c 782 prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
d656f129 783 }
8c2e4e06
SM
784 gdb_assert (prop->kind () == PROP_VARIANT_PARTS);
785 print_record_field_types_dynamic (*prop->variant_parts (),
1f704f76 786 0, type->num_fields (),
d656f129 787 type, stream, show, level, flags);
1f704f76 788 return type->num_fields ();
d656f129
TT
789 }
790
83e3a93c 791 return print_selected_record_field_types (type, outer_type,
1f704f76 792 0, type->num_fields () - 1,
79d43c61 793 stream, show, level, flags);
83e3a93c
PH
794}
795
796
4c4b4cd2
PH
797/* Print record type TYPE on STREAM. LEVEL is the recursion (indentation)
798 level, in case the element type itself has nested structure, and SHOW is
799 the number of levels of internal structure to show (see ada_print_type). */
14f9c5c9
AS
800
801static void
d2e4a39e 802print_record_type (struct type *type0, struct ui_file *stream, int show,
79d43c61 803 int level, const struct type_print_options *flags)
14f9c5c9 804{
d2e4a39e
AS
805 struct type *parent_type;
806 struct type *type;
807
4c4b4cd2
PH
808 type = ada_find_parallel_type (type0, "___XVE");
809 if (type == NULL)
810 type = type0;
14f9c5c9
AS
811
812 parent_type = ada_parent_type (type);
d2e4a39e 813 if (ada_type_name (parent_type) != NULL)
25552254
JB
814 {
815 const char *parent_name = decoded_type_name (parent_type);
816
817 /* If we fail to decode the parent type name, then use the parent
818 type name as is. Not pretty, but should never happen except
819 when the debugging info is incomplete or incorrect. This
820 prevents a crash trying to print a NULL pointer. */
821 if (parent_name == NULL)
822 parent_name = ada_type_name (parent_type);
6cb06a8c 823 gdb_printf (stream, "new %s with record", parent_name);
25552254 824 }
4c4b4cd2 825 else if (parent_type == NULL && ada_is_tagged_type (type, 0))
6cb06a8c 826 gdb_printf (stream, "tagged record");
0b48a291 827 else
6cb06a8c 828 gdb_printf (stream, "record");
14f9c5c9
AS
829
830 if (show < 0)
6cb06a8c 831 gdb_printf (stream, " ... end record");
14f9c5c9
AS
832 else
833 {
834 int flds;
835
836 flds = 0;
837 if (parent_type != NULL && ada_type_name (parent_type) == NULL)
d2e4a39e 838 flds += print_record_field_types (parent_type, parent_type,
79d43c61
TT
839 stream, show, level, flags);
840 flds += print_record_field_types (type, type, stream, show, level,
841 flags);
d2e4a39e 842
14f9c5c9 843 if (flds > 0)
6cb06a8c 844 gdb_printf (stream, "\n%*send record", level, "");
d2e4a39e 845 else if (flds < 0)
6cb06a8c 846 gdb_printf (stream, _(" <incomplete type> end record"));
d2e4a39e 847 else
6cb06a8c 848 gdb_printf (stream, " null; end record");
14f9c5c9
AS
849 }
850}
851
852/* Print the unchecked union type TYPE in something resembling Ada
4c4b4cd2 853 format on STREAM. LEVEL is the recursion (indentation) level
14f9c5c9 854 in case the element type itself has nested structure, and SHOW is the
4c4b4cd2 855 number of levels of internal structure to show (see ada_print_type). */
14f9c5c9 856static void
d2e4a39e 857print_unchecked_union_type (struct type *type, struct ui_file *stream,
79d43c61
TT
858 int show, int level,
859 const struct type_print_options *flags)
14f9c5c9 860{
14f9c5c9 861 if (show < 0)
6cb06a8c 862 gdb_printf (stream, "record (?) is ... end record");
1f704f76 863 else if (type->num_fields () == 0)
6cb06a8c 864 gdb_printf (stream, "record (?) is null; end record");
14f9c5c9
AS
865 else
866 {
6cb06a8c 867 gdb_printf (stream, "record (?) is\n%*scase ? is", level + 4, "");
14f9c5c9 868
48015786 869 print_variant_clauses (type, nullptr, type, stream, show, level + 8, flags);
14f9c5c9 870
6cb06a8c
TT
871 gdb_printf (stream, "\n%*send case;\n%*send record",
872 level + 4, "", level, "");
14f9c5c9
AS
873 }
874}
d2e4a39e 875
14f9c5c9
AS
876
877
878/* Print function or procedure type TYPE on STREAM. Make it a header
4c4b4cd2 879 for function or procedure NAME if NAME is not null. */
14f9c5c9
AS
880
881static void
79d43c61
TT
882print_func_type (struct type *type, struct ui_file *stream, const char *name,
883 const struct type_print_options *flags)
14f9c5c9 884{
1f704f76 885 int i, len = type->num_fields ();
14f9c5c9 886
27710edb
SM
887 if (type->target_type () != NULL
888 && type->target_type ()->code () == TYPE_CODE_VOID)
6cb06a8c 889 gdb_printf (stream, "procedure");
14f9c5c9 890 else
6cb06a8c 891 gdb_printf (stream, "function");
14f9c5c9 892
d2e4a39e 893 if (name != NULL && name[0] != '\0')
ac8c53cc 894 {
0426ad51 895 gdb_puts (" ", stream);
ac8c53cc
PW
896 fputs_styled (name, function_name_style.style (), stream);
897 }
14f9c5c9 898
d2e4a39e 899 if (len > 0)
14f9c5c9 900 {
6cb06a8c 901 gdb_printf (stream, " (");
14f9c5c9
AS
902 for (i = 0; i < len; i += 1)
903 {
904 if (i > 0)
905 {
0426ad51 906 gdb_puts ("; ", stream);
1285ce86 907 stream->wrap_here (4);
14f9c5c9 908 }
6cb06a8c 909 gdb_printf (stream, "a%d: ", i + 1);
940da03e 910 ada_print_type (type->field (i).type (), "", stream, -1, 0,
79d43c61 911 flags);
14f9c5c9 912 }
6cb06a8c 913 gdb_printf (stream, ")");
d2e4a39e 914 }
14f9c5c9 915
27710edb 916 if (type->target_type () == NULL)
6cb06a8c 917 gdb_printf (stream, " return <unknown return type>");
27710edb 918 else if (type->target_type ()->code () != TYPE_CODE_VOID)
14f9c5c9 919 {
6cb06a8c 920 gdb_printf (stream, " return ");
27710edb 921 ada_print_type (type->target_type (), "", stream, 0, 0, flags);
14f9c5c9
AS
922 }
923}
924
925
926/* Print a description of a type TYPE0.
927 Output goes to STREAM (via stdio).
2c2316c5
TT
928 If VARSTRING is a non-NULL, non-empty string, print as an Ada
929 variable/field declaration.
4c4b4cd2 930 SHOW+1 is the maximum number of levels of internal type structure
14f9c5c9
AS
931 to show (this applies to record types, enumerated types, and
932 array types).
933 SHOW is the number of levels of internal type structure to show
4c4b4cd2 934 when there is a type name for the SHOWth deepest level (0th is
14f9c5c9
AS
935 outer level).
936 When SHOW<0, no inner structure is shown.
4c4b4cd2 937 LEVEL indicates level of recursion (for nested definitions). */
14f9c5c9
AS
938
939void
25b524e8 940ada_print_type (struct type *type0, const char *varstring,
79d43c61
TT
941 struct ui_file *stream, int show, int level,
942 const struct type_print_options *flags)
14f9c5c9 943{
751495be
PA
944 if (type0->code () == TYPE_CODE_INTERNAL_FUNCTION)
945 {
946 c_print_type (type0, "", stream, show, level,
947 language_ada, flags);
948 return;
949 }
950
61ee279c 951 struct type *type = ada_check_typedef (ada_get_base_type (type0));
8d9fd3a1
TT
952 /* If we can decode the original type name, use it. However, there
953 are cases where the original type is an internally-generated type
954 with a name that can't be decoded (and whose encoded name might
955 not actually bear any relation to the type actually declared in
956 the sources). In that case, try using the name of the base type
957 in its place.
958
959 Note that we looked at the possibility of always using the name
960 of the base type. This does not always work, unfortunately, as
961 there are situations where it's the base type which has an
962 internally-generated name. */
963 const char *type_name = decoded_type_name (type0);
964 if (type_name == nullptr)
965 type_name = decoded_type_name (type);
14f9c5c9
AS
966 int is_var_decl = (varstring != NULL && varstring[0] != '\0');
967
968 if (type == NULL)
969 {
970 if (is_var_decl)
6cb06a8c
TT
971 gdb_printf (stream, "%.*s: ",
972 ada_name_prefix_len (varstring), varstring);
7f6aba03 973 fprintf_styled (stream, metadata_style.style (), "<null type?>");
14f9c5c9
AS
974 return;
975 }
976
78134374 977 if (is_var_decl && type->code () != TYPE_CODE_FUNC)
6cb06a8c
TT
978 gdb_printf (stream, "%.*s: ",
979 ada_name_prefix_len (varstring), varstring);
14f9c5c9 980
d2d43431 981 if (type_name != NULL && show <= 0 && !ada_is_aligner_type (type))
14f9c5c9 982 {
6cb06a8c
TT
983 gdb_printf (stream, "%.*s",
984 ada_name_prefix_len (type_name), type_name);
14f9c5c9
AS
985 return;
986 }
987
988 if (ada_is_aligner_type (type))
79d43c61 989 ada_print_type (ada_aligned_type (type), "", stream, show, level, flags);
d2d43431 990 else if (ada_is_constrained_packed_array_type (type)
78134374 991 && type->code () != TYPE_CODE_PTR)
79d43c61 992 print_array_type (type, stream, show, level, flags);
14f9c5c9 993 else
78134374 994 switch (type->code ())
d2e4a39e
AS
995 {
996 default:
6cb06a8c 997 gdb_printf (stream, "<");
1c6fbf42 998 c_print_type (type, "", stream, show, level, language_ada, flags);
6cb06a8c 999 gdb_printf (stream, ">");
d2e4a39e
AS
1000 break;
1001 case TYPE_CODE_PTR:
720d1a40 1002 case TYPE_CODE_TYPEDEF:
9c91c725
TT
1003 /* An __XVL field is not truly a pointer, so don't print
1004 "access" in this case. */
1005 if (type->code () != TYPE_CODE_PTR
2c2316c5
TT
1006 || (varstring != nullptr
1007 && strstr (varstring, "___XVL") == nullptr))
6cb06a8c 1008 gdb_printf (stream, "access ");
27710edb 1009 ada_print_type (type->target_type (), "", stream, show, level,
79d43c61 1010 flags);
d2e4a39e
AS
1011 break;
1012 case TYPE_CODE_REF:
6cb06a8c 1013 gdb_printf (stream, "<ref> ");
27710edb 1014 ada_print_type (type->target_type (), "", stream, show, level,
79d43c61 1015 flags);
d2e4a39e
AS
1016 break;
1017 case TYPE_CODE_ARRAY:
79d43c61 1018 print_array_type (type, stream, show, level, flags);
d2e4a39e 1019 break;
690cc4eb 1020 case TYPE_CODE_BOOL:
6cb06a8c 1021 gdb_printf (stream, "(false, true)");
690cc4eb 1022 break;
d2e4a39e 1023 case TYPE_CODE_INT:
bbcdf9ab
TT
1024 {
1025 const char *name = ada_type_name (type);
1026
1027 if (!ada_is_range_type_name (name))
1028 fprintf_styled (stream, metadata_style.style (),
1029 _("<%s-byte integer>"),
df86565b 1030 pulongest (type->length ()));
bbcdf9ab
TT
1031 else
1032 {
6cb06a8c 1033 gdb_printf (stream, "range ");
6d280fed 1034 print_range_type (type, stream, 1 /* bounds_preferred_p */);
bbcdf9ab
TT
1035 }
1036 }
d2e4a39e
AS
1037 break;
1038 case TYPE_CODE_RANGE:
bbcdf9ab 1039 if (is_fixed_point_type (type))
0c9150e4 1040 {
6cb06a8c 1041 gdb_printf (stream, "<");
0c9150e4 1042 print_type_fixed_point (type, stream);
6cb06a8c 1043 gdb_printf (stream, ">");
0c9150e4 1044 }
d2e4a39e 1045 else if (ada_is_modular_type (type))
6cb06a8c
TT
1046 gdb_printf (stream, "mod %s",
1047 int_string (ada_modulus (type), 10, 0, 0, 1));
d2e4a39e
AS
1048 else
1049 {
6cb06a8c 1050 gdb_printf (stream, "range ");
6d280fed 1051 print_range (type, stream, 1 /* bounds_preferred_p */);
d2e4a39e
AS
1052 }
1053 break;
1054 case TYPE_CODE_FLT:
7f6aba03
TT
1055 fprintf_styled (stream, metadata_style.style (),
1056 _("<%s-byte float>"),
df86565b 1057 pulongest (type->length ()));
d2e4a39e
AS
1058 break;
1059 case TYPE_CODE_ENUM:
1060 if (show < 0)
6cb06a8c 1061 gdb_printf (stream, "(...)");
d2e4a39e
AS
1062 else
1063 print_enum_type (type, stream);
1064 break;
1065 case TYPE_CODE_STRUCT:
4c4b4cd2 1066 if (ada_is_array_descriptor_type (type))
79d43c61 1067 print_array_type (type, stream, show, level, flags);
d2e4a39e 1068 else
79d43c61 1069 print_record_type (type, stream, show, level, flags);
d2e4a39e
AS
1070 break;
1071 case TYPE_CODE_UNION:
79d43c61 1072 print_unchecked_union_type (type, stream, show, level, flags);
d2e4a39e
AS
1073 break;
1074 case TYPE_CODE_FUNC:
79d43c61 1075 print_func_type (type, stream, varstring, flags);
d2e4a39e
AS
1076 break;
1077 }
14f9c5c9 1078}
be942545
JB
1079
1080/* Implement the la_print_typedef language method for Ada. */
1081
1082void
1083ada_print_typedef (struct type *type, struct symbol *new_symbol,
dda83cd7 1084 struct ui_file *stream)
be942545
JB
1085{
1086 type = ada_check_typedef (type);
79d43c61 1087 ada_print_type (type, "", stream, 0, 0, &type_print_raw_options);
be942545 1088}