GDB (xrefs)
/tmp/gdb-8.1/gdb/ada-typeprint.c
Go to the documentation of this file.
1 /* Support for printing Ada types for GDB, the GNU debugger.
2  Copyright (C) 1986-2018 Free Software Foundation, Inc.
3 
4  This file is part of GDB.
5 
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.
10 
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.
15 
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/>. */
18 
19 #include "defs.h"
20 #include "gdb_obstack.h"
21 #include "bfd.h" /* Binary File Description */
22 #include "symtab.h"
23 #include "gdbtypes.h"
24 #include "expression.h"
25 #include "value.h"
26 #include "gdbcore.h"
27 #include "target.h"
28 #include "command.h"
29 #include "gdbcmd.h"
30 #include "language.h"
31 #include "demangle.h"
32 #include "c-lang.h"
33 #include "typeprint.h"
34 #include "target-float.h"
35 #include "ada-lang.h"
36 #include <ctype.h>
37 
38 static int print_selected_record_field_types (struct type *, struct type *,
39  int, int,
40  struct ui_file *, int, int,
41  const struct type_print_options *);
42 
43 static int print_record_field_types (struct type *, struct type *,
44  struct ui_file *, int, int,
45  const struct type_print_options *);
46 
47 
48 
49 static char *name_buffer;
50 static int name_buffer_len;
51 
52 /* The (decoded) Ada name of TYPE. This value persists until the
53  next call. */
54 
55 static char *
57 {
58  if (ada_type_name (type) == NULL)
59  return NULL;
60  else
61  {
62  const char *raw_name = ada_type_name (type);
63  char *s, *q;
64 
65  if (name_buffer == NULL || name_buffer_len <= strlen (raw_name))
66  {
67  name_buffer_len = 16 + 2 * strlen (raw_name);
69  }
70  strcpy (name_buffer, raw_name);
71 
72  s = (char *) strstr (name_buffer, "___");
73  if (s != NULL)
74  *s = '\0';
75 
76  s = name_buffer + strlen (name_buffer) - 1;
77  while (s > name_buffer && (s[0] != '_' || s[-1] != '_'))
78  s -= 1;
79 
80  if (s == name_buffer)
81  return name_buffer;
82 
83  if (!islower (s[1]))
84  return NULL;
85 
86  for (s = q = name_buffer; *s != '\0'; q += 1)
87  {
88  if (s[0] == '_' && s[1] == '_')
89  {
90  *q = '.';
91  s += 2;
92  }
93  else
94  {
95  *q = *s;
96  s += 1;
97  }
98  }
99  *q = '\0';
100  return name_buffer;
101  }
102 }
103 
104 /* Return nonzero if TYPE is a subrange type, and its bounds
105  are identical to the bounds of its subtype. */
106 
107 static int
109 {
110  struct type *subtype;
111 
112  if (TYPE_CODE (type) != TYPE_CODE_RANGE)
113  return 0;
114 
115  subtype = TYPE_TARGET_TYPE (type);
116  if (subtype == NULL)
117  return 0;
118 
119  if (is_dynamic_type (type))
120  return 0;
121 
123  != ada_discrete_type_low_bound (subtype))
124  return 0;
125 
127  != ada_discrete_type_high_bound (subtype))
128  return 0;
129 
130  return 1;
131 }
132 
133 /* Print TYPE on STREAM, preferably as a range if BOUNDS_PREFERED_P
134  is nonzero. */
135 
136 static void
137 print_range (struct type *type, struct ui_file *stream,
138  int bounds_prefered_p)
139 {
140  if (!bounds_prefered_p)
141  {
142  /* Try stripping all TYPE_CODE_RANGE layers whose bounds
143  are identical to the bounds of their subtype. When
144  the bounds of both types match, it can allow us to
145  print a range using the name of its base type, which
146  is easier to read. For instance, we would print...
147 
148  array (character) of ...
149 
150  ... instead of...
151 
152  array ('["00"]' .. '["ff"]') of ... */
155  }
156 
157  switch (TYPE_CODE (type))
158  {
159  case TYPE_CODE_RANGE:
160  case TYPE_CODE_ENUM:
161  {
162  struct type *target_type;
163  LONGEST lo = 0, hi = 0; /* init for gcc -Wall */
164  int got_error = 0;
165 
166  target_type = TYPE_TARGET_TYPE (type);
167  if (target_type == NULL)
168  target_type = type;
169 
170  TRY
171  {
174  }
176  {
177  /* This can happen when the range is dynamic. Sometimes,
178  resolving dynamic property values requires us to have
179  access to an actual object, which is not available
180  when the user is using the "ptype" command on a type.
181  Print the range as an unbounded range. */
182  fprintf_filtered (stream, "<>");
183  got_error = 1;
184  }
185  END_CATCH
186 
187  if (!got_error)
188  {
189  ada_print_scalar (target_type, lo, stream);
190  fprintf_filtered (stream, " .. ");
191  ada_print_scalar (target_type, hi, stream);
192  }
193  }
194  break;
195  default:
196  fprintf_filtered (stream, "%.*s",
198  TYPE_NAME (type));
199  break;
200  }
201 }
202 
203 /* Print the number or discriminant bound at BOUNDS+*N on STREAM, and
204  set *N past the bound and its delimiter, if any. */
205 
206 static void
207 print_range_bound (struct type *type, const char *bounds, int *n,
208  struct ui_file *stream)
209 {
210  LONGEST B;
211 
212  if (ada_scan_number (bounds, *n, &B, n))
213  {
214  /* STABS decodes all range types which bounds are 0 .. -1 as
215  unsigned integers (ie. the type code is TYPE_CODE_INT, not
216  TYPE_CODE_RANGE). Unfortunately, ada_print_scalar() relies
217  on the unsigned flag to determine whether the bound should
218  be printed as a signed or an unsigned value. This causes
219  the upper bound of the 0 .. -1 range types to be printed as
220  a very large unsigned number instead of -1.
221  To workaround this stabs deficiency, we replace the TYPE by NULL
222  to indicate default output when we detect that the bound is negative,
223  and the type is a TYPE_CODE_INT. The bound is negative when
224  'm' is the last character of the number scanned in BOUNDS. */
225  if (bounds[*n - 1] == 'm' && TYPE_CODE (type) == TYPE_CODE_INT)
226  type = NULL;
227  ada_print_scalar (type, B, stream);
228  if (bounds[*n] == '_')
229  *n += 2;
230  }
231  else
232  {
233  int bound_len;
234  const char *bound = bounds + *n;
235  const char *pend;
236 
237  pend = strstr (bound, "__");
238  if (pend == NULL)
239  *n += bound_len = strlen (bound);
240  else
241  {
242  bound_len = pend - bound;
243  *n += bound_len + 2;
244  }
245  fprintf_filtered (stream, "%.*s", bound_len, bound);
246  }
247 }
248 
249 /* Assuming NAME[0 .. NAME_LEN-1] is the name of a range type, print
250  the value (if found) of the bound indicated by SUFFIX ("___L" or
251  "___U") according to the ___XD conventions. */
252 
253 static void
254 print_dynamic_range_bound (struct type *type, const char *name, int name_len,
255  const char *suffix, struct ui_file *stream)
256 {
257  LONGEST B;
258  std::string name_buf (name, name_len);
259  name_buf += suffix;
260 
261  if (get_int_var_value (name_buf.c_str (), B))
262  ada_print_scalar (type, B, stream);
263  else
264  fprintf_filtered (stream, "?");
265 }
266 
267 /* Print RAW_TYPE as a range type, using any bound information
268  following the GNAT encoding (if available).
269 
270  If BOUNDS_PREFERED_P is nonzero, force the printing of the range
271  using its bounds. Otherwise, try printing the range without
272  printing the value of the bounds, if possible (this is only
273  considered a hint, not a guaranty). */
274 
275 static void
276 print_range_type (struct type *raw_type, struct ui_file *stream,
277  int bounds_prefered_p)
278 {
279  const char *name;
280  struct type *base_type;
281  const char *subtype_info;
282 
283  gdb_assert (raw_type != NULL);
284  name = TYPE_NAME (raw_type);
285  gdb_assert (name != NULL);
286 
287  if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
288  base_type = TYPE_TARGET_TYPE (raw_type);
289  else
290  base_type = raw_type;
291 
292  subtype_info = strstr (name, "___XD");
293  if (subtype_info == NULL)
294  print_range (raw_type, stream, bounds_prefered_p);
295  else
296  {
297  int prefix_len = subtype_info - name;
298  const char *bounds_str;
299  int n;
300 
301  subtype_info += 5;
302  bounds_str = strchr (subtype_info, '_');
303  n = 1;
304 
305  if (*subtype_info == 'L')
306  {
307  print_range_bound (base_type, bounds_str, &n, stream);
308  subtype_info += 1;
309  }
310  else
311  print_dynamic_range_bound (base_type, name, prefix_len, "___L",
312  stream);
313 
314  fprintf_filtered (stream, " .. ");
315 
316  if (*subtype_info == 'U')
317  print_range_bound (base_type, bounds_str, &n, stream);
318  else
319  print_dynamic_range_bound (base_type, name, prefix_len, "___U",
320  stream);
321  }
322 }
323 
324 /* Print enumerated type TYPE on STREAM. */
325 
326 static void
327 print_enum_type (struct type *type, struct ui_file *stream)
328 {
329  int len = TYPE_NFIELDS (type);
330  int i;
331  LONGEST lastval;
332 
333  fprintf_filtered (stream, "(");
334  wrap_here (" ");
335 
336  lastval = 0;
337  for (i = 0; i < len; i++)
338  {
339  QUIT;
340  if (i)
341  fprintf_filtered (stream, ", ");
342  wrap_here (" ");
344  if (lastval != TYPE_FIELD_ENUMVAL (type, i))
345  {
346  fprintf_filtered (stream, " => %s",
348  lastval = TYPE_FIELD_ENUMVAL (type, i);
349  }
350  lastval += 1;
351  }
352  fprintf_filtered (stream, ")");
353 }
354 
355 /* Print representation of Ada fixed-point type TYPE on STREAM. */
356 
357 static void
358 print_fixed_point_type (struct type *type, struct ui_file *stream)
359 {
360  struct value *delta = ada_delta (type);
361  struct value *small = ada_scaling_factor (type);
362 
363  if (delta == nullptr)
364  fprintf_filtered (stream, "delta ??");
365  else
366  {
367  std::string str;
368  str = target_float_to_string (value_contents (delta),
369  value_type (delta), "%g");
370  fprintf_filtered (stream, "delta %s", str.c_str());
371  if (!value_equal (delta, small))
372  {
373  str = target_float_to_string (value_contents (small),
374  value_type (small), "%g");
375  fprintf_filtered (stream, " <'small = %s>", str.c_str());
376  }
377  }
378 }
379 
380 /* Print simple (constrained) array type TYPE on STREAM. LEVEL is the
381  recursion (indentation) level, in case the element type itself has
382  nested structure, and SHOW is the number of levels of internal
383  structure to show (see ada_print_type). */
384 
385 static void
386 print_array_type (struct type *type, struct ui_file *stream, int show,
387  int level, const struct type_print_options *flags)
388 {
389  int bitsize;
390  int n_indices;
391  struct type *elt_type = NULL;
392 
395 
396  bitsize = 0;
397  fprintf_filtered (stream, "array (");
398 
399  if (type == NULL)
400  {
401  fprintf_filtered (stream, _("<undecipherable array type>"));
402  return;
403  }
404 
405  n_indices = -1;
407  {
408  struct type *range_desc_type;
409  struct type *arr_type;
410 
411  range_desc_type = ada_find_parallel_type (type, "___XA");
412  ada_fixup_array_indexes_type (range_desc_type);
413 
414  bitsize = 0;
415  if (range_desc_type == NULL)
416  {
417  for (arr_type = type; TYPE_CODE (arr_type) == TYPE_CODE_ARRAY;
418  arr_type = TYPE_TARGET_TYPE (arr_type))
419  {
420  if (arr_type != type)
421  fprintf_filtered (stream, ", ");
422  print_range (TYPE_INDEX_TYPE (arr_type), stream,
423  0 /* bounds_prefered_p */);
424  if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
425  bitsize = TYPE_FIELD_BITSIZE (arr_type, 0);
426  }
427  }
428  else
429  {
430  int k;
431 
432  n_indices = TYPE_NFIELDS (range_desc_type);
433  for (k = 0, arr_type = type;
434  k < n_indices;
435  k += 1, arr_type = TYPE_TARGET_TYPE (arr_type))
436  {
437  if (k > 0)
438  fprintf_filtered (stream, ", ");
439  print_range_type (TYPE_FIELD_TYPE (range_desc_type, k),
440  stream, 0 /* bounds_prefered_p */);
441  if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
442  bitsize = TYPE_FIELD_BITSIZE (arr_type, 0);
443  }
444  }
445  }
446  else
447  {
448  int i, i0;
449 
450  for (i = i0 = ada_array_arity (type); i > 0; i -= 1)
451  fprintf_filtered (stream, "%s<>", i == i0 ? "" : ", ");
452  }
453 
454  elt_type = ada_array_element_type (type, n_indices);
455  fprintf_filtered (stream, ") of ");
456  wrap_here ("");
457  ada_print_type (elt_type, "", stream, show == 0 ? 0 : show - 1, level + 1,
458  flags);
459  /* Arrays with variable-length elements are never bit-packed in practice but
460  compilers have to describe their stride so that we can properly fetch
461  individual elements. Do not say the array is packed in this case. */
462  if (bitsize > 0 && !is_dynamic_type (elt_type))
463  fprintf_filtered (stream, " <packed: %d-bit elements>", bitsize);
464 }
465 
466 /* Print the choices encoded by field FIELD_NUM of variant-part TYPE on
467  STREAM, assuming that VAL_TYPE (if non-NULL) is the type of the
468  values. Return non-zero if the field is an encoding of
469  discriminant values, as in a standard variant record, and 0 if the
470  field is not so encoded (as happens with single-component variants
471  in types annotated with pragma Unchecked_Variant). */
472 
473 static int
474 print_choices (struct type *type, int field_num, struct ui_file *stream,
475  struct type *val_type)
476 {
477  int have_output;
478  int p;
479  const char *name = TYPE_FIELD_NAME (type, field_num);
480 
481  have_output = 0;
482 
483  /* Skip over leading 'V': NOTE soon to be obsolete. */
484  if (name[0] == 'V')
485  {
486  if (!ada_scan_number (name, 1, NULL, &p))
487  goto Huh;
488  }
489  else
490  p = 0;
491 
492  while (1)
493  {
494  switch (name[p])
495  {
496  default:
497  goto Huh;
498  case '_':
499  case '\0':
500  fprintf_filtered (stream, " =>");
501  return 1;
502  case 'S':
503  case 'R':
504  case 'O':
505  if (have_output)
506  fprintf_filtered (stream, " | ");
507  have_output = 1;
508  break;
509  }
510 
511  switch (name[p])
512  {
513  case 'S':
514  {
515  LONGEST W;
516 
517  if (!ada_scan_number (name, p + 1, &W, &p))
518  goto Huh;
519  ada_print_scalar (val_type, W, stream);
520  break;
521  }
522  case 'R':
523  {
524  LONGEST L, U;
525 
526  if (!ada_scan_number (name, p + 1, &L, &p)
527  || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
528  goto Huh;
529  ada_print_scalar (val_type, L, stream);
530  fprintf_filtered (stream, " .. ");
531  ada_print_scalar (val_type, U, stream);
532  break;
533  }
534  case 'O':
535  fprintf_filtered (stream, "others");
536  p += 1;
537  break;
538  }
539  }
540 
541 Huh:
542  fprintf_filtered (stream, "?? =>");
543  return 0;
544 }
545 
546 /* Assuming that field FIELD_NUM of TYPE represents variants whose
547  discriminant is contained in OUTER_TYPE, print its components on STREAM.
548  LEVEL is the recursion (indentation) level, in case any of the fields
549  themselves have nested structure, and SHOW is the number of levels of
550  internal structure to show (see ada_print_type). For this purpose,
551  fields nested in a variant part are taken to be at the same level as
552  the fields immediately outside the variant part. */
553 
554 static void
555 print_variant_clauses (struct type *type, int field_num,
556  struct type *outer_type, struct ui_file *stream,
557  int show, int level,
558  const struct type_print_options *flags)
559 {
560  int i;
561  struct type *var_type, *par_type;
562  struct type *discr_type;
563 
564  var_type = TYPE_FIELD_TYPE (type, field_num);
565  discr_type = ada_variant_discrim_type (var_type, outer_type);
566 
567  if (TYPE_CODE (var_type) == TYPE_CODE_PTR)
568  {
569  var_type = TYPE_TARGET_TYPE (var_type);
570  if (var_type == NULL || TYPE_CODE (var_type) != TYPE_CODE_UNION)
571  return;
572  }
573 
574  par_type = ada_find_parallel_type (var_type, "___XVU");
575  if (par_type != NULL)
576  var_type = par_type;
577 
578  for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
579  {
580  fprintf_filtered (stream, "\n%*swhen ", level + 4, "");
581  if (print_choices (var_type, i, stream, discr_type))
582  {
583  if (print_record_field_types (TYPE_FIELD_TYPE (var_type, i),
584  outer_type, stream, show, level + 4,
585  flags)
586  <= 0)
587  fprintf_filtered (stream, " null;");
588  }
589  else
590  print_selected_record_field_types (var_type, outer_type, i, i,
591  stream, show, level + 4, flags);
592  }
593 }
594 
595 /* Assuming that field FIELD_NUM of TYPE is a variant part whose
596  discriminants are contained in OUTER_TYPE, print a description of it
597  on STREAM. LEVEL is the recursion (indentation) level, in case any of
598  the fields themselves have nested structure, and SHOW is the number of
599  levels of internal structure to show (see ada_print_type). For this
600  purpose, fields nested in a variant part are taken to be at the same
601  level as the fields immediately outside the variant part. */
602 
603 static void
604 print_variant_part (struct type *type, int field_num, struct type *outer_type,
605  struct ui_file *stream, int show, int level,
606  const struct type_print_options *flags)
607 {
608  fprintf_filtered (stream, "\n%*scase %s is", level + 4, "",
610  (TYPE_FIELD_TYPE (type, field_num)));
611  print_variant_clauses (type, field_num, outer_type, stream, show,
612  level + 4, flags);
613  fprintf_filtered (stream, "\n%*send case;", level + 4, "");
614 }
615 
616 /* Print a description on STREAM of the fields FLD0 through FLD1 in
617  record or union type TYPE, whose discriminants are in OUTER_TYPE.
618  LEVEL is the recursion (indentation) level, in case any of the
619  fields themselves have nested structure, and SHOW is the number of
620  levels of internal structure to show (see ada_print_type). Does
621  not print parent type information of TYPE. Returns 0 if no fields
622  printed, -1 for an incomplete type, else > 0. Prints each field
623  beginning on a new line, but does not put a new line at end. */
624 
625 static int
626 print_selected_record_field_types (struct type *type, struct type *outer_type,
627  int fld0, int fld1,
628  struct ui_file *stream, int show, int level,
629  const struct type_print_options *flags)
630 {
631  int i, flds;
632 
633  flds = 0;
634 
635  if (fld0 > fld1 && TYPE_STUB (type))
636  return -1;
637 
638  for (i = fld0; i <= fld1; i += 1)
639  {
640  QUIT;
641 
643  ;
644  else if (ada_is_wrapper_field (type, i))
646  stream, show, level, flags);
647  else if (ada_is_variant_part (type, i))
648  {
649  print_variant_part (type, i, outer_type, stream, show, level, flags);
650  flds = 1;
651  }
652  else
653  {
654  flds += 1;
655  fprintf_filtered (stream, "\n%*s", level + 4, "");
657  TYPE_FIELD_NAME (type, i),
658  stream, show - 1, level + 4, flags);
659  fprintf_filtered (stream, ";");
660  }
661  }
662 
663  return flds;
664 }
665 
666 /* Print a description on STREAM of all fields of record or union type
667  TYPE, as for print_selected_record_field_types, above. */
668 
669 static int
670 print_record_field_types (struct type *type, struct type *outer_type,
671  struct ui_file *stream, int show, int level,
672  const struct type_print_options *flags)
673 {
674  return print_selected_record_field_types (type, outer_type,
675  0, TYPE_NFIELDS (type) - 1,
676  stream, show, level, flags);
677 }
678 
679 
680 /* Print record type TYPE on STREAM. LEVEL is the recursion (indentation)
681  level, in case the element type itself has nested structure, and SHOW is
682  the number of levels of internal structure to show (see ada_print_type). */
683 
684 static void
685 print_record_type (struct type *type0, struct ui_file *stream, int show,
686  int level, const struct type_print_options *flags)
687 {
688  struct type *parent_type;
689  struct type *type;
690 
691  type = ada_find_parallel_type (type0, "___XVE");
692  if (type == NULL)
693  type = type0;
694 
695  parent_type = ada_parent_type (type);
696  if (ada_type_name (parent_type) != NULL)
697  {
698  const char *parent_name = decoded_type_name (parent_type);
699 
700  /* If we fail to decode the parent type name, then use the parent
701  type name as is. Not pretty, but should never happen except
702  when the debugging info is incomplete or incorrect. This
703  prevents a crash trying to print a NULL pointer. */
704  if (parent_name == NULL)
705  parent_name = ada_type_name (parent_type);
706  fprintf_filtered (stream, "new %s with record", parent_name);
707  }
708  else if (parent_type == NULL && ada_is_tagged_type (type, 0))
709  fprintf_filtered (stream, "tagged record");
710  else
711  fprintf_filtered (stream, "record");
712 
713  if (show < 0)
714  fprintf_filtered (stream, " ... end record");
715  else
716  {
717  int flds;
718 
719  flds = 0;
720  if (parent_type != NULL && ada_type_name (parent_type) == NULL)
721  flds += print_record_field_types (parent_type, parent_type,
722  stream, show, level, flags);
723  flds += print_record_field_types (type, type, stream, show, level,
724  flags);
725 
726  if (flds > 0)
727  fprintf_filtered (stream, "\n%*send record", level, "");
728  else if (flds < 0)
729  fprintf_filtered (stream, _(" <incomplete type> end record"));
730  else
731  fprintf_filtered (stream, " null; end record");
732  }
733 }
734 
735 /* Print the unchecked union type TYPE in something resembling Ada
736  format on STREAM. LEVEL is the recursion (indentation) level
737  in case the element type itself has nested structure, and SHOW is the
738  number of levels of internal structure to show (see ada_print_type). */
739 static void
740 print_unchecked_union_type (struct type *type, struct ui_file *stream,
741  int show, int level,
742  const struct type_print_options *flags)
743 {
744  if (show < 0)
745  fprintf_filtered (stream, "record (?) is ... end record");
746  else if (TYPE_NFIELDS (type) == 0)
747  fprintf_filtered (stream, "record (?) is null; end record");
748  else
749  {
750  int i;
751 
752  fprintf_filtered (stream, "record (?) is\n%*scase ? is", level + 4, "");
753 
754  for (i = 0; i < TYPE_NFIELDS (type); i += 1)
755  {
756  fprintf_filtered (stream, "\n%*swhen ? =>\n%*s", level + 8, "",
757  level + 12, "");
759  TYPE_FIELD_NAME (type, i),
760  stream, show - 1, level + 12, flags);
761  fprintf_filtered (stream, ";");
762  }
763 
764  fprintf_filtered (stream, "\n%*send case;\n%*send record",
765  level + 4, "", level, "");
766  }
767 }
768 
769 
770 
771 /* Print function or procedure type TYPE on STREAM. Make it a header
772  for function or procedure NAME if NAME is not null. */
773 
774 static void
775 print_func_type (struct type *type, struct ui_file *stream, const char *name,
776  const struct type_print_options *flags)
777 {
778  int i, len = TYPE_NFIELDS (type);
779 
780  if (TYPE_TARGET_TYPE (type) != NULL
782  fprintf_filtered (stream, "procedure");
783  else
784  fprintf_filtered (stream, "function");
785 
786  if (name != NULL && name[0] != '\0')
787  fprintf_filtered (stream, " %s", name);
788 
789  if (len > 0)
790  {
791  fprintf_filtered (stream, " (");
792  for (i = 0; i < len; i += 1)
793  {
794  if (i > 0)
795  {
796  fputs_filtered ("; ", stream);
797  wrap_here (" ");
798  }
799  fprintf_filtered (stream, "a%d: ", i + 1);
800  ada_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0,
801  flags);
802  }
803  fprintf_filtered (stream, ")");
804  }
805 
806  if (TYPE_TARGET_TYPE (type) == NULL)
807  fprintf_filtered (stream, " return <unknown return type>");
809  {
810  fprintf_filtered (stream, " return ");
811  ada_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0, flags);
812  }
813 }
814 
815 
816 /* Print a description of a type TYPE0.
817  Output goes to STREAM (via stdio).
818  If VARSTRING is a non-empty string, print as an Ada variable/field
819  declaration.
820  SHOW+1 is the maximum number of levels of internal type structure
821  to show (this applies to record types, enumerated types, and
822  array types).
823  SHOW is the number of levels of internal type structure to show
824  when there is a type name for the SHOWth deepest level (0th is
825  outer level).
826  When SHOW<0, no inner structure is shown.
827  LEVEL indicates level of recursion (for nested definitions). */
828 
829 void
830 ada_print_type (struct type *type0, const char *varstring,
831  struct ui_file *stream, int show, int level,
832  const struct type_print_options *flags)
833 {
834  struct type *type = ada_check_typedef (ada_get_base_type (type0));
835  char *type_name = decoded_type_name (type0);
836  int is_var_decl = (varstring != NULL && varstring[0] != '\0');
837 
838  if (type == NULL)
839  {
840  if (is_var_decl)
841  fprintf_filtered (stream, "%.*s: ",
842  ada_name_prefix_len (varstring), varstring);
843  fprintf_filtered (stream, "<null type?>");
844  return;
845  }
846 
847  if (show > 0)
849 
850  if (is_var_decl && TYPE_CODE (type) != TYPE_CODE_FUNC)
851  fprintf_filtered (stream, "%.*s: ",
852  ada_name_prefix_len (varstring), varstring);
853 
854  if (type_name != NULL && show <= 0 && !ada_is_aligner_type (type))
855  {
856  fprintf_filtered (stream, "%.*s",
857  ada_name_prefix_len (type_name), type_name);
858  return;
859  }
860 
862  ada_print_type (ada_aligned_type (type), "", stream, show, level, flags);
864  && TYPE_CODE (type) != TYPE_CODE_PTR)
865  print_array_type (type, stream, show, level, flags);
866  else
867  switch (TYPE_CODE (type))
868  {
869  default:
870  fprintf_filtered (stream, "<");
871  c_print_type (type, "", stream, show, level, flags);
872  fprintf_filtered (stream, ">");
873  break;
874  case TYPE_CODE_PTR:
875  case TYPE_CODE_TYPEDEF:
876  fprintf_filtered (stream, "access ");
877  ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
878  flags);
879  break;
880  case TYPE_CODE_REF:
881  fprintf_filtered (stream, "<ref> ");
882  ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
883  flags);
884  break;
885  case TYPE_CODE_ARRAY:
886  print_array_type (type, stream, show, level, flags);
887  break;
888  case TYPE_CODE_BOOL:
889  fprintf_filtered (stream, "(false, true)");
890  break;
891  case TYPE_CODE_INT:
893  print_fixed_point_type (type, stream);
894  else
895  {
896  const char *name = ada_type_name (type);
897 
899  fprintf_filtered (stream, _("<%d-byte integer>"),
900  TYPE_LENGTH (type));
901  else
902  {
903  fprintf_filtered (stream, "range ");
904  print_range_type (type, stream, 1 /* bounds_prefered_p */);
905  }
906  }
907  break;
908  case TYPE_CODE_RANGE:
910  print_fixed_point_type (type, stream);
911  else if (ada_is_modular_type (type))
912  fprintf_filtered (stream, "mod %s",
913  int_string (ada_modulus (type), 10, 0, 0, 1));
914  else
915  {
916  fprintf_filtered (stream, "range ");
917  print_range (type, stream, 1 /* bounds_prefered_p */);
918  }
919  break;
920  case TYPE_CODE_FLT:
921  fprintf_filtered (stream, _("<%d-byte float>"), TYPE_LENGTH (type));
922  break;
923  case TYPE_CODE_ENUM:
924  if (show < 0)
925  fprintf_filtered (stream, "(...)");
926  else
927  print_enum_type (type, stream);
928  break;
929  case TYPE_CODE_STRUCT:
931  print_array_type (type, stream, show, level, flags);
933  fprintf_filtered (stream,
934  _("array (?) of ? (<mal-formed descriptor>)"));
935  else
936  print_record_type (type, stream, show, level, flags);
937  break;
938  case TYPE_CODE_UNION:
939  print_unchecked_union_type (type, stream, show, level, flags);
940  break;
941  case TYPE_CODE_FUNC:
942  print_func_type (type, stream, varstring, flags);
943  break;
944  }
945 }
946 
947 /* Implement the la_print_typedef language method for Ada. */
948 
949 void
951  struct ui_file *stream)
952 {
954  ada_print_type (type, "", stream, 0, 0, &type_print_raw_options);
955  fprintf_filtered (stream, "\n");
956 }
const char * string
Definition: signals.c:50
static void print_array_type(struct type *type, struct ui_file *stream, int show, int level, const struct type_print_options *flags)
static void print_range(struct type *type, struct ui_file *stream, int bounds_prefered_p)
std::string target_float_to_string(const gdb_byte *addr, const struct type *type, const char *format)
static void print_record_type(struct type *type0, struct ui_file *stream, int show, int level, const struct type_print_options *flags)
static void print_func_type(struct type *type, struct ui_file *stream, const char *name, const struct type_print_options *flags)
int ada_is_bogus_array_descriptor(struct type *type)
Definition: ada-lang.c:1961
struct type * ada_parent_type(struct type *type)
Definition: ada-lang.c:6955
#define TYPE_FIELD_NAME(thistype, n)
Definition: gdbtypes.h:1372
static void print_range_type(struct type *raw_type, struct ui_file *stream, int bounds_prefered_p)
#define TYPE_NAME(thistype)
Definition: gdbtypes.h:1224
const struct type_print_options type_print_raw_options
Definition: typeprint.c:40
struct type * ada_variant_discrim_type(struct type *var_type, struct type *outer_type)
Definition: ada-lang.c:7045
void ada_print_type(struct type *type0, const char *varstring, struct ui_file *stream, int show, int level, const struct type_print_options *flags)
static void print_dynamic_range_bound(struct type *type, const char *name, int name_len, const char *suffix, struct ui_file *stream)
struct type * ada_get_base_type(struct type *raw_type)
Definition: ada-lang.c:9536
struct type * ada_coerce_to_simple_array_type(struct type *type)
Definition: ada-lang.c:2102
static int type_is_full_subrange_of_target_type(struct type *type)
#define _(String)
Definition: gdb_locale.h:35
int ada_is_range_type_name(const char *name)
Definition: ada-lang.c:11944
struct type * ada_check_typedef(struct type *type)
Definition: ada-lang.c:9307
#define TYPE_FIELD_ENUMVAL(thistype, n)
Definition: gdbtypes.h:1375
#define TYPE_FIELD_TYPE(thistype, n)
Definition: gdbtypes.h:1371
#define END_CATCH
mach_port_t kern_return_t mach_port_t msgports mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
Definition: gnu-nat.c:1891
#define TRY
bool get_int_var_value(const char *name, LONGEST &value)
Definition: ada-lang.c:11826
const char *const name
Definition: aarch64-tdep.c:76
struct value * ada_scaling_factor(struct type *type)
Definition: ada-lang.c:11719
void ada_fixup_array_indexes_type(struct type *index_desc_type)
Definition: ada-lang.c:1538
const gdb_byte * value_contents(struct value *value)
Definition: value.c:1407
#define CATCH(EXCEPTION, MASK)
static void print_variant_part(struct type *type, int field_num, struct type *outer_type, struct ui_file *stream, int show, int level, const struct type_print_options *flags)
LONGEST ada_discrete_type_high_bound(struct type *type)
Definition: ada-lang.c:800
static void print_variant_clauses(struct type *type, int field_num, struct type *outer_type, struct ui_file *stream, int show, int level, const struct type_print_options *flags)
static void print_fixed_point_type(struct type *type, struct ui_file *stream)
void fprintf_filtered(struct ui_file *stream, const char *format,...)
Definition: utils.c:2008
ULONGEST ada_modulus(struct type *type)
Definition: ada-lang.c:11967
int ada_is_tagged_type(struct type *type, int refok)
Definition: ada-lang.c:6664
static void print_enum_type(struct type *type, struct ui_file *stream)
int ada_name_prefix_len(const char *name)
Definition: ada-lang.c:639
int ada_is_simple_array_type(struct type *type)
Definition: ada-lang.c:1929
static char * decoded_type_name(struct type *type)
Definition: ada-typeprint.c:56
void fputs_filtered(const char *linebuffer, struct ui_file *stream)
Definition: utils.c:1811
static int print_record_field_types(struct type *, struct type *, struct ui_file *, int, int, const struct type_print_options *)
struct value * ada_delta(struct type *type)
Definition: ada-lang.c:11701
static void print_unchecked_union_type(struct type *type, struct ui_file *stream, int show, int level, const struct type_print_options *flags)
struct type * ada_find_parallel_type(struct type *type, const char *suffix)
Definition: ada-lang.c:8242
Definition: gdbtypes.h:749
int ada_is_wrapper_field(struct type *type, int field_num)
Definition: ada-lang.c:7002
static const char * type
Definition: language.c:113
void ada_print_typedef(struct type *type, struct symbol *new_symbol, struct ui_file *stream)
static struct symbol * new_symbol(struct die_info *, struct type *, struct dwarf2_cu *)
Definition: dwarf2read.c:21568
LONGEST bitsize
Definition: value.c:246
int ada_is_array_descriptor_type(struct type *type)
Definition: ada-lang.c:1943
static char * name_buffer
Definition: ada-typeprint.c:49
int value_equal(struct value *arg1, struct value *arg2)
Definition: valarith.c:1474
static int print_choices(struct type *type, int field_num, struct ui_file *stream, struct type *val_type)
#define TYPE_FIELD_BITSIZE(thistype, n)
Definition: gdbtypes.h:1380
int ada_is_constrained_packed_array_type(struct type *type)
Definition: ada-lang.c:2131
#define gdb_assert(expr)
Definition: gdb_assert.h:32
Definition: value.c:169
void wrap_here(const char *indent)
Definition: utils.c:1596
int ada_scan_number(const char str[], int k, LONGEST *R, int *new_k)
Definition: ada-lang.c:7123
LONGEST ada_discrete_type_low_bound(struct type *type)
Definition: ada-lang.c:821
int ada_is_fixed_point_type(struct type *type)
Definition: ada-lang.c:11672
PTR xrealloc(PTR ptr, size_t size)
Definition: common-utils.c:52
int ada_is_ignored_field(struct type *type, int field_num)
Definition: ada-lang.c:6623
int ada_array_arity(struct type *type)
Definition: ada-lang.c:2967
const char * ada_variant_discrim_name(struct type *type0)
Definition: ada-lang.c:7069
#define TYPE_TARGET_TYPE(thistype)
Definition: gdbtypes.h:1226
static void print_range_bound(struct type *type, const char *bounds, int *n, struct ui_file *stream)
struct type * ada_aligned_type(struct type *type)
Definition: ada-lang.c:9584
#define TYPE_CODE(thistype)
Definition: gdbtypes.h:1238
#define TYPE_INDEX_TYPE(type)
Definition: gdbtypes.h:1242
const char * ada_type_name(struct type *type)
Definition: ada-lang.c:8151
void c_print_type(struct type *, const char *, struct ui_file *, int, int, const struct type_print_options *)
Definition: c-typeprint.c:164
int ada_is_variant_part(struct type *type, int field_num)
Definition: ada-lang.c:7029
#define TYPE_NFIELDS(thistype)
Definition: gdbtypes.h:1239
Definition: aarch64-insn.h:36
struct type * ada_array_element_type(struct type *type, int nindices)
Definition: ada-lang.c:2995
#define TYPE_STUB(t)
Definition: gdbtypes.h:217
int ada_is_modular_type(struct type *type)
Definition: ada-lang.c:11955
const char * ada_enum_name(const char *name)
Definition: ada-lang.c:9613
int is_dynamic_type(struct type *type)
Definition: gdbtypes.c:1976
int ada_is_aligner_type(struct type *type)
Definition: ada-lang.c:9520
struct type * value_type(const struct value *value)
Definition: value.c:1095
Definition: ia64-tdep.c:84
int ada_is_parent_field(struct type *type, int field_num)
Definition: ada-lang.c:6986
#define TYPE_LENGTH(thistype)
Definition: gdbtypes.h:1235
#define QUIT
Definition: defs.h:179
void ada_print_scalar(struct type *, LONGEST, struct ui_file *)
Definition: ada-valprint.c:360
static int print_selected_record_field_types(struct type *, struct type *, int, int, struct ui_file *, int, int, const struct type_print_options *)
long long LONGEST
Definition: common-types.h:52
static int name_buffer_len
Definition: ada-typeprint.c:50