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