]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/typeprint.c
Support ptype/o in Rust
[thirdparty/binutils-gdb.git] / gdb / typeprint.c
1 /* Language independent support for printing types for GDB, the GNU debugger.
2
3 Copyright (C) 1986-2018 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
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.
11
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.
16
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/>. */
19
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
40 const struct type_print_options type_print_raw_options =
41 {
42 1, /* raw */
43 1, /* print_methods */
44 1, /* print_typedefs */
45 0, /* print_offsets */
46 0, /* print_nested_type_limit */
47 NULL, /* local_typedefs */
48 NULL, /* global_table */
49 NULL /* global_printers */
50 };
51
52 /* The default flags for 'ptype' and 'whatis'. */
53
54 static struct type_print_options default_ptype_flags =
55 {
56 0, /* raw */
57 1, /* print_methods */
58 1, /* print_typedefs */
59 0, /* print_offsets */
60 0, /* print_nested_type_limit */
61 NULL, /* local_typedefs */
62 NULL, /* global_table */
63 NULL /* global_printers */
64 };
65
66 \f
67
68 /* See typeprint.h. */
69
70 const int print_offset_data::indentation = 23;
71
72
73 /* See typeprint.h. */
74
75 void
76 print_offset_data::maybe_print_hole (struct ui_file *stream,
77 unsigned int bitpos,
78 const char *for_what)
79 {
80 /* We check for END_BITPOS > 0 because there is a specific
81 scenario when END_BITPOS can be zero and BITPOS can be >
82 0: when we are dealing with a struct/class with a virtual method.
83 Because of the vtable, the first field of the struct/class will
84 have an offset of sizeof (void *) (the size of the vtable). If
85 we do not check for END_BITPOS > 0 here, GDB will report
86 a hole before the first field, which is not accurate. */
87 if (end_bitpos > 0 && end_bitpos < bitpos)
88 {
89 /* If END_BITPOS is smaller than the current type's
90 bitpos, it means there's a hole in the struct, so we report
91 it here. */
92 unsigned int hole = bitpos - end_bitpos;
93 unsigned int hole_byte = hole / TARGET_CHAR_BIT;
94 unsigned int hole_bit = hole % TARGET_CHAR_BIT;
95
96 if (hole_bit > 0)
97 fprintf_filtered (stream, "/* XXX %2u-bit %s */\n", hole_bit,
98 for_what);
99
100 if (hole_byte > 0)
101 fprintf_filtered (stream, "/* XXX %2u-byte %s */\n", hole_byte,
102 for_what);
103 }
104 }
105
106 /* See typeprint.h. */
107
108 void
109 print_offset_data::update (struct type *type, unsigned int field_idx,
110 struct ui_file *stream)
111 {
112 if (field_is_static (&TYPE_FIELD (type, field_idx)))
113 {
114 print_spaces_filtered (indentation, stream);
115 return;
116 }
117
118 struct type *ftype = check_typedef (TYPE_FIELD_TYPE (type, field_idx));
119 if (TYPE_CODE (type) == TYPE_CODE_UNION)
120 {
121 /* Since union fields don't have the concept of offsets, we just
122 print their sizes. */
123 fprintf_filtered (stream, "/* %4u */", TYPE_LENGTH (ftype));
124 return;
125 }
126
127 unsigned int bitpos = TYPE_FIELD_BITPOS (type, field_idx);
128 unsigned int fieldsize_byte = TYPE_LENGTH (ftype);
129 unsigned int fieldsize_bit = fieldsize_byte * TARGET_CHAR_BIT;
130
131 maybe_print_hole (stream, bitpos, "hole");
132
133 if (TYPE_FIELD_PACKED (type, field_idx))
134 {
135 /* We're dealing with a bitfield. Print how many bits are left
136 to be used. */
137 unsigned int bitsize = TYPE_FIELD_BITSIZE (type, field_idx);
138 /* The bitpos relative to the beginning of our container
139 field. */
140 unsigned int relative_bitpos;
141
142 /* The following was copied from
143 value.c:value_primitive_field. */
144 if ((bitpos % fieldsize_bit) + bitsize <= fieldsize_bit)
145 relative_bitpos = bitpos % fieldsize_bit;
146 else
147 relative_bitpos = bitpos % TARGET_CHAR_BIT;
148
149 /* This is the exact offset (in bits) of this bitfield. */
150 unsigned int bit_offset
151 = (bitpos - relative_bitpos) + offset_bitpos;
152
153 /* The position of the field, relative to the beginning of the
154 struct, and how many bits are left to be used in this
155 container. */
156 fprintf_filtered (stream, "/* %4u:%2u", bit_offset / TARGET_CHAR_BIT,
157 fieldsize_bit - (relative_bitpos + bitsize));
158 fieldsize_bit = bitsize;
159 }
160 else
161 {
162 /* The position of the field, relative to the beginning of the
163 struct. */
164 fprintf_filtered (stream, "/* %4u",
165 (bitpos + offset_bitpos) / TARGET_CHAR_BIT);
166
167 fprintf_filtered (stream, " ");
168 }
169
170 fprintf_filtered (stream, " | %4u */", fieldsize_byte);
171
172 end_bitpos = bitpos + fieldsize_bit;
173 }
174
175 /* See typeprint.h. */
176
177 void
178 print_offset_data::finish (struct type *type, int level,
179 struct ui_file *stream)
180 {
181 unsigned int bitpos = TYPE_LENGTH (type) * TARGET_CHAR_BIT;
182 maybe_print_hole (stream, bitpos, "padding");
183
184 fputs_filtered ("\n", stream);
185 print_spaces_filtered (level + 4 + print_offset_data::indentation, stream);
186 fprintf_filtered (stream, "/* total size (bytes): %4u */\n",
187 TYPE_LENGTH (type));
188 }
189
190 \f
191
192 /* A hash function for a typedef_field. */
193
194 static hashval_t
195 hash_typedef_field (const void *p)
196 {
197 const struct decl_field *tf = (const struct decl_field *) p;
198 struct type *t = check_typedef (tf->type);
199
200 return htab_hash_string (TYPE_SAFE_NAME (t));
201 }
202
203 /* An equality function for a typedef field. */
204
205 static int
206 eq_typedef_field (const void *a, const void *b)
207 {
208 const struct decl_field *tfa = (const struct decl_field *) a;
209 const struct decl_field *tfb = (const struct decl_field *) b;
210
211 return types_equal (tfa->type, tfb->type);
212 }
213
214 /* See typeprint.h. */
215
216 void
217 typedef_hash_table::recursively_update (struct type *t)
218 {
219 int i;
220
221 for (i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (t); ++i)
222 {
223 struct decl_field *tdef = &TYPE_TYPEDEF_FIELD (t, i);
224 void **slot;
225
226 slot = htab_find_slot (m_table, tdef, INSERT);
227 /* Only add a given typedef name once. Really this shouldn't
228 happen; but it is safe enough to do the updates breadth-first
229 and thus use the most specific typedef. */
230 if (*slot == NULL)
231 *slot = tdef;
232 }
233
234 /* Recurse into superclasses. */
235 for (i = 0; i < TYPE_N_BASECLASSES (t); ++i)
236 recursively_update (TYPE_BASECLASS (t, i));
237 }
238
239 /* See typeprint.h. */
240
241 void
242 typedef_hash_table::add_template_parameters (struct type *t)
243 {
244 int i;
245
246 for (i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (t); ++i)
247 {
248 struct decl_field *tf;
249 void **slot;
250
251 /* We only want type-valued template parameters in the hash. */
252 if (SYMBOL_CLASS (TYPE_TEMPLATE_ARGUMENT (t, i)) != LOC_TYPEDEF)
253 continue;
254
255 tf = XOBNEW (&m_storage, struct decl_field);
256 tf->name = SYMBOL_LINKAGE_NAME (TYPE_TEMPLATE_ARGUMENT (t, i));
257 tf->type = SYMBOL_TYPE (TYPE_TEMPLATE_ARGUMENT (t, i));
258
259 slot = htab_find_slot (m_table, tf, INSERT);
260 if (*slot == NULL)
261 *slot = tf;
262 }
263 }
264
265 /* See typeprint.h. */
266
267 typedef_hash_table::typedef_hash_table ()
268 {
269 m_table = htab_create_alloc (10, hash_typedef_field, eq_typedef_field,
270 NULL, xcalloc, xfree);
271 }
272
273 /* Free a typedef field table. */
274
275 typedef_hash_table::~typedef_hash_table ()
276 {
277 htab_delete (m_table);
278 }
279
280 /* Helper function for typedef_hash_table::copy. */
281
282 static int
283 copy_typedef_hash_element (void **slot, void *nt)
284 {
285 htab_t new_table = (htab_t) nt;
286 void **new_slot;
287
288 new_slot = htab_find_slot (new_table, *slot, INSERT);
289 if (*new_slot == NULL)
290 *new_slot = *slot;
291
292 return 1;
293 }
294
295 /* See typeprint.h. */
296
297 typedef_hash_table::typedef_hash_table (const typedef_hash_table &table)
298 {
299 m_table = htab_create_alloc (10, hash_typedef_field, eq_typedef_field,
300 NULL, xcalloc, xfree);
301 htab_traverse_noresize (table.m_table, copy_typedef_hash_element,
302 m_table);
303 }
304
305 /* Look up the type T in the global typedef hash. If it is found,
306 return the typedef name. If it is not found, apply the
307 type-printers, if any, given by start_script_type_printers and return the
308 result. A NULL return means that the name was not found. */
309
310 const char *
311 typedef_hash_table::find_global_typedef (const struct type_print_options *flags,
312 struct type *t)
313 {
314 char *applied;
315 void **slot;
316 struct decl_field tf, *new_tf;
317
318 if (flags->global_typedefs == NULL)
319 return NULL;
320
321 tf.name = NULL;
322 tf.type = t;
323
324 slot = htab_find_slot (flags->global_typedefs->m_table, &tf, INSERT);
325 if (*slot != NULL)
326 {
327 new_tf = (struct decl_field *) *slot;
328 return new_tf->name;
329 }
330
331 /* Put an entry into the hash table now, in case
332 apply_ext_lang_type_printers recurses. */
333 new_tf = XOBNEW (&flags->global_typedefs->m_storage, struct decl_field);
334 new_tf->name = NULL;
335 new_tf->type = t;
336
337 *slot = new_tf;
338
339 applied = apply_ext_lang_type_printers (flags->global_printers, t);
340
341 if (applied != NULL)
342 {
343 new_tf->name
344 = (const char *) obstack_copy0 (&flags->global_typedefs->m_storage,
345 applied, strlen (applied));
346 xfree (applied);
347 }
348
349 return new_tf->name;
350 }
351
352 /* See typeprint.h. */
353
354 const char *
355 typedef_hash_table::find_typedef (const struct type_print_options *flags,
356 struct type *t)
357 {
358 if (flags->local_typedefs != NULL)
359 {
360 struct decl_field tf, *found;
361
362 tf.name = NULL;
363 tf.type = t;
364 found = (struct decl_field *) htab_find (flags->local_typedefs->m_table,
365 &tf);
366
367 if (found != NULL)
368 return found->name;
369 }
370
371 return find_global_typedef (flags, t);
372 }
373
374 \f
375
376 /* Print a description of a type in the format of a
377 typedef for the current language.
378 NEW is the new name for a type TYPE. */
379
380 void
381 typedef_print (struct type *type, struct symbol *newobj, struct ui_file *stream)
382 {
383 LA_PRINT_TYPEDEF (type, newobj, stream);
384 }
385
386 /* The default way to print a typedef. */
387
388 void
389 default_print_typedef (struct type *type, struct symbol *new_symbol,
390 struct ui_file *stream)
391 {
392 error (_("Language not supported."));
393 }
394
395 /* Print a description of a type TYPE in the form of a declaration of a
396 variable named VARSTRING. (VARSTRING is demangled if necessary.)
397 Output goes to STREAM (via stdio).
398 If SHOW is positive, we show the contents of the outermost level
399 of structure even if there is a type name that could be used instead.
400 If SHOW is negative, we never show the details of elements' types. */
401
402 void
403 type_print (struct type *type, const char *varstring, struct ui_file *stream,
404 int show)
405 {
406 LA_PRINT_TYPE (type, varstring, stream, show, 0, &default_ptype_flags);
407 }
408
409 /* Print TYPE to a string, returning it. The caller is responsible for
410 freeing the string. */
411
412 std::string
413 type_to_string (struct type *type)
414 {
415 TRY
416 {
417 string_file stb;
418
419 type_print (type, "", &stb, -1);
420 return std::move (stb.string ());
421 }
422 CATCH (except, RETURN_MASK_ALL)
423 {
424 }
425 END_CATCH
426
427 return {};
428 }
429
430 /* See typeprint.h. */
431
432 void
433 type_print_unknown_return_type (struct ui_file *stream)
434 {
435 fprintf_filtered (stream, _("<unknown return type>"));
436 }
437
438 /* See typeprint.h. */
439
440 void
441 error_unknown_type (const char *sym_print_name)
442 {
443 error (_("'%s' has unknown type; cast it to its declared type"),
444 sym_print_name);
445 }
446
447 /* Print type of EXP, or last thing in value history if EXP == NULL.
448 show is passed to type_print. */
449
450 static void
451 whatis_exp (const char *exp, int show)
452 {
453 struct value *val;
454 struct type *real_type = NULL;
455 struct type *type;
456 int full = 0;
457 LONGEST top = -1;
458 int using_enc = 0;
459 struct value_print_options opts;
460 struct type_print_options flags = default_ptype_flags;
461
462 if (exp)
463 {
464 if (*exp == '/')
465 {
466 int seen_one = 0;
467
468 for (++exp; *exp && !isspace (*exp); ++exp)
469 {
470 switch (*exp)
471 {
472 case 'r':
473 flags.raw = 1;
474 break;
475 case 'm':
476 flags.print_methods = 0;
477 break;
478 case 'M':
479 flags.print_methods = 1;
480 break;
481 case 't':
482 flags.print_typedefs = 0;
483 break;
484 case 'T':
485 flags.print_typedefs = 1;
486 break;
487 case 'o':
488 {
489 /* Filter out languages which don't implement the
490 feature. */
491 if (show > 0
492 && (current_language->la_language == language_c
493 || current_language->la_language == language_cplus
494 || current_language->la_language == language_rust))
495 {
496 flags.print_offsets = 1;
497 flags.print_typedefs = 0;
498 flags.print_methods = 0;
499 }
500 break;
501 }
502 default:
503 error (_("unrecognized flag '%c'"), *exp);
504 }
505 seen_one = 1;
506 }
507
508 if (!*exp && !seen_one)
509 error (_("flag expected"));
510 if (!isspace (*exp))
511 error (_("expected space after format"));
512 exp = skip_spaces (exp);
513 }
514
515 expression_up expr = parse_expression (exp);
516
517 /* The behavior of "whatis" depends on whether the user
518 expression names a type directly, or a language expression
519 (including variable names). If the former, then "whatis"
520 strips one level of typedefs, only. If an expression,
521 "whatis" prints the type of the expression without stripping
522 any typedef level. "ptype" always strips all levels of
523 typedefs. */
524 if (show == -1 && expr->elts[0].opcode == OP_TYPE)
525 {
526 /* The user expression names a type directly. */
527 type = expr->elts[1].type;
528
529 /* If this is a typedef, then find its immediate target.
530 Use check_typedef to resolve stubs, but ignore its result
531 because we do not want to dig past all typedefs. */
532 check_typedef (type);
533 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
534 type = TYPE_TARGET_TYPE (type);
535
536 /* If the expression is actually a type, then there's no
537 value to fetch the dynamic type from. */
538 val = NULL;
539 }
540 else
541 {
542 /* The user expression names a type indirectly by naming an
543 object or expression of that type. Find that
544 indirectly-named type. */
545 val = evaluate_type (expr.get ());
546 type = value_type (val);
547 }
548 }
549 else
550 {
551 val = access_value_history (0);
552 type = value_type (val);
553 }
554
555 get_user_print_options (&opts);
556 if (val != NULL && opts.objectprint)
557 {
558 if (((TYPE_CODE (type) == TYPE_CODE_PTR) || TYPE_IS_REFERENCE (type))
559 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
560 real_type = value_rtti_indirect_type (val, &full, &top, &using_enc);
561 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
562 real_type = value_rtti_type (val, &full, &top, &using_enc);
563 }
564
565 if (flags.print_offsets
566 && (TYPE_CODE (type) == TYPE_CODE_STRUCT
567 || TYPE_CODE (type) == TYPE_CODE_UNION))
568 fprintf_filtered (gdb_stdout, "/* offset | size */ ");
569
570 printf_filtered ("type = ");
571
572 std::unique_ptr<typedef_hash_table> table_holder;
573 std::unique_ptr<ext_lang_type_printers> printer_holder;
574 if (!flags.raw)
575 {
576 table_holder.reset (new typedef_hash_table);
577 flags.global_typedefs = table_holder.get ();
578
579 printer_holder.reset (new ext_lang_type_printers);
580 flags.global_printers = printer_holder.get ();
581 }
582
583 if (real_type)
584 {
585 printf_filtered ("/* real type = ");
586 type_print (real_type, "", gdb_stdout, -1);
587 if (! full)
588 printf_filtered (" (incomplete object)");
589 printf_filtered (" */\n");
590 }
591
592 LA_PRINT_TYPE (type, "", gdb_stdout, show, 0, &flags);
593 printf_filtered ("\n");
594 }
595
596 static void
597 whatis_command (const char *exp, int from_tty)
598 {
599 /* Most of the time users do not want to see all the fields
600 in a structure. If they do they can use the "ptype" command.
601 Hence the "-1" below. */
602 whatis_exp (exp, -1);
603 }
604
605 /* TYPENAME is either the name of a type, or an expression. */
606
607 static void
608 ptype_command (const char *type_name, int from_tty)
609 {
610 whatis_exp (type_name, 1);
611 }
612
613 /* Print integral scalar data VAL, of type TYPE, onto stdio stream STREAM.
614 Used to print data from type structures in a specified type. For example,
615 array bounds may be characters or booleans in some languages, and this
616 allows the ranges to be printed in their "natural" form rather than as
617 decimal integer values.
618
619 FIXME: This is here simply because only the type printing routines
620 currently use it, and it wasn't clear if it really belonged somewhere
621 else (like printcmd.c). There are a lot of other gdb routines that do
622 something similar, but they are generally concerned with printing values
623 that come from the inferior in target byte order and target size. */
624
625 void
626 print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
627 {
628 unsigned int i;
629 unsigned len;
630
631 type = check_typedef (type);
632
633 switch (TYPE_CODE (type))
634 {
635
636 case TYPE_CODE_ENUM:
637 len = TYPE_NFIELDS (type);
638 for (i = 0; i < len; i++)
639 {
640 if (TYPE_FIELD_ENUMVAL (type, i) == val)
641 {
642 break;
643 }
644 }
645 if (i < len)
646 {
647 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
648 }
649 else
650 {
651 print_longest (stream, 'd', 0, val);
652 }
653 break;
654
655 case TYPE_CODE_INT:
656 print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0, val);
657 break;
658
659 case TYPE_CODE_CHAR:
660 LA_PRINT_CHAR ((unsigned char) val, type, stream);
661 break;
662
663 case TYPE_CODE_BOOL:
664 fprintf_filtered (stream, val ? "TRUE" : "FALSE");
665 break;
666
667 case TYPE_CODE_RANGE:
668 print_type_scalar (TYPE_TARGET_TYPE (type), val, stream);
669 return;
670
671 case TYPE_CODE_UNDEF:
672 case TYPE_CODE_PTR:
673 case TYPE_CODE_ARRAY:
674 case TYPE_CODE_STRUCT:
675 case TYPE_CODE_UNION:
676 case TYPE_CODE_FUNC:
677 case TYPE_CODE_FLT:
678 case TYPE_CODE_VOID:
679 case TYPE_CODE_SET:
680 case TYPE_CODE_STRING:
681 case TYPE_CODE_ERROR:
682 case TYPE_CODE_MEMBERPTR:
683 case TYPE_CODE_METHODPTR:
684 case TYPE_CODE_METHOD:
685 case TYPE_CODE_REF:
686 case TYPE_CODE_RVALUE_REF:
687 case TYPE_CODE_NAMESPACE:
688 error (_("internal error: unhandled type in print_type_scalar"));
689 break;
690
691 default:
692 error (_("Invalid type code in symbol table."));
693 }
694 gdb_flush (stream);
695 }
696
697 /* Dump details of a type specified either directly or indirectly.
698 Uses the same sort of type lookup mechanism as ptype_command()
699 and whatis_command(). */
700
701 void
702 maintenance_print_type (const char *type_name, int from_tty)
703 {
704 struct value *val;
705 struct type *type;
706
707 if (type_name != NULL)
708 {
709 expression_up expr = parse_expression (type_name);
710 if (expr->elts[0].opcode == OP_TYPE)
711 {
712 /* The user expression names a type directly, just use that type. */
713 type = expr->elts[1].type;
714 }
715 else
716 {
717 /* The user expression may name a type indirectly by naming an
718 object of that type. Find that indirectly named type. */
719 val = evaluate_type (expr.get ());
720 type = value_type (val);
721 }
722 if (type != NULL)
723 {
724 recursive_dump_type (type, 0);
725 }
726 }
727 }
728 \f
729
730 struct cmd_list_element *setprinttypelist;
731
732 struct cmd_list_element *showprinttypelist;
733
734 static void
735 set_print_type (const char *arg, int from_tty)
736 {
737 printf_unfiltered (
738 "\"set print type\" must be followed by the name of a subcommand.\n");
739 help_list (setprintlist, "set print type ", all_commands, gdb_stdout);
740 }
741
742 static void
743 show_print_type (const char *args, int from_tty)
744 {
745 cmd_show_list (showprinttypelist, from_tty, "");
746 }
747
748 static int print_methods = 1;
749
750 static void
751 set_print_type_methods (const char *args,
752 int from_tty, struct cmd_list_element *c)
753 {
754 default_ptype_flags.print_methods = print_methods;
755 }
756
757 static void
758 show_print_type_methods (struct ui_file *file, int from_tty,
759 struct cmd_list_element *c, const char *value)
760 {
761 fprintf_filtered (file, _("Printing of methods defined in a class in %s\n"),
762 value);
763 }
764
765 static int print_typedefs = 1;
766
767 static void
768 set_print_type_typedefs (const char *args,
769 int from_tty, struct cmd_list_element *c)
770 {
771 default_ptype_flags.print_typedefs = print_typedefs;
772 }
773
774 static void
775 show_print_type_typedefs (struct ui_file *file, int from_tty,
776 struct cmd_list_element *c, const char *value)
777 {
778 fprintf_filtered (file, _("Printing of typedefs defined in a class in %s\n"),
779 value);
780 }
781
782 /* Limit on the number of nested type definitions to print or -1 to print
783 all nested type definitions in a class. By default, we do not print
784 nested definitions. */
785
786 static int print_nested_type_limit = 0;
787
788 /* Set how many nested type definitions should be printed by the type
789 printer. */
790
791 static void
792 set_print_type_nested_types (const char *args, int from_tty,
793 struct cmd_list_element *c)
794 {
795 default_ptype_flags.print_nested_type_limit = print_nested_type_limit;
796 }
797
798 /* Show how many nested type definitions the type printer will print. */
799
800 static void
801 show_print_type_nested_types (struct ui_file *file, int from_tty,
802 struct cmd_list_element *c, const char *value)
803 {
804 if (*value == '0')
805 {
806 fprintf_filtered (file,
807 _("Will not print nested types defined in a class\n"));
808 }
809 else
810 {
811 fprintf_filtered (file,
812 _("Will print %s nested types defined in a class\n"),
813 value);
814 }
815 }
816
817 void
818 _initialize_typeprint (void)
819 {
820 struct cmd_list_element *c;
821
822 c = add_com ("ptype", class_vars, ptype_command, _("\
823 Print definition of type TYPE.\n\
824 Usage: ptype[/FLAGS] TYPE | EXPRESSION\n\
825 Argument may be any type (for example a type name defined by typedef,\n\
826 or \"struct STRUCT-TAG\" or \"class CLASS-NAME\" or \"union UNION-TAG\"\n\
827 or \"enum ENUM-TAG\") or an expression.\n\
828 The selected stack frame's lexical context is used to look up the name.\n\
829 Contrary to \"whatis\", \"ptype\" always unrolls any typedefs.\n\
830 \n\
831 Available FLAGS are:\n\
832 /r print in \"raw\" form; do not substitute typedefs\n\
833 /m do not print methods defined in a class\n\
834 /M print methods defined in a class\n\
835 /t do not print typedefs defined in a class\n\
836 /T print typedefs defined in a class\n\
837 /o print offsets and sizes of fields in a struct (like pahole)\n"));
838 set_cmd_completer (c, expression_completer);
839
840 c = add_com ("whatis", class_vars, whatis_command,
841 _("Print data type of expression EXP.\n\
842 Only one level of typedefs is unrolled. See also \"ptype\"."));
843 set_cmd_completer (c, expression_completer);
844
845 add_prefix_cmd ("type", no_class, show_print_type,
846 _("Generic command for showing type-printing settings."),
847 &showprinttypelist, "show print type ", 0, &showprintlist);
848 add_prefix_cmd ("type", no_class, set_print_type,
849 _("Generic command for setting how types print."),
850 &setprinttypelist, "show print type ", 0, &setprintlist);
851
852 add_setshow_boolean_cmd ("methods", no_class, &print_methods,
853 _("\
854 Set printing of methods defined in classes."), _("\
855 Show printing of methods defined in classes."), NULL,
856 set_print_type_methods,
857 show_print_type_methods,
858 &setprinttypelist, &showprinttypelist);
859 add_setshow_boolean_cmd ("typedefs", no_class, &print_typedefs,
860 _("\
861 Set printing of typedefs defined in classes."), _("\
862 Show printing of typedefs defined in classes."), NULL,
863 set_print_type_typedefs,
864 show_print_type_typedefs,
865 &setprinttypelist, &showprinttypelist);
866
867 add_setshow_zuinteger_unlimited_cmd ("nested-type-limit", no_class,
868 &print_nested_type_limit,
869 _("\
870 Set the number of recursive nested type definitions to print \
871 (\"unlimited\" or -1 to show all)."), _("\
872 Show the number of recursive nested type definitions to print."), NULL,
873 set_print_type_nested_types,
874 show_print_type_nested_types,
875 &setprinttypelist, &showprinttypelist);
876 }
877
878 /* Print <not allocated> status to stream STREAM. */
879
880 void
881 val_print_not_allocated (struct ui_file *stream)
882 {
883 fprintf_filtered (stream, _("<not allocated>"));
884 }
885
886 /* Print <not associated> status to stream STREAM. */
887
888 void
889 val_print_not_associated (struct ui_file *stream)
890 {
891 fprintf_filtered (stream, _("<not associated>"));
892 }