Convert dwarf2_per_objfile::die_type_hash to new hash table
[binutils-gdb.git] / gdb / ada-valprint.c
blob937bd39e87dbacddca382be968876d523a8d215d
1 /* Support for printing Ada values for GDB, the GNU debugger.
3 Copyright (C) 1986-2024 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 #include <ctype.h>
21 #include "event-top.h"
22 #include "extract-store-integer.h"
23 #include "gdbtypes.h"
24 #include "expression.h"
25 #include "value.h"
26 #include "valprint.h"
27 #include "language.h"
28 #include "annotate.h"
29 #include "ada-lang.h"
30 #include "target-float.h"
31 #include "cli/cli-style.h"
32 #include "gdbarch.h"
34 static int print_field_values (struct value *, struct value *,
35 struct ui_file *, int,
36 const struct value_print_options *,
37 int, const struct language_defn *);
41 /* Assuming TYPE is a simple array type, prints its lower bound on STREAM,
42 if non-standard (i.e., other than 1 for numbers, other than lower bound
43 of index type for enumerated type). Returns 1 if something printed,
44 otherwise 0. */
46 static int
47 print_optional_low_bound (struct ui_file *stream, struct type *type,
48 const struct value_print_options *options)
50 struct type *index_type;
51 LONGEST low_bound;
52 LONGEST high_bound;
54 if (options->print_array_indexes)
55 return 0;
57 if (!get_array_bounds (type, &low_bound, &high_bound))
58 return 0;
60 /* If this is an empty array, then don't print the lower bound.
61 That would be confusing, because we would print the lower bound,
62 followed by... nothing! */
63 if (low_bound > high_bound)
64 return 0;
66 index_type = type->index_type ();
68 while (index_type->code () == TYPE_CODE_RANGE)
70 /* We need to know what the base type is, in order to do the
71 appropriate check below. Otherwise, if this is a subrange
72 of an enumerated type, where the underlying value of the
73 first element is typically 0, we might test the low bound
74 against the wrong value. */
75 index_type = index_type->target_type ();
78 /* Don't print the lower bound if it's the default one. */
79 switch (index_type->code ())
81 case TYPE_CODE_BOOL:
82 case TYPE_CODE_CHAR:
83 if (low_bound == 0)
84 return 0;
85 break;
86 case TYPE_CODE_ENUM:
87 if (low_bound == 0)
88 return 0;
89 low_bound = index_type->field (low_bound).loc_enumval ();
90 break;
91 case TYPE_CODE_UNDEF:
92 index_type = NULL;
93 [[fallthrough]];
94 default:
95 if (low_bound == 1)
96 return 0;
97 break;
100 ada_print_scalar (index_type, low_bound, stream);
101 gdb_printf (stream, " => ");
102 return 1;
105 /* Version of val_print_array_elements for GNAT-style packed arrays.
106 Prints elements of packed array of type TYPE from VALADDR on
107 STREAM. Formats according to OPTIONS and separates with commas.
108 RECURSE is the recursion (nesting) level. TYPE must have been
109 decoded (as by ada_coerce_to_simple_array). */
111 static void
112 val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
113 int offset, struct ui_file *stream,
114 int recurse,
115 const struct value_print_options *options)
117 unsigned int i;
118 unsigned int things_printed = 0;
119 unsigned len;
120 struct type *elttype, *index_type;
121 unsigned long bitsize = type->field (0).bitsize ();
122 LONGEST low = 0;
124 scoped_value_mark mark;
126 elttype = type->target_type ();
127 index_type = type->index_type ();
130 LONGEST high;
132 if (!get_discrete_bounds (index_type, &low, &high))
133 len = 1;
134 else if (low > high)
136 /* The array length should normally be HIGH_POS - LOW_POS + 1.
137 But in Ada we allow LOW_POS to be greater than HIGH_POS for
138 empty arrays. In that situation, the array length is just zero,
139 not negative! */
140 len = 0;
142 else
143 len = high - low + 1;
146 if (index_type->code () == TYPE_CODE_RANGE)
147 index_type = index_type->target_type ();
149 i = 0;
150 annotate_array_section_begin (i, elttype);
152 while (i < len && things_printed < options->print_max)
154 /* Both this outer loop and the inner loop that checks for
155 duplicates may allocate many values. To avoid using too much
156 memory, both spots release values as they work. */
157 scoped_value_mark outer_free_values;
159 struct value *v0, *v1;
160 int i0;
162 if (i != 0)
164 if (options->prettyformat_arrays)
166 gdb_printf (stream, ",\n");
167 print_spaces (2 + 2 * recurse, stream);
169 else
171 gdb_printf (stream, ", ");
174 else if (options->prettyformat_arrays)
176 gdb_printf (stream, "\n");
177 print_spaces (2 + 2 * recurse, stream);
179 stream->wrap_here (2 + 2 * recurse);
180 maybe_print_array_index (index_type, i + low, stream, options);
182 i0 = i;
183 v0 = ada_value_primitive_packed_val (NULL, valaddr + offset,
184 (i0 * bitsize) / HOST_CHAR_BIT,
185 (i0 * bitsize) % HOST_CHAR_BIT,
186 bitsize, elttype);
187 while (1)
189 /* Make sure to free any values in the inner loop. */
190 scoped_value_mark free_values;
192 i += 1;
193 if (i >= len)
194 break;
195 v1 = ada_value_primitive_packed_val (NULL, valaddr + offset,
196 (i * bitsize) / HOST_CHAR_BIT,
197 (i * bitsize) % HOST_CHAR_BIT,
198 bitsize, elttype);
199 if (check_typedef (v0->type ())->length ()
200 != check_typedef (v1->type ())->length ())
201 break;
202 if (!v0->contents_eq (v0->embedded_offset (),
203 v1, v1->embedded_offset (),
204 check_typedef (v0->type ())->length ()))
205 break;
208 if (i - i0 > options->repeat_count_threshold)
210 struct value_print_options opts = *options;
212 opts.deref_ref = false;
213 common_val_print (v0, stream, recurse + 1, &opts, current_language);
214 annotate_elt_rep (i - i0);
215 gdb_printf (stream, _(" %p[<repeats %u times>%p]"),
216 metadata_style.style ().ptr (), i - i0, nullptr);
217 annotate_elt_rep_end ();
220 else
222 int j;
223 struct value_print_options opts = *options;
225 opts.deref_ref = false;
226 for (j = i0; j < i; j += 1)
228 if (j > i0)
230 if (options->prettyformat_arrays)
232 gdb_printf (stream, ",\n");
233 print_spaces (2 + 2 * recurse, stream);
235 else
237 gdb_printf (stream, ", ");
239 stream->wrap_here (2 + 2 * recurse);
240 maybe_print_array_index (index_type, j + low,
241 stream, options);
243 common_val_print (v0, stream, recurse + 1, &opts,
244 current_language);
245 annotate_elt ();
248 things_printed += i - i0;
250 annotate_array_section_end ();
251 if (i < len)
253 gdb_printf (stream, "...");
257 /* Print the character C on STREAM as part of the contents of a literal
258 string whose delimiter is QUOTER. TYPE_LEN is the length in bytes
259 of the character. */
261 void
262 ada_emit_char (int c, struct type *type, struct ui_file *stream,
263 int quoter, int type_len)
265 /* If this character fits in the normal ASCII range, and is
266 a printable character, then print the character as if it was
267 an ASCII character, even if this is a wide character.
268 The UCHAR_MAX check is necessary because the isascii function
269 requires that its argument have a value of an unsigned char,
270 or EOF (EOF is obviously not printable). */
271 if (c <= UCHAR_MAX && isascii (c) && isprint (c))
273 if (c == quoter && c == '"')
274 gdb_printf (stream, "\"\"");
275 else
276 gdb_printf (stream, "%c", c);
278 else
280 /* Follow GNAT's lead here and only use 6 digits for
281 wide_wide_character. */
282 gdb_printf (stream, "[\"%0*x\"]", std::min (6, type_len * 2), c);
286 /* Character #I of STRING, given that TYPE_LEN is the size in bytes
287 of a character. */
289 static int
290 char_at (const gdb_byte *string, int i, int type_len,
291 enum bfd_endian byte_order)
293 if (type_len == 1)
294 return string[i];
295 else
296 return (int) extract_unsigned_integer (string + type_len * i,
297 type_len, byte_order);
300 /* Print a floating-point value of type TYPE, pointed to in GDB by
301 VALADDR, on STREAM. Use Ada formatting conventions: there must be
302 a decimal point, and at least one digit before and after the
303 point. We use the GNAT format for NaNs and infinities. */
305 static void
306 ada_print_floating (const gdb_byte *valaddr, struct type *type,
307 struct ui_file *stream)
309 string_file tmp_stream;
311 print_floating (valaddr, type, &tmp_stream);
313 std::string s = tmp_stream.release ();
314 size_t skip_count = 0;
316 /* Don't try to modify a result representing an error. */
317 if (s[0] == '<')
319 gdb_puts (s.c_str (), stream);
320 return;
323 /* Modify for Ada rules. */
325 size_t pos = s.find ("inf");
326 if (pos == std::string::npos)
327 pos = s.find ("Inf");
328 if (pos == std::string::npos)
329 pos = s.find ("INF");
330 if (pos != std::string::npos)
331 s.replace (pos, 3, "Inf");
333 if (pos == std::string::npos)
335 pos = s.find ("nan");
336 if (pos == std::string::npos)
337 pos = s.find ("NaN");
338 if (pos == std::string::npos)
339 pos = s.find ("Nan");
340 if (pos != std::string::npos)
342 s[pos] = s[pos + 2] = 'N';
343 if (s[0] == '-')
344 skip_count = 1;
348 if (pos == std::string::npos
349 && s.find ('.') == std::string::npos)
351 pos = s.find ('e');
352 if (pos == std::string::npos)
353 gdb_printf (stream, "%s.0", s.c_str ());
354 else
355 gdb_printf (stream, "%.*s.0%s", (int) pos, s.c_str (), &s[pos]);
357 else
358 gdb_printf (stream, "%s", &s[skip_count]);
361 void
362 ada_printchar (int c, struct type *type, struct ui_file *stream)
364 gdb_puts ("'", stream);
365 ada_emit_char (c, type, stream, '\'', type->length ());
366 gdb_puts ("'", stream);
369 /* [From print_type_scalar in typeprint.c]. Print VAL on STREAM in a
370 form appropriate for TYPE, if non-NULL. If TYPE is NULL, print VAL
371 like a default signed integer. */
373 void
374 ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream)
376 if (!type)
378 print_longest (stream, 'd', 0, val);
379 return;
382 type = ada_check_typedef (type);
384 switch (type->code ())
387 case TYPE_CODE_ENUM:
389 std::optional<LONGEST> posn = discrete_position (type, val);
390 if (posn.has_value ())
391 fputs_styled (ada_enum_name (type->field (*posn).name ()),
392 variable_name_style.style (), stream);
393 else
394 print_longest (stream, 'd', 0, val);
396 break;
398 case TYPE_CODE_INT:
399 print_longest (stream, type->is_unsigned () ? 'u' : 'd', 0, val);
400 break;
402 case TYPE_CODE_CHAR:
403 current_language->printchar (val, type, stream);
404 break;
406 case TYPE_CODE_BOOL:
407 gdb_printf (stream, val ? "true" : "false");
408 break;
410 case TYPE_CODE_RANGE:
411 ada_print_scalar (type->target_type (), val, stream);
412 return;
414 case TYPE_CODE_UNDEF:
415 case TYPE_CODE_PTR:
416 case TYPE_CODE_ARRAY:
417 case TYPE_CODE_STRUCT:
418 case TYPE_CODE_UNION:
419 case TYPE_CODE_FUNC:
420 case TYPE_CODE_FLT:
421 case TYPE_CODE_VOID:
422 case TYPE_CODE_SET:
423 case TYPE_CODE_STRING:
424 case TYPE_CODE_ERROR:
425 case TYPE_CODE_MEMBERPTR:
426 case TYPE_CODE_METHODPTR:
427 case TYPE_CODE_METHOD:
428 case TYPE_CODE_REF:
429 warning (_("internal error: unhandled type in ada_print_scalar"));
430 break;
432 default:
433 error (_("Invalid type code in symbol table."));
437 /* Print the character string STRING, printing at most LENGTH characters.
438 Printing stops early if the number hits print_max; repeat counts
439 are printed as appropriate. Print ellipses at the end if we
440 had to stop before printing LENGTH characters, or if FORCE_ELLIPSES.
441 TYPE_LEN is the length (1 or 2) of the character type. */
443 static void
444 printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
445 unsigned int length, int force_ellipses, int type_len,
446 const struct value_print_options *options)
448 enum bfd_endian byte_order = type_byte_order (elttype);
449 unsigned int i;
450 unsigned int things_printed = 0;
451 int in_quotes = 0;
452 int need_comma = 0;
454 if (length == 0)
456 gdb_puts ("\"\"", stream);
457 return;
460 unsigned int print_max_chars = get_print_max_chars (options);
461 for (i = 0; i < length && things_printed < print_max_chars; i += 1)
463 /* Position of the character we are examining
464 to see whether it is repeated. */
465 unsigned int rep1;
466 /* Number of repetitions we have detected so far. */
467 unsigned int reps;
469 QUIT;
471 if (need_comma)
473 gdb_puts (", ", stream);
474 need_comma = 0;
477 rep1 = i + 1;
478 reps = 1;
479 while (rep1 < length
480 && char_at (string, rep1, type_len, byte_order)
481 == char_at (string, i, type_len, byte_order))
483 rep1 += 1;
484 reps += 1;
487 if (reps > options->repeat_count_threshold)
489 if (in_quotes)
491 gdb_puts ("\", ", stream);
492 in_quotes = 0;
494 gdb_puts ("'", stream);
495 ada_emit_char (char_at (string, i, type_len, byte_order),
496 elttype, stream, '\'', type_len);
497 gdb_puts ("'", stream);
498 gdb_printf (stream, _(" %p[<repeats %u times>%p]"),
499 metadata_style.style ().ptr (), reps, nullptr);
500 i = rep1 - 1;
501 things_printed += options->repeat_count_threshold;
502 need_comma = 1;
504 else
506 if (!in_quotes)
508 gdb_puts ("\"", stream);
509 in_quotes = 1;
511 ada_emit_char (char_at (string, i, type_len, byte_order),
512 elttype, stream, '"', type_len);
513 things_printed += 1;
517 /* Terminate the quotes if necessary. */
518 if (in_quotes)
519 gdb_puts ("\"", stream);
521 if (force_ellipses || i < length)
522 gdb_puts ("...", stream);
525 void
526 ada_printstr (struct ui_file *stream, struct type *type,
527 const gdb_byte *string, unsigned int length,
528 const char *encoding, int force_ellipses,
529 const struct value_print_options *options)
531 printstr (stream, type, string, length, force_ellipses, type->length (),
532 options);
535 static int
536 print_variant_part (struct value *value, int field_num,
537 struct value *outer_value,
538 struct ui_file *stream, int recurse,
539 const struct value_print_options *options,
540 int comma_needed,
541 const struct language_defn *language)
543 struct type *type = value->type ();
544 struct type *var_type = type->field (field_num).type ();
545 int which = ada_which_variant_applies (var_type, outer_value);
547 if (which < 0)
548 return 0;
550 struct value *variant_field = value_field (value, field_num);
551 struct value *active_component = value_field (variant_field, which);
552 return print_field_values (active_component, outer_value, stream, recurse,
553 options, comma_needed, language);
556 /* Print out fields of VALUE.
558 STREAM, RECURSE, and OPTIONS have the same meanings as in
559 ada_print_value and ada_value_print.
561 OUTER_VALUE gives the enclosing record (used to get discriminant
562 values when printing variant parts).
564 COMMA_NEEDED is 1 if fields have been printed at the current recursion
565 level, so that a comma is needed before any field printed by this
566 call.
568 Returns 1 if COMMA_NEEDED or any fields were printed. */
570 static int
571 print_field_values (struct value *value, struct value *outer_value,
572 struct ui_file *stream, int recurse,
573 const struct value_print_options *options,
574 int comma_needed,
575 const struct language_defn *language)
577 int i, len;
579 struct type *type = value->type ();
580 len = type->num_fields ();
582 for (i = 0; i < len; i += 1)
584 if (ada_is_ignored_field (type, i))
585 continue;
587 if (ada_is_wrapper_field (type, i))
589 struct value *field_val = ada_value_primitive_field (value, 0,
590 i, type);
591 comma_needed =
592 print_field_values (field_val, field_val,
593 stream, recurse, options,
594 comma_needed, language);
595 continue;
597 else if (ada_is_variant_part (type, i))
599 comma_needed =
600 print_variant_part (value, i, outer_value, stream, recurse,
601 options, comma_needed, language);
602 continue;
605 if (comma_needed)
606 gdb_printf (stream, ", ");
607 comma_needed = 1;
609 if (options->prettyformat)
611 gdb_printf (stream, "\n");
612 print_spaces (2 + 2 * recurse, stream);
614 else
616 stream->wrap_here (2 + 2 * recurse);
619 annotate_field_begin (type->field (i).type ());
620 gdb_printf (stream, "%.*s",
621 ada_name_prefix_len (type->field (i).name ()),
622 type->field (i).name ());
623 annotate_field_name_end ();
624 gdb_puts (" => ", stream);
625 annotate_field_value ();
627 if (type->field (i).is_packed ())
629 /* Bitfields require special handling, especially due to byte
630 order problems. */
631 if (type->field (i).is_ignored ())
633 fputs_styled (_("<optimized out or zero length>"),
634 metadata_style.style (), stream);
636 else
638 struct value *v;
639 int bit_pos = type->field (i).loc_bitpos ();
640 int bit_size = type->field (i).bitsize ();
641 struct value_print_options opts;
643 v = ada_value_primitive_packed_val
644 (value, nullptr,
645 bit_pos / HOST_CHAR_BIT,
646 bit_pos % HOST_CHAR_BIT,
647 bit_size, type->field (i).type ());
648 opts = *options;
649 opts.deref_ref = false;
650 common_val_print (v, stream, recurse + 1, &opts, language);
653 else
655 struct value_print_options opts = *options;
657 opts.deref_ref = false;
659 struct value *v = value_field (value, i);
660 common_val_print (v, stream, recurse + 1, &opts, language);
662 annotate_field_end ();
665 return comma_needed;
668 /* Implement Ada val_print'ing for the case where TYPE is
669 a TYPE_CODE_ARRAY of characters. */
671 static void
672 ada_val_print_string (struct type *type, const gdb_byte *valaddr,
673 int offset_aligned,
674 struct ui_file *stream, int recurse,
675 const struct value_print_options *options)
677 enum bfd_endian byte_order = type_byte_order (type);
678 struct type *elttype = type->target_type ();
679 unsigned int eltlen;
680 unsigned int len;
682 /* We know that ELTTYPE cannot possibly be null, because we assume
683 that we're called only when TYPE is a string-like type.
684 Similarly, the size of ELTTYPE should also be non-null, since
685 it's a character-like type. */
686 gdb_assert (elttype != NULL);
687 gdb_assert (elttype->length () != 0);
689 eltlen = elttype->length ();
690 len = type->length () / eltlen;
692 /* If requested, look for the first null char and only print
693 elements up to it. */
694 if (options->stop_print_at_null)
696 unsigned int print_max_chars = get_print_max_chars (options);
697 int temp_len;
699 /* Look for a NULL char. */
700 for (temp_len = 0;
701 (temp_len < len
702 && temp_len < print_max_chars
703 && char_at (valaddr + offset_aligned,
704 temp_len, eltlen, byte_order) != 0);
705 temp_len += 1);
706 len = temp_len;
709 printstr (stream, elttype, valaddr + offset_aligned, len, 0,
710 eltlen, options);
713 /* Implement Ada value_print'ing for the case where TYPE is a
714 TYPE_CODE_PTR. */
716 static void
717 ada_value_print_ptr (struct value *val,
718 struct ui_file *stream, int recurse,
719 const struct value_print_options *options)
721 if (!options->format
722 && val->type ()->target_type ()->code () == TYPE_CODE_INT
723 && val->type ()->target_type ()->length () == 0)
725 gdb_puts ("null", stream);
726 return;
729 common_val_print (val, stream, recurse, options, language_def (language_c));
731 struct type *type = ada_check_typedef (val->type ());
732 if (ada_is_tag_type (type))
734 gdb::unique_xmalloc_ptr<char> name = ada_tag_name (val);
736 if (name != NULL)
737 gdb_printf (stream, " (%s)", name.get ());
741 /* Implement Ada val_print'ing for the case where TYPE is
742 a TYPE_CODE_INT or TYPE_CODE_RANGE. */
744 static void
745 ada_value_print_num (struct value *val, struct ui_file *stream, int recurse,
746 const struct value_print_options *options)
748 struct type *type = ada_check_typedef (val->type ());
749 const gdb_byte *valaddr = val->contents_for_printing ().data ();
751 if (type->code () == TYPE_CODE_RANGE
752 && (type->target_type ()->code () == TYPE_CODE_ENUM
753 || type->target_type ()->code () == TYPE_CODE_BOOL
754 || type->target_type ()->code () == TYPE_CODE_CHAR))
756 /* For enum-valued ranges, we want to recurse, because we'll end
757 up printing the constant's name rather than its numeric
758 value. Character and fixed-point types are also printed
759 differently, so recurse for those as well. */
760 struct type *target_type = type->target_type ();
761 val = value_cast (target_type, val);
762 common_val_print (val, stream, recurse + 1, options,
763 language_def (language_ada));
764 return;
766 else
768 int format = (options->format ? options->format
769 : options->output_format);
771 if (format)
773 struct value_print_options opts = *options;
775 opts.format = format;
776 value_print_scalar_formatted (val, &opts, 0, stream);
778 else if (ada_is_system_address_type (type))
780 /* FIXME: We want to print System.Address variables using
781 the same format as for any access type. But for some
782 reason GNAT encodes the System.Address type as an int,
783 so we have to work-around this deficiency by handling
784 System.Address values as a special case. */
786 struct gdbarch *gdbarch = type->arch ();
787 struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
788 CORE_ADDR addr = extract_typed_address (valaddr, ptr_type);
790 gdb_printf (stream, "(");
791 type_print (type, "", stream, -1);
792 gdb_printf (stream, ") ");
793 gdb_puts (paddress (gdbarch, addr), stream);
795 else
797 value_print_scalar_formatted (val, options, 0, stream);
798 if (ada_is_character_type (type))
800 LONGEST c;
802 gdb_puts (" ", stream);
803 c = unpack_long (type, valaddr);
804 ada_printchar (c, type, stream);
807 return;
811 /* Implement Ada val_print'ing for the case where TYPE is
812 a TYPE_CODE_ENUM. */
814 static void
815 ada_val_print_enum (struct value *value, struct ui_file *stream, int recurse,
816 const struct value_print_options *options)
818 LONGEST val;
820 if (options->format)
822 value_print_scalar_formatted (value, options, 0, stream);
823 return;
826 struct type *type = ada_check_typedef (value->type ());
827 const gdb_byte *valaddr = value->contents_for_printing ().data ();
828 int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr;
830 val = unpack_long (type, valaddr + offset_aligned);
831 std::optional<LONGEST> posn = discrete_position (type, val);
832 if (posn.has_value ())
834 const char *name = ada_enum_name (type->field (*posn).name ());
836 if (name[0] == '\'')
837 gdb_printf (stream, "%ld %ps", (long) val,
838 styled_string (variable_name_style.style (),
839 name));
840 else
841 fputs_styled (name, variable_name_style.style (), stream);
843 else
844 print_longest (stream, 'd', 0, val);
847 /* Implement Ada val_print'ing for the case where the type is
848 TYPE_CODE_STRUCT or TYPE_CODE_UNION. */
850 static void
851 ada_val_print_struct_union (struct value *value,
852 struct ui_file *stream,
853 int recurse,
854 const struct value_print_options *options)
856 gdb_printf (stream, "(");
858 if (print_field_values (value, value, stream, recurse, options,
859 0, language_def (language_ada)) != 0
860 && options->prettyformat)
862 gdb_printf (stream, "\n");
863 print_spaces (2 * recurse, stream);
866 gdb_printf (stream, ")");
869 /* Implement Ada value_print'ing for the case where TYPE is a
870 TYPE_CODE_ARRAY. */
872 static void
873 ada_value_print_array (struct value *val, struct ui_file *stream, int recurse,
874 const struct value_print_options *options)
876 struct type *type = ada_check_typedef (val->type ());
878 /* For an array of characters, print with string syntax. */
879 if (ada_is_string_type (type)
880 && (options->format == 0 || options->format == 's'))
882 const gdb_byte *valaddr = val->contents_for_printing ().data ();
883 int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr;
885 ada_val_print_string (type, valaddr, offset_aligned, stream, recurse,
886 options);
887 return;
890 gdb_printf (stream, "(");
891 print_optional_low_bound (stream, type, options);
893 if (val->entirely_optimized_out ())
894 val_print_optimized_out (val, stream);
895 else if (type->field (0).bitsize () > 0)
897 const gdb_byte *valaddr = val->contents_for_printing ().data ();
898 int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr;
899 val_print_packed_array_elements (type, valaddr, offset_aligned,
900 stream, recurse, options);
902 else
903 value_print_array_elements (val, stream, recurse, options, 0);
904 gdb_printf (stream, ")");
907 /* Implement Ada val_print'ing for the case where TYPE is
908 a TYPE_CODE_REF. */
910 static void
911 ada_val_print_ref (struct type *type, const gdb_byte *valaddr,
912 int offset, int offset_aligned, CORE_ADDR address,
913 struct ui_file *stream, int recurse,
914 struct value *original_value,
915 const struct value_print_options *options)
917 /* For references, the debugger is expected to print the value as
918 an address if DEREF_REF is null. But printing an address in place
919 of the object value would be confusing to an Ada programmer.
920 So, for Ada values, we print the actual dereferenced value
921 regardless. */
922 struct type *elttype = check_typedef (type->target_type ());
923 struct value *deref_val;
924 CORE_ADDR deref_val_int;
926 if (elttype->code () == TYPE_CODE_UNDEF)
928 fputs_styled ("<ref to undefined type>", metadata_style.style (),
929 stream);
930 return;
933 deref_val = coerce_ref_if_computed (original_value);
934 if (deref_val)
936 if (ada_is_tagged_type (deref_val->type (), 1))
937 deref_val = ada_tag_value_at_base_address (deref_val);
939 common_val_print (deref_val, stream, recurse + 1, options,
940 language_def (language_ada));
941 return;
944 deref_val_int = unpack_pointer (type, valaddr + offset_aligned);
945 if (deref_val_int == 0)
947 gdb_puts ("(null)", stream);
948 return;
951 deref_val
952 = ada_value_ind (value_from_pointer (lookup_pointer_type (elttype),
953 deref_val_int));
954 if (ada_is_tagged_type (deref_val->type (), 1))
955 deref_val = ada_tag_value_at_base_address (deref_val);
957 if (deref_val->lazy ())
958 deref_val->fetch_lazy ();
960 common_val_print (deref_val, stream, recurse + 1,
961 options, language_def (language_ada));
964 /* See the comment on ada_value_print. This function differs in that
965 it does not catch evaluation errors (leaving that to its
966 caller). */
968 void
969 ada_value_print_inner (struct value *val, struct ui_file *stream, int recurse,
970 const struct value_print_options *options)
972 struct type *type = ada_check_typedef (val->type ());
974 if (ada_is_array_descriptor_type (type)
975 || (ada_is_constrained_packed_array_type (type)
976 && type->code () != TYPE_CODE_PTR))
978 /* If this is a reference, coerce it now. This helps taking
979 care of the case where ADDRESS is meaningless because
980 original_value was not an lval. */
981 val = coerce_ref (val);
982 val = ada_get_decoded_value (val);
983 if (val == nullptr)
985 gdb_assert (type->code () == TYPE_CODE_TYPEDEF);
986 gdb_printf (stream, "0x0");
987 return;
990 else
991 val = ada_to_fixed_value (val);
993 type = val->type ();
994 struct type *saved_type = type;
996 const gdb_byte *valaddr = val->contents_for_printing ().data ();
997 CORE_ADDR address = val->address ();
998 gdb::array_view<const gdb_byte> view
999 = gdb::make_array_view (valaddr, type->length ());
1000 type = ada_check_typedef (resolve_dynamic_type (type, view, address));
1001 if (type != saved_type)
1003 val = val->copy ();
1004 val->deprecated_set_type (type);
1007 if (is_fixed_point_type (type))
1008 type = type->fixed_point_type_base_type ();
1010 switch (type->code ())
1012 default:
1013 common_val_print (val, stream, recurse, options,
1014 language_def (language_c));
1015 break;
1017 case TYPE_CODE_PTR:
1018 ada_value_print_ptr (val, stream, recurse, options);
1019 break;
1021 case TYPE_CODE_INT:
1022 case TYPE_CODE_RANGE:
1023 ada_value_print_num (val, stream, recurse, options);
1024 break;
1026 case TYPE_CODE_ENUM:
1027 ada_val_print_enum (val, stream, recurse, options);
1028 break;
1030 case TYPE_CODE_FLT:
1031 if (options->format)
1033 common_val_print (val, stream, recurse, options,
1034 language_def (language_c));
1035 break;
1038 ada_print_floating (valaddr, type, stream);
1039 break;
1041 case TYPE_CODE_UNION:
1042 case TYPE_CODE_STRUCT:
1043 ada_val_print_struct_union (val, stream, recurse, options);
1044 break;
1046 case TYPE_CODE_ARRAY:
1047 ada_value_print_array (val, stream, recurse, options);
1048 return;
1050 case TYPE_CODE_REF:
1051 ada_val_print_ref (type, valaddr, 0, 0,
1052 address, stream, recurse, val,
1053 options);
1054 break;
1058 void
1059 ada_value_print (struct value *val0, struct ui_file *stream,
1060 const struct value_print_options *options)
1062 struct value *val = ada_to_fixed_value (val0);
1063 struct type *type = ada_check_typedef (val->type ());
1064 struct value_print_options opts;
1066 /* If it is a pointer, indicate what it points to; but not for
1067 "void *" pointers. */
1068 if (type->code () == TYPE_CODE_PTR
1069 && !(type->target_type ()->code () == TYPE_CODE_INT
1070 && type->target_type ()->length () == 0))
1072 /* Hack: don't print (char *) for char strings. Their
1073 type is indicated by the quoted string anyway. */
1074 if (type->target_type ()->length () != sizeof (char)
1075 || type->target_type ()->code () != TYPE_CODE_INT
1076 || type->target_type ()->is_unsigned ())
1078 gdb_printf (stream, "(");
1079 type_print (type, "", stream, -1);
1080 gdb_printf (stream, ") ");
1083 else if (ada_is_array_descriptor_type (type))
1085 /* We do not print the type description unless TYPE is an array
1086 access type (this is encoded by the compiler as a typedef to
1087 a fat pointer - hence the check against TYPE_CODE_TYPEDEF). */
1088 if (type->code () == TYPE_CODE_TYPEDEF)
1090 gdb_printf (stream, "(");
1091 type_print (type, "", stream, -1);
1092 gdb_printf (stream, ") ");
1096 opts = *options;
1097 opts.deref_ref = true;
1098 common_val_print (val, stream, 0, &opts, current_language);