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