Fix VLA printing for Ada
[deliverable/binutils-gdb.git] / gdb / typeprint.c
CommitLineData
c906108c 1/* Language independent support for printing types for GDB, the GNU debugger.
1bac305b 2
42a4f53d 3 Copyright (C) 1986-2019 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
e0c547d1
TT
68/* See typeprint.h. */
69
70const int print_offset_data::indentation = 23;
71
72
73/* See typeprint.h. */
74
75void
76print_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
108void
109print_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. */
cc1defb1
KS
123 fprintf_filtered (stream, "/* %4s */",
124 pulongest (TYPE_LENGTH (ftype)));
e0c547d1
TT
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 {
136 /* We're dealing with a bitfield. Print how many bits are left
137 to be used. */
138 unsigned int bitsize = TYPE_FIELD_BITSIZE (type, field_idx);
139 /* The bitpos relative to the beginning of our container
140 field. */
141 unsigned int relative_bitpos;
142
143 /* The following was copied from
144 value.c:value_primitive_field. */
145 if ((bitpos % fieldsize_bit) + bitsize <= fieldsize_bit)
146 relative_bitpos = bitpos % fieldsize_bit;
147 else
148 relative_bitpos = bitpos % TARGET_CHAR_BIT;
149
150 /* This is the exact offset (in bits) of this bitfield. */
151 unsigned int bit_offset
152 = (bitpos - relative_bitpos) + offset_bitpos;
153
154 /* The position of the field, relative to the beginning of the
155 struct, and how many bits are left to be used in this
156 container. */
157 fprintf_filtered (stream, "/* %4u:%2u", bit_offset / TARGET_CHAR_BIT,
158 fieldsize_bit - (relative_bitpos + bitsize));
159 fieldsize_bit = bitsize;
160 }
161 else
162 {
163 /* The position of the field, relative to the beginning of the
164 struct. */
165 fprintf_filtered (stream, "/* %4u",
166 (bitpos + offset_bitpos) / TARGET_CHAR_BIT);
167
168 fprintf_filtered (stream, " ");
169 }
170
171 fprintf_filtered (stream, " | %4u */", fieldsize_byte);
172
173 end_bitpos = bitpos + fieldsize_bit;
174}
175
176/* See typeprint.h. */
177
178void
179print_offset_data::finish (struct type *type, int level,
180 struct ui_file *stream)
181{
182 unsigned int bitpos = TYPE_LENGTH (type) * TARGET_CHAR_BIT;
183 maybe_print_hole (stream, bitpos, "padding");
184
185 fputs_filtered ("\n", stream);
186 print_spaces_filtered (level + 4 + print_offset_data::indentation, stream);
cc1defb1
KS
187 fprintf_filtered (stream, "/* total size (bytes): %4s */\n",
188 pulongest (TYPE_LENGTH (type)));
e0c547d1
TT
189}
190
191\f
192
bd69fc68
TT
193/* A hash function for a typedef_field. */
194
195static hashval_t
196hash_typedef_field (const void *p)
197{
883fd55a 198 const struct decl_field *tf = (const struct decl_field *) p;
bd69fc68
TT
199 struct type *t = check_typedef (tf->type);
200
201 return htab_hash_string (TYPE_SAFE_NAME (t));
202}
203
204/* An equality function for a typedef field. */
205
206static int
207eq_typedef_field (const void *a, const void *b)
208{
883fd55a
KS
209 const struct decl_field *tfa = (const struct decl_field *) a;
210 const struct decl_field *tfb = (const struct decl_field *) b;
bd69fc68
TT
211
212 return types_equal (tfa->type, tfb->type);
213}
214
c819b2c0 215/* See typeprint.h. */
bd69fc68
TT
216
217void
c819b2c0 218typedef_hash_table::recursively_update (struct type *t)
bd69fc68
TT
219{
220 int i;
221
bd69fc68
TT
222 for (i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (t); ++i)
223 {
883fd55a 224 struct decl_field *tdef = &TYPE_TYPEDEF_FIELD (t, i);
bd69fc68
TT
225 void **slot;
226
c819b2c0 227 slot = htab_find_slot (m_table, tdef, INSERT);
bd69fc68
TT
228 /* Only add a given typedef name once. Really this shouldn't
229 happen; but it is safe enough to do the updates breadth-first
230 and thus use the most specific typedef. */
231 if (*slot == NULL)
232 *slot = tdef;
233 }
234
235 /* Recurse into superclasses. */
236 for (i = 0; i < TYPE_N_BASECLASSES (t); ++i)
c819b2c0 237 recursively_update (TYPE_BASECLASS (t, i));
bd69fc68
TT
238}
239
c819b2c0 240/* See typeprint.h. */
bd69fc68
TT
241
242void
c819b2c0 243typedef_hash_table::add_template_parameters (struct type *t)
bd69fc68
TT
244{
245 int i;
246
bd69fc68
TT
247 for (i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (t); ++i)
248 {
883fd55a 249 struct decl_field *tf;
bd69fc68
TT
250 void **slot;
251
252 /* We only want type-valued template parameters in the hash. */
253 if (SYMBOL_CLASS (TYPE_TEMPLATE_ARGUMENT (t, i)) != LOC_TYPEDEF)
254 continue;
255
c819b2c0 256 tf = XOBNEW (&m_storage, struct decl_field);
bd69fc68
TT
257 tf->name = SYMBOL_LINKAGE_NAME (TYPE_TEMPLATE_ARGUMENT (t, i));
258 tf->type = SYMBOL_TYPE (TYPE_TEMPLATE_ARGUMENT (t, i));
259
c819b2c0 260 slot = htab_find_slot (m_table, tf, INSERT);
bd69fc68
TT
261 if (*slot == NULL)
262 *slot = tf;
263 }
264}
265
c819b2c0 266/* See typeprint.h. */
bd69fc68 267
c819b2c0 268typedef_hash_table::typedef_hash_table ()
bd69fc68 269{
c819b2c0
TT
270 m_table = htab_create_alloc (10, hash_typedef_field, eq_typedef_field,
271 NULL, xcalloc, xfree);
bd69fc68
TT
272}
273
274/* Free a typedef field table. */
275
c819b2c0 276typedef_hash_table::~typedef_hash_table ()
bd69fc68 277{
c819b2c0 278 htab_delete (m_table);
bd69fc68
TT
279}
280
c819b2c0 281/* Helper function for typedef_hash_table::copy. */
bd69fc68
TT
282
283static int
284copy_typedef_hash_element (void **slot, void *nt)
285{
19ba03f4 286 htab_t new_table = (htab_t) nt;
bd69fc68
TT
287 void **new_slot;
288
289 new_slot = htab_find_slot (new_table, *slot, INSERT);
290 if (*new_slot == NULL)
291 *new_slot = *slot;
292
293 return 1;
294}
295
c819b2c0 296/* See typeprint.h. */
18a9fc12 297
c819b2c0 298typedef_hash_table::typedef_hash_table (const typedef_hash_table &table)
18a9fc12 299{
c819b2c0
TT
300 m_table = htab_create_alloc (10, hash_typedef_field, eq_typedef_field,
301 NULL, xcalloc, xfree);
302 htab_traverse_noresize (table.m_table, copy_typedef_hash_element,
303 m_table);
18a9fc12
TT
304}
305
306/* Look up the type T in the global typedef hash. If it is found,
307 return the typedef name. If it is not found, apply the
6dddc817 308 type-printers, if any, given by start_script_type_printers and return the
18a9fc12
TT
309 result. A NULL return means that the name was not found. */
310
c819b2c0
TT
311const char *
312typedef_hash_table::find_global_typedef (const struct type_print_options *flags,
313 struct type *t)
18a9fc12
TT
314{
315 char *applied;
316 void **slot;
883fd55a 317 struct decl_field tf, *new_tf;
18a9fc12
TT
318
319 if (flags->global_typedefs == NULL)
320 return NULL;
321
322 tf.name = NULL;
323 tf.type = t;
324
c819b2c0 325 slot = htab_find_slot (flags->global_typedefs->m_table, &tf, INSERT);
18a9fc12
TT
326 if (*slot != NULL)
327 {
883fd55a 328 new_tf = (struct decl_field *) *slot;
18a9fc12
TT
329 return new_tf->name;
330 }
331
9b94fcf1
DE
332 /* Put an entry into the hash table now, in case
333 apply_ext_lang_type_printers recurses. */
c819b2c0 334 new_tf = XOBNEW (&flags->global_typedefs->m_storage, struct decl_field);
18a9fc12
TT
335 new_tf->name = NULL;
336 new_tf->type = t;
337
338 *slot = new_tf;
339
6dddc817 340 applied = apply_ext_lang_type_printers (flags->global_printers, t);
18a9fc12
TT
341
342 if (applied != NULL)
343 {
224c3ddb 344 new_tf->name
c819b2c0 345 = (const char *) obstack_copy0 (&flags->global_typedefs->m_storage,
224c3ddb 346 applied, strlen (applied));
18a9fc12
TT
347 xfree (applied);
348 }
349
350 return new_tf->name;
351}
352
c819b2c0 353/* See typeprint.h. */
bd69fc68
TT
354
355const char *
c819b2c0
TT
356typedef_hash_table::find_typedef (const struct type_print_options *flags,
357 struct type *t)
bd69fc68 358{
18a9fc12
TT
359 if (flags->local_typedefs != NULL)
360 {
883fd55a 361 struct decl_field tf, *found;
bd69fc68 362
18a9fc12
TT
363 tf.name = NULL;
364 tf.type = t;
c819b2c0 365 found = (struct decl_field *) htab_find (flags->local_typedefs->m_table,
883fd55a 366 &tf);
bd69fc68 367
18a9fc12
TT
368 if (found != NULL)
369 return found->name;
370 }
bd69fc68 371
18a9fc12 372 return find_global_typedef (flags, t);
bd69fc68
TT
373}
374
375\f
376
a5238fbc
PM
377/* Print a description of a type in the format of a
378 typedef for the current language.
c378eb4e 379 NEW is the new name for a type TYPE. */
a5238fbc
PM
380
381void
fe978cb0 382typedef_print (struct type *type, struct symbol *newobj, struct ui_file *stream)
a5238fbc 383{
fe978cb0 384 LA_PRINT_TYPEDEF (type, newobj, stream);
5c6ce71d
TT
385}
386
387/* The default way to print a typedef. */
388
389void
390default_print_typedef (struct type *type, struct symbol *new_symbol,
391 struct ui_file *stream)
392{
393 error (_("Language not supported."));
a5238fbc
PM
394}
395
c906108c
SS
396/* Print a description of a type TYPE in the form of a declaration of a
397 variable named VARSTRING. (VARSTRING is demangled if necessary.)
398 Output goes to STREAM (via stdio).
399 If SHOW is positive, we show the contents of the outermost level
400 of structure even if there is a type name that could be used instead.
401 If SHOW is negative, we never show the details of elements' types. */
402
403void
0d5cff50 404type_print (struct type *type, const char *varstring, struct ui_file *stream,
fba45db2 405 int show)
c906108c 406{
79d43c61 407 LA_PRINT_TYPE (type, varstring, stream, show, 0, &default_ptype_flags);
c906108c
SS
408}
409
ae6a3a4c
TJB
410/* Print TYPE to a string, returning it. The caller is responsible for
411 freeing the string. */
412
2f408ecb 413std::string
ae6a3a4c
TJB
414type_to_string (struct type *type)
415{
a70b8144 416 try
ae6a3a4c 417 {
d7e74731
PA
418 string_file stb;
419
420 type_print (type, "", &stb, -1);
421 return std::move (stb.string ());
ae6a3a4c 422 }
230d2906 423 catch (const gdb_exception &except)
492d29ea 424 {
492d29ea 425 }
ae6a3a4c 426
d7e74731 427 return {};
ae6a3a4c
TJB
428}
429
7022349d
PA
430/* See typeprint.h. */
431
432void
433type_print_unknown_return_type (struct ui_file *stream)
434{
435 fprintf_filtered (stream, _("<unknown return type>"));
436}
437
46a4882b
PA
438/* See typeprint.h. */
439
440void
441error_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
c906108c
SS
447/* Print type of EXP, or last thing in value history if EXP == NULL.
448 show is passed to type_print. */
449
450static void
0b39b52e 451whatis_exp (const char *exp, int show)
c906108c 452{
3d6d86c6 453 struct value *val;
c5aa993b 454 struct type *real_type = NULL;
070ad9f0 455 struct type *type;
c906108c 456 int full = 0;
6b850546 457 LONGEST top = -1;
c906108c 458 int using_enc = 0;
79a45b7d 459 struct value_print_options opts;
53342f27 460 struct type_print_options flags = default_ptype_flags;
c906108c
SS
461
462 if (exp)
463 {
53342f27
TT
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;
7c161838
SDJ
487 case 'o':
488 {
489 /* Filter out languages which don't implement the
490 feature. */
46afe196
SDJ
491 if (show > 0
492 && (current_language->la_language == language_c
a33ccfc7
TT
493 || current_language->la_language == language_cplus
494 || current_language->la_language == language_rust))
7c161838
SDJ
495 {
496 flags.print_offsets = 1;
497 flags.print_typedefs = 0;
498 flags.print_methods = 0;
499 }
500 break;
501 }
53342f27
TT
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
4d01a485 515 expression_up expr = parse_expression (exp);
c973d0aa
PA
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);
5c319bb2
PA
535
536 /* If the expression is actually a type, then there's no
537 value to fetch the dynamic type from. */
538 val = NULL;
c973d0aa
PA
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 }
c906108c
SS
548 }
549 else
c973d0aa
PA
550 {
551 val = access_value_history (0);
552 type = value_type (val);
553 }
070ad9f0 554
79a45b7d 555 get_user_print_options (&opts);
5c319bb2 556 if (val != NULL && opts.objectprint)
070ad9f0 557 {
aa006118 558 if (((TYPE_CODE (type) == TYPE_CODE_PTR) || TYPE_IS_REFERENCE (type))
4753d33b 559 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
dfcee124 560 real_type = value_rtti_indirect_type (val, &full, &top, &using_enc);
4753d33b 561 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
41808ebe 562 real_type = value_rtti_type (val, &full, &top, &using_enc);
070ad9f0 563 }
c906108c 564
7c161838
SDJ
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
c906108c
SS
570 printf_filtered ("type = ");
571
c819b2c0
TT
572 std::unique_ptr<typedef_hash_table> table_holder;
573 std::unique_ptr<ext_lang_type_printers> printer_holder;
18a9fc12 574 if (!flags.raw)
c819b2c0
TT
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 }
18a9fc12 582
070ad9f0
DB
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 }
c906108c 591
53342f27 592 LA_PRINT_TYPE (type, "", gdb_stdout, show, 0, &flags);
c906108c 593 printf_filtered ("\n");
c906108c
SS
594}
595
c906108c 596static void
0b39b52e 597whatis_command (const char *exp, int from_tty)
c906108c
SS
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
c906108c
SS
605/* TYPENAME is either the name of a type, or an expression. */
606
c906108c 607static void
0b39b52e 608ptype_command (const char *type_name, int from_tty)
c906108c 609{
fe978cb0 610 whatis_exp (type_name, 1);
c906108c
SS
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
41808ebe 623 that come from the inferior in target byte order and target size. */
c906108c
SS
624
625void
fba45db2 626print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
c906108c
SS
627{
628 unsigned int i;
629 unsigned len;
630
f168693b 631 type = check_typedef (type);
c906108c
SS
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 {
14e75d8e 640 if (TYPE_FIELD_ENUMVAL (type, i) == val)
c906108c
SS
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:
6c7a06a3 660 LA_PRINT_CHAR ((unsigned char) val, type, stream);
c906108c
SS
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:
0d5de010
DJ
682 case TYPE_CODE_MEMBERPTR:
683 case TYPE_CODE_METHODPTR:
c906108c
SS
684 case TYPE_CODE_METHOD:
685 case TYPE_CODE_REF:
aa006118 686 case TYPE_CODE_RVALUE_REF:
5c4e30ca 687 case TYPE_CODE_NAMESPACE:
8a3fe4f8 688 error (_("internal error: unhandled type in print_type_scalar"));
c906108c
SS
689 break;
690
691 default:
8a3fe4f8 692 error (_("Invalid type code in symbol table."));
c906108c 693 }
c906108c
SS
694}
695
c906108c
SS
696/* Dump details of a type specified either directly or indirectly.
697 Uses the same sort of type lookup mechanism as ptype_command()
41808ebe 698 and whatis_command(). */
c906108c
SS
699
700void
58971144 701maintenance_print_type (const char *type_name, int from_tty)
c906108c 702{
3d6d86c6 703 struct value *val;
52f0bd74 704 struct type *type;
c906108c 705
fe978cb0 706 if (type_name != NULL)
c5aa993b 707 {
4d01a485 708 expression_up expr = parse_expression (type_name);
c5aa993b
JM
709 if (expr->elts[0].opcode == OP_TYPE)
710 {
c378eb4e 711 /* The user expression names a type directly, just use that type. */
c5aa993b
JM
712 type = expr->elts[1].type;
713 }
714 else
715 {
716 /* The user expression may name a type indirectly by naming an
c378eb4e 717 object of that type. Find that indirectly named type. */
4d01a485 718 val = evaluate_type (expr.get ());
df407dfe 719 type = value_type (val);
c5aa993b
JM
720 }
721 if (type != NULL)
722 {
723 recursive_dump_type (type, 0);
724 }
c5aa993b 725 }
c906108c 726}
c906108c 727\f
c5aa993b 728
53342f27
TT
729struct cmd_list_element *setprinttypelist;
730
731struct cmd_list_element *showprinttypelist;
732
733static void
981a3fb3 734set_print_type (const char *arg, int from_tty)
53342f27
TT
735{
736 printf_unfiltered (
737 "\"set print type\" must be followed by the name of a subcommand.\n");
635c7e8a 738 help_list (setprintlist, "set print type ", all_commands, gdb_stdout);
53342f27
TT
739}
740
741static void
981a3fb3 742show_print_type (const char *args, int from_tty)
53342f27
TT
743{
744 cmd_show_list (showprinttypelist, from_tty, "");
745}
746
747static int print_methods = 1;
748
749static void
eb4c3f4a
TT
750set_print_type_methods (const char *args,
751 int from_tty, struct cmd_list_element *c)
53342f27
TT
752{
753 default_ptype_flags.print_methods = print_methods;
754}
755
756static void
757show_print_type_methods (struct ui_file *file, int from_tty,
758 struct cmd_list_element *c, const char *value)
759{
760 fprintf_filtered (file, _("Printing of methods defined in a class in %s\n"),
761 value);
762}
763
764static int print_typedefs = 1;
765
766static void
eb4c3f4a
TT
767set_print_type_typedefs (const char *args,
768 int from_tty, struct cmd_list_element *c)
53342f27
TT
769{
770 default_ptype_flags.print_typedefs = print_typedefs;
771}
772
773static void
774show_print_type_typedefs (struct ui_file *file, int from_tty,
775 struct cmd_list_element *c, const char *value)
776{
777 fprintf_filtered (file, _("Printing of typedefs defined in a class in %s\n"),
778 value);
779}
780
883fd55a
KS
781/* Limit on the number of nested type definitions to print or -1 to print
782 all nested type definitions in a class. By default, we do not print
783 nested definitions. */
784
785static int print_nested_type_limit = 0;
786
787/* Set how many nested type definitions should be printed by the type
788 printer. */
789
790static void
791set_print_type_nested_types (const char *args, int from_tty,
792 struct cmd_list_element *c)
793{
794 default_ptype_flags.print_nested_type_limit = print_nested_type_limit;
795}
796
797/* Show how many nested type definitions the type printer will print. */
798
799static void
800show_print_type_nested_types (struct ui_file *file, int from_tty,
801 struct cmd_list_element *c, const char *value)
802{
803 if (*value == '0')
804 {
805 fprintf_filtered (file,
806 _("Will not print nested types defined in a class\n"));
807 }
808 else
809 {
810 fprintf_filtered (file,
811 _("Will print %s nested types defined in a class\n"),
812 value);
813 }
814}
815
c906108c 816void
fba45db2 817_initialize_typeprint (void)
c906108c 818{
4fc5d43e
TT
819 struct cmd_list_element *c;
820
821 c = add_com ("ptype", class_vars, ptype_command, _("\
1bedd215 822Print definition of type TYPE.\n\
a9375afe
DE
823Usage: ptype[/FLAGS] TYPE | EXPRESSION\n\
824Argument may be any type (for example a type name defined by typedef,\n\
825or \"struct STRUCT-TAG\" or \"class CLASS-NAME\" or \"union UNION-TAG\"\n\
826or \"enum ENUM-TAG\") or an expression.\n\
11081198 827The selected stack frame's lexical context is used to look up the name.\n\
53342f27
TT
828Contrary to \"whatis\", \"ptype\" always unrolls any typedefs.\n\
829\n\
830Available FLAGS are:\n\
831 /r print in \"raw\" form; do not substitute typedefs\n\
832 /m do not print methods defined in a class\n\
833 /M print methods defined in a class\n\
834 /t do not print typedefs defined in a class\n\
7c161838
SDJ
835 /T print typedefs defined in a class\n\
836 /o print offsets and sizes of fields in a struct (like pahole)\n"));
4fc5d43e 837 set_cmd_completer (c, expression_completer);
c906108c 838
4fc5d43e
TT
839 c = add_com ("whatis", class_vars, whatis_command,
840 _("Print data type of expression EXP.\n\
11081198 841Only one level of typedefs is unrolled. See also \"ptype\"."));
4fc5d43e 842 set_cmd_completer (c, expression_completer);
53342f27
TT
843
844 add_prefix_cmd ("type", no_class, show_print_type,
845 _("Generic command for showing type-printing settings."),
846 &showprinttypelist, "show print type ", 0, &showprintlist);
847 add_prefix_cmd ("type", no_class, set_print_type,
848 _("Generic command for setting how types print."),
4051d2d6 849 &setprinttypelist, "set print type ", 0, &setprintlist);
53342f27
TT
850
851 add_setshow_boolean_cmd ("methods", no_class, &print_methods,
852 _("\
853Set printing of methods defined in classes."), _("\
854Show printing of methods defined in classes."), NULL,
855 set_print_type_methods,
856 show_print_type_methods,
857 &setprinttypelist, &showprinttypelist);
858 add_setshow_boolean_cmd ("typedefs", no_class, &print_typedefs,
859 _("\
860Set printing of typedefs defined in classes."), _("\
861Show printing of typedefs defined in classes."), NULL,
862 set_print_type_typedefs,
863 show_print_type_typedefs,
864 &setprinttypelist, &showprinttypelist);
883fd55a
KS
865
866 add_setshow_zuinteger_unlimited_cmd ("nested-type-limit", no_class,
867 &print_nested_type_limit,
868 _("\
869Set the number of recursive nested type definitions to print \
870(\"unlimited\" or -1 to show all)."), _("\
871Show the number of recursive nested type definitions to print."), NULL,
872 set_print_type_nested_types,
873 show_print_type_nested_types,
874 &setprinttypelist, &showprinttypelist);
c906108c 875}
3f2f83dd
KB
876
877/* Print <not allocated> status to stream STREAM. */
878
879void
880val_print_not_allocated (struct ui_file *stream)
881{
882 fprintf_filtered (stream, _("<not allocated>"));
883}
884
885/* Print <not associated> status to stream STREAM. */
886
887void
888val_print_not_associated (struct ui_file *stream)
889{
890 fprintf_filtered (stream, _("<not associated>"));
891}
This page took 2.300359 seconds and 4 git commands to generate.