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