Add TYPE_CODE_FIXED_POINT handling in print_type_scalar
[binutils-gdb.git] / gdb / typeprint.c
blob47019a23aeda779386a0e9c233b2c8353d379bb1
1 /* Language independent support for printing types for GDB, the GNU debugger.
3 Copyright (C) 1986-2020 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 "defs.h"
21 #include "gdb_obstack.h"
22 #include "bfd.h" /* Binary File Description */
23 #include "symtab.h"
24 #include "gdbtypes.h"
25 #include "expression.h"
26 #include "value.h"
27 #include "gdbcore.h"
28 #include "command.h"
29 #include "gdbcmd.h"
30 #include "target.h"
31 #include "language.h"
32 #include "cp-abi.h"
33 #include "typeprint.h"
34 #include "valprint.h"
35 #include <ctype.h>
36 #include "cli/cli-utils.h"
37 #include "extension.h"
38 #include "completer.h"
39 #include "cli/cli-style.h"
41 const struct type_print_options type_print_raw_options =
43 1, /* raw */
44 1, /* print_methods */
45 1, /* print_typedefs */
46 0, /* print_offsets */
47 0, /* print_nested_type_limit */
48 NULL, /* local_typedefs */
49 NULL, /* global_table */
50 NULL /* global_printers */
53 /* The default flags for 'ptype' and 'whatis'. */
55 static struct type_print_options default_ptype_flags =
57 0, /* raw */
58 1, /* print_methods */
59 1, /* print_typedefs */
60 0, /* print_offsets */
61 0, /* print_nested_type_limit */
62 NULL, /* local_typedefs */
63 NULL, /* global_table */
64 NULL /* global_printers */
69 /* See typeprint.h. */
71 const int print_offset_data::indentation = 23;
74 /* See typeprint.h. */
76 void
77 print_offset_data::maybe_print_hole (struct ui_file *stream,
78 unsigned int bitpos,
79 const char *for_what)
81 /* We check for END_BITPOS > 0 because there is a specific
82 scenario when END_BITPOS can be zero and BITPOS can be >
83 0: when we are dealing with a struct/class with a virtual method.
84 Because of the vtable, the first field of the struct/class will
85 have an offset of sizeof (void *) (the size of the vtable). If
86 we do not check for END_BITPOS > 0 here, GDB will report
87 a hole before the first field, which is not accurate. */
88 if (end_bitpos > 0 && end_bitpos < bitpos)
90 /* If END_BITPOS is smaller than the current type's
91 bitpos, it means there's a hole in the struct, so we report
92 it here. */
93 unsigned int hole = bitpos - end_bitpos;
94 unsigned int hole_byte = hole / TARGET_CHAR_BIT;
95 unsigned int hole_bit = hole % TARGET_CHAR_BIT;
97 if (hole_bit > 0)
98 fprintf_filtered (stream, "/* XXX %2u-bit %s */\n", hole_bit,
99 for_what);
101 if (hole_byte > 0)
102 fprintf_filtered (stream, "/* XXX %2u-byte %s */\n", hole_byte,
103 for_what);
107 /* See typeprint.h. */
109 void
110 print_offset_data::update (struct type *type, unsigned int field_idx,
111 struct ui_file *stream)
113 if (field_is_static (&type->field (field_idx)))
115 print_spaces_filtered (indentation, stream);
116 return;
119 struct type *ftype = check_typedef (type->field (field_idx).type ());
120 if (type->code () == TYPE_CODE_UNION)
122 /* Since union fields don't have the concept of offsets, we just
123 print their sizes. */
124 fprintf_filtered (stream, "/* %4s */",
125 pulongest (TYPE_LENGTH (ftype)));
126 return;
129 unsigned int bitpos = TYPE_FIELD_BITPOS (type, field_idx);
130 unsigned int fieldsize_byte = TYPE_LENGTH (ftype);
131 unsigned int fieldsize_bit = fieldsize_byte * TARGET_CHAR_BIT;
133 maybe_print_hole (stream, bitpos, "hole");
135 if (TYPE_FIELD_PACKED (type, field_idx)
136 || offset_bitpos % TARGET_CHAR_BIT != 0)
138 /* We're dealing with a bitfield. Print the bit offset. */
139 fieldsize_bit = TYPE_FIELD_BITSIZE (type, field_idx);
141 unsigned real_bitpos = bitpos + offset_bitpos;
143 fprintf_filtered (stream, "/* %4u:%2u", real_bitpos / TARGET_CHAR_BIT,
144 real_bitpos % TARGET_CHAR_BIT);
146 else
148 /* The position of the field, relative to the beginning of the
149 struct. */
150 fprintf_filtered (stream, "/* %4u",
151 (bitpos + offset_bitpos) / TARGET_CHAR_BIT);
153 fprintf_filtered (stream, " ");
156 fprintf_filtered (stream, " | %4u */", fieldsize_byte);
158 end_bitpos = bitpos + fieldsize_bit;
161 /* See typeprint.h. */
163 void
164 print_offset_data::finish (struct type *type, int level,
165 struct ui_file *stream)
167 unsigned int bitpos = TYPE_LENGTH (type) * TARGET_CHAR_BIT;
168 maybe_print_hole (stream, bitpos, "padding");
170 fputs_filtered ("\n", stream);
171 print_spaces_filtered (level + 4 + print_offset_data::indentation, stream);
172 fprintf_filtered (stream, "/* total size (bytes): %4s */\n",
173 pulongest (TYPE_LENGTH (type)));
178 /* A hash function for a typedef_field. */
180 static hashval_t
181 hash_typedef_field (const void *p)
183 const struct decl_field *tf = (const struct decl_field *) p;
184 struct type *t = check_typedef (tf->type);
186 return htab_hash_string (TYPE_SAFE_NAME (t));
189 /* An equality function for a typedef field. */
191 static int
192 eq_typedef_field (const void *a, const void *b)
194 const struct decl_field *tfa = (const struct decl_field *) a;
195 const struct decl_field *tfb = (const struct decl_field *) b;
197 return types_equal (tfa->type, tfb->type);
200 /* See typeprint.h. */
202 void
203 typedef_hash_table::recursively_update (struct type *t)
205 int i;
207 for (i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (t); ++i)
209 struct decl_field *tdef = &TYPE_TYPEDEF_FIELD (t, i);
210 void **slot;
212 slot = htab_find_slot (m_table.get (), tdef, INSERT);
213 /* Only add a given typedef name once. Really this shouldn't
214 happen; but it is safe enough to do the updates breadth-first
215 and thus use the most specific typedef. */
216 if (*slot == NULL)
217 *slot = tdef;
220 /* Recurse into superclasses. */
221 for (i = 0; i < TYPE_N_BASECLASSES (t); ++i)
222 recursively_update (TYPE_BASECLASS (t, i));
225 /* See typeprint.h. */
227 void
228 typedef_hash_table::add_template_parameters (struct type *t)
230 int i;
232 for (i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (t); ++i)
234 struct decl_field *tf;
235 void **slot;
237 /* We only want type-valued template parameters in the hash. */
238 if (SYMBOL_CLASS (TYPE_TEMPLATE_ARGUMENT (t, i)) != LOC_TYPEDEF)
239 continue;
241 tf = XOBNEW (&m_storage, struct decl_field);
242 tf->name = TYPE_TEMPLATE_ARGUMENT (t, i)->linkage_name ();
243 tf->type = SYMBOL_TYPE (TYPE_TEMPLATE_ARGUMENT (t, i));
245 slot = htab_find_slot (m_table.get (), tf, INSERT);
246 if (*slot == NULL)
247 *slot = tf;
251 /* See typeprint.h. */
253 typedef_hash_table::typedef_hash_table ()
254 : m_table (htab_create_alloc (10, hash_typedef_field, eq_typedef_field,
255 NULL, xcalloc, xfree))
259 /* Helper function for typedef_hash_table::copy. */
261 static int
262 copy_typedef_hash_element (void **slot, void *nt)
264 htab_t new_table = (htab_t) nt;
265 void **new_slot;
267 new_slot = htab_find_slot (new_table, *slot, INSERT);
268 if (*new_slot == NULL)
269 *new_slot = *slot;
271 return 1;
274 /* See typeprint.h. */
276 typedef_hash_table::typedef_hash_table (const typedef_hash_table &table)
278 m_table.reset (htab_create_alloc (10, hash_typedef_field, eq_typedef_field,
279 NULL, xcalloc, xfree));
280 htab_traverse_noresize (table.m_table.get (), copy_typedef_hash_element,
281 m_table.get ());
284 /* Look up the type T in the global typedef hash. If it is found,
285 return the typedef name. If it is not found, apply the
286 type-printers, if any, given by start_script_type_printers and return the
287 result. A NULL return means that the name was not found. */
289 const char *
290 typedef_hash_table::find_global_typedef (const struct type_print_options *flags,
291 struct type *t)
293 char *applied;
294 void **slot;
295 struct decl_field tf, *new_tf;
297 if (flags->global_typedefs == NULL)
298 return NULL;
300 tf.name = NULL;
301 tf.type = t;
303 slot = htab_find_slot (flags->global_typedefs->m_table.get (), &tf, INSERT);
304 if (*slot != NULL)
306 new_tf = (struct decl_field *) *slot;
307 return new_tf->name;
310 /* Put an entry into the hash table now, in case
311 apply_ext_lang_type_printers recurses. */
312 new_tf = XOBNEW (&flags->global_typedefs->m_storage, struct decl_field);
313 new_tf->name = NULL;
314 new_tf->type = t;
316 *slot = new_tf;
318 applied = apply_ext_lang_type_printers (flags->global_printers, t);
320 if (applied != NULL)
322 new_tf->name = obstack_strdup (&flags->global_typedefs->m_storage,
323 applied);
324 xfree (applied);
327 return new_tf->name;
330 /* See typeprint.h. */
332 const char *
333 typedef_hash_table::find_typedef (const struct type_print_options *flags,
334 struct type *t)
336 if (flags->local_typedefs != NULL)
338 struct decl_field tf, *found;
340 tf.name = NULL;
341 tf.type = t;
342 htab_t table = flags->local_typedefs->m_table.get ();
343 found = (struct decl_field *) htab_find (table, &tf);
345 if (found != NULL)
346 return found->name;
349 return find_global_typedef (flags, t);
354 /* Print a description of a type in the format of a
355 typedef for the current language.
356 NEW is the new name for a type TYPE. */
358 void
359 typedef_print (struct type *type, struct symbol *newobj, struct ui_file *stream)
361 current_language->print_typedef (type, newobj, stream);
364 /* Print a description of a type TYPE in the form of a declaration of a
365 variable named VARSTRING. (VARSTRING is demangled if necessary.)
366 Output goes to STREAM (via stdio).
367 If SHOW is positive, we show the contents of the outermost level
368 of structure even if there is a type name that could be used instead.
369 If SHOW is negative, we never show the details of elements' types. */
371 void
372 type_print (struct type *type, const char *varstring, struct ui_file *stream,
373 int show)
375 LA_PRINT_TYPE (type, varstring, stream, show, 0, &default_ptype_flags);
378 /* Print TYPE to a string, returning it. The caller is responsible for
379 freeing the string. */
381 std::string
382 type_to_string (struct type *type)
386 string_file stb;
388 type_print (type, "", &stb, -1);
389 return std::move (stb.string ());
391 catch (const gdb_exception &except)
395 return {};
398 /* See typeprint.h. */
400 void
401 type_print_unknown_return_type (struct ui_file *stream)
403 fprintf_styled (stream, metadata_style.style (),
404 _("<unknown return type>"));
407 /* See typeprint.h. */
409 void
410 error_unknown_type (const char *sym_print_name)
412 error (_("'%s' has unknown type; cast it to its declared type"),
413 sym_print_name);
416 /* Print type of EXP, or last thing in value history if EXP == NULL.
417 show is passed to type_print. */
419 static void
420 whatis_exp (const char *exp, int show)
422 struct value *val;
423 struct type *real_type = NULL;
424 struct type *type;
425 int full = 0;
426 LONGEST top = -1;
427 int using_enc = 0;
428 struct value_print_options opts;
429 struct type_print_options flags = default_ptype_flags;
431 if (exp)
433 if (*exp == '/')
435 int seen_one = 0;
437 for (++exp; *exp && !isspace (*exp); ++exp)
439 switch (*exp)
441 case 'r':
442 flags.raw = 1;
443 break;
444 case 'm':
445 flags.print_methods = 0;
446 break;
447 case 'M':
448 flags.print_methods = 1;
449 break;
450 case 't':
451 flags.print_typedefs = 0;
452 break;
453 case 'T':
454 flags.print_typedefs = 1;
455 break;
456 case 'o':
458 /* Filter out languages which don't implement the
459 feature. */
460 if (show > 0
461 && (current_language->la_language == language_c
462 || current_language->la_language == language_cplus
463 || current_language->la_language == language_rust))
465 flags.print_offsets = 1;
466 flags.print_typedefs = 0;
467 flags.print_methods = 0;
469 break;
471 default:
472 error (_("unrecognized flag '%c'"), *exp);
474 seen_one = 1;
477 if (!*exp && !seen_one)
478 error (_("flag expected"));
479 if (!isspace (*exp))
480 error (_("expected space after format"));
481 exp = skip_spaces (exp);
484 expression_up expr = parse_expression (exp);
486 /* The behavior of "whatis" depends on whether the user
487 expression names a type directly, or a language expression
488 (including variable names). If the former, then "whatis"
489 strips one level of typedefs, only. If an expression,
490 "whatis" prints the type of the expression without stripping
491 any typedef level. "ptype" always strips all levels of
492 typedefs. */
493 if (show == -1 && expr->elts[0].opcode == OP_TYPE)
495 /* The user expression names a type directly. */
496 type = expr->elts[1].type;
498 /* If this is a typedef, then find its immediate target.
499 Use check_typedef to resolve stubs, but ignore its result
500 because we do not want to dig past all typedefs. */
501 check_typedef (type);
502 if (type->code () == TYPE_CODE_TYPEDEF)
503 type = TYPE_TARGET_TYPE (type);
505 /* If the expression is actually a type, then there's no
506 value to fetch the dynamic type from. */
507 val = NULL;
509 else
511 /* The user expression names a type indirectly by naming an
512 object or expression of that type. Find that
513 indirectly-named type. */
514 val = evaluate_type (expr.get ());
515 type = value_type (val);
518 else
520 val = access_value_history (0);
521 type = value_type (val);
524 get_user_print_options (&opts);
525 if (val != NULL && opts.objectprint)
527 if (((type->code () == TYPE_CODE_PTR) || TYPE_IS_REFERENCE (type))
528 && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_STRUCT))
529 real_type = value_rtti_indirect_type (val, &full, &top, &using_enc);
530 else if (type->code () == TYPE_CODE_STRUCT)
531 real_type = value_rtti_type (val, &full, &top, &using_enc);
534 if (flags.print_offsets
535 && (type->code () == TYPE_CODE_STRUCT
536 || type->code () == TYPE_CODE_UNION))
537 fprintf_filtered (gdb_stdout, "/* offset | size */ ");
539 printf_filtered ("type = ");
541 std::unique_ptr<typedef_hash_table> table_holder;
542 std::unique_ptr<ext_lang_type_printers> printer_holder;
543 if (!flags.raw)
545 table_holder.reset (new typedef_hash_table);
546 flags.global_typedefs = table_holder.get ();
548 printer_holder.reset (new ext_lang_type_printers);
549 flags.global_printers = printer_holder.get ();
552 if (real_type)
554 printf_filtered ("/* real type = ");
555 type_print (real_type, "", gdb_stdout, -1);
556 if (! full)
557 printf_filtered (" (incomplete object)");
558 printf_filtered (" */\n");
561 LA_PRINT_TYPE (type, "", gdb_stdout, show, 0, &flags);
562 printf_filtered ("\n");
565 static void
566 whatis_command (const char *exp, int from_tty)
568 /* Most of the time users do not want to see all the fields
569 in a structure. If they do they can use the "ptype" command.
570 Hence the "-1" below. */
571 whatis_exp (exp, -1);
574 /* TYPENAME is either the name of a type, or an expression. */
576 static void
577 ptype_command (const char *type_name, int from_tty)
579 whatis_exp (type_name, 1);
582 /* Print integral scalar data VAL, of type TYPE, onto stdio stream STREAM.
583 Used to print data from type structures in a specified type. For example,
584 array bounds may be characters or booleans in some languages, and this
585 allows the ranges to be printed in their "natural" form rather than as
586 decimal integer values.
588 FIXME: This is here simply because only the type printing routines
589 currently use it, and it wasn't clear if it really belonged somewhere
590 else (like printcmd.c). There are a lot of other gdb routines that do
591 something similar, but they are generally concerned with printing values
592 that come from the inferior in target byte order and target size. */
594 void
595 print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
597 unsigned int i;
598 unsigned len;
600 type = check_typedef (type);
602 switch (type->code ())
605 case TYPE_CODE_ENUM:
606 len = type->num_fields ();
607 for (i = 0; i < len; i++)
609 if (TYPE_FIELD_ENUMVAL (type, i) == val)
611 break;
614 if (i < len)
616 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
618 else
620 print_longest (stream, 'd', 0, val);
622 break;
624 case TYPE_CODE_INT:
625 print_longest (stream, type->is_unsigned () ? 'u' : 'd', 0, val);
626 break;
628 case TYPE_CODE_CHAR:
629 LA_PRINT_CHAR ((unsigned char) val, type, stream);
630 break;
632 case TYPE_CODE_BOOL:
633 fprintf_filtered (stream, val ? "TRUE" : "FALSE");
634 break;
636 case TYPE_CODE_RANGE:
637 print_type_scalar (TYPE_TARGET_TYPE (type), val, stream);
638 return;
640 case TYPE_CODE_FIXED_POINT:
641 print_type_fixed_point (type, stream);
642 break;
644 case TYPE_CODE_UNDEF:
645 case TYPE_CODE_PTR:
646 case TYPE_CODE_ARRAY:
647 case TYPE_CODE_STRUCT:
648 case TYPE_CODE_UNION:
649 case TYPE_CODE_FUNC:
650 case TYPE_CODE_FLT:
651 case TYPE_CODE_VOID:
652 case TYPE_CODE_SET:
653 case TYPE_CODE_STRING:
654 case TYPE_CODE_ERROR:
655 case TYPE_CODE_MEMBERPTR:
656 case TYPE_CODE_METHODPTR:
657 case TYPE_CODE_METHOD:
658 case TYPE_CODE_REF:
659 case TYPE_CODE_RVALUE_REF:
660 case TYPE_CODE_NAMESPACE:
661 error (_("internal error: unhandled type in print_type_scalar"));
662 break;
664 default:
665 error (_("Invalid type code in symbol table."));
669 /* See typeprint.h. */
671 void
672 print_type_fixed_point (struct type *type, struct ui_file *stream)
674 std::string small_img = type->fixed_point_scaling_factor ().str ();
676 fprintf_filtered (stream, "%s-byte fixed point (small = %s)",
677 pulongest (TYPE_LENGTH (type)), small_img.c_str ());
680 /* Dump details of a type specified either directly or indirectly.
681 Uses the same sort of type lookup mechanism as ptype_command()
682 and whatis_command(). */
684 void
685 maintenance_print_type (const char *type_name, int from_tty)
687 struct value *val;
688 struct type *type;
690 if (type_name != NULL)
692 expression_up expr = parse_expression (type_name);
693 if (expr->elts[0].opcode == OP_TYPE)
695 /* The user expression names a type directly, just use that type. */
696 type = expr->elts[1].type;
698 else
700 /* The user expression may name a type indirectly by naming an
701 object of that type. Find that indirectly named type. */
702 val = evaluate_type (expr.get ());
703 type = value_type (val);
705 if (type != NULL)
707 recursive_dump_type (type, 0);
713 struct cmd_list_element *setprinttypelist;
715 struct cmd_list_element *showprinttypelist;
717 static bool print_methods = true;
719 static void
720 set_print_type_methods (const char *args,
721 int from_tty, struct cmd_list_element *c)
723 default_ptype_flags.print_methods = print_methods;
726 static void
727 show_print_type_methods (struct ui_file *file, int from_tty,
728 struct cmd_list_element *c, const char *value)
730 fprintf_filtered (file, _("Printing of methods defined in a class in %s\n"),
731 value);
734 static bool print_typedefs = true;
736 static void
737 set_print_type_typedefs (const char *args,
738 int from_tty, struct cmd_list_element *c)
740 default_ptype_flags.print_typedefs = print_typedefs;
743 static void
744 show_print_type_typedefs (struct ui_file *file, int from_tty,
745 struct cmd_list_element *c, const char *value)
747 fprintf_filtered (file, _("Printing of typedefs defined in a class in %s\n"),
748 value);
751 /* Limit on the number of nested type definitions to print or -1 to print
752 all nested type definitions in a class. By default, we do not print
753 nested definitions. */
755 static int print_nested_type_limit = 0;
757 /* Set how many nested type definitions should be printed by the type
758 printer. */
760 static void
761 set_print_type_nested_types (const char *args, int from_tty,
762 struct cmd_list_element *c)
764 default_ptype_flags.print_nested_type_limit = print_nested_type_limit;
767 /* Show how many nested type definitions the type printer will print. */
769 static void
770 show_print_type_nested_types (struct ui_file *file, int from_tty,
771 struct cmd_list_element *c, const char *value)
773 if (*value == '0')
775 fprintf_filtered (file,
776 _("Will not print nested types defined in a class\n"));
778 else
780 fprintf_filtered (file,
781 _("Will print %s nested types defined in a class\n"),
782 value);
786 void _initialize_typeprint ();
787 void
788 _initialize_typeprint ()
790 struct cmd_list_element *c;
792 c = add_com ("ptype", class_vars, ptype_command, _("\
793 Print definition of type TYPE.\n\
794 Usage: ptype[/FLAGS] TYPE | EXPRESSION\n\
795 Argument may be any type (for example a type name defined by typedef,\n\
796 or \"struct STRUCT-TAG\" or \"class CLASS-NAME\" or \"union UNION-TAG\"\n\
797 or \"enum ENUM-TAG\") or an expression.\n\
798 The selected stack frame's lexical context is used to look up the name.\n\
799 Contrary to \"whatis\", \"ptype\" always unrolls any typedefs.\n\
801 Available FLAGS are:\n\
802 /r print in \"raw\" form; do not substitute typedefs\n\
803 /m do not print methods defined in a class\n\
804 /M print methods defined in a class\n\
805 /t do not print typedefs defined in a class\n\
806 /T print typedefs defined in a class\n\
807 /o print offsets and sizes of fields in a struct (like pahole)"));
808 set_cmd_completer (c, expression_completer);
810 c = add_com ("whatis", class_vars, whatis_command,
811 _("Print data type of expression EXP.\n\
812 Only one level of typedefs is unrolled. See also \"ptype\"."));
813 set_cmd_completer (c, expression_completer);
815 add_show_prefix_cmd ("type", no_class,
816 _("Generic command for showing type-printing settings."),
817 &showprinttypelist, "show print type ", 0,
818 &showprintlist);
819 add_basic_prefix_cmd ("type", no_class,
820 _("Generic command for setting how types print."),
821 &setprinttypelist, "set print type ", 0,
822 &setprintlist);
824 add_setshow_boolean_cmd ("methods", no_class, &print_methods,
825 _("\
826 Set printing of methods defined in classes."), _("\
827 Show printing of methods defined in classes."), NULL,
828 set_print_type_methods,
829 show_print_type_methods,
830 &setprinttypelist, &showprinttypelist);
831 add_setshow_boolean_cmd ("typedefs", no_class, &print_typedefs,
832 _("\
833 Set printing of typedefs defined in classes."), _("\
834 Show printing of typedefs defined in classes."), NULL,
835 set_print_type_typedefs,
836 show_print_type_typedefs,
837 &setprinttypelist, &showprinttypelist);
839 add_setshow_zuinteger_unlimited_cmd ("nested-type-limit", no_class,
840 &print_nested_type_limit,
841 _("\
842 Set the number of recursive nested type definitions to print \
843 (\"unlimited\" or -1 to show all)."), _("\
844 Show the number of recursive nested type definitions to print."), NULL,
845 set_print_type_nested_types,
846 show_print_type_nested_types,
847 &setprinttypelist, &showprinttypelist);
850 /* Print <not allocated> status to stream STREAM. */
852 void
853 val_print_not_allocated (struct ui_file *stream)
855 fprintf_styled (stream, metadata_style.style (), _("<not allocated>"));
858 /* Print <not associated> status to stream STREAM. */
860 void
861 val_print_not_associated (struct ui_file *stream)
863 fprintf_styled (stream, metadata_style.style (), _("<not associated>"));