Allow really large fortran array bounds: TYPE_LENGTH to ULONGEST
[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{
492d29ea 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 }
492d29ea
PA
423 CATCH (except, RETURN_MASK_ALL)
424 {
492d29ea
PA
425 }
426 END_CATCH
ae6a3a4c 427
d7e74731 428 return {};
ae6a3a4c
TJB
429}
430
7022349d
PA
431/* See typeprint.h. */
432
433void
434type_print_unknown_return_type (struct ui_file *stream)
435{
436 fprintf_filtered (stream, _("<unknown return type>"));
437}
438
46a4882b
PA
439/* See typeprint.h. */
440
441void
442error_unknown_type (const char *sym_print_name)
443{
444 error (_("'%s' has unknown type; cast it to its declared type"),
445 sym_print_name);
446}
447
c906108c
SS
448/* Print type of EXP, or last thing in value history if EXP == NULL.
449 show is passed to type_print. */
450
451static void
0b39b52e 452whatis_exp (const char *exp, int show)
c906108c 453{
3d6d86c6 454 struct value *val;
c5aa993b 455 struct type *real_type = NULL;
070ad9f0 456 struct type *type;
c906108c 457 int full = 0;
6b850546 458 LONGEST top = -1;
c906108c 459 int using_enc = 0;
79a45b7d 460 struct value_print_options opts;
53342f27 461 struct type_print_options flags = default_ptype_flags;
c906108c
SS
462
463 if (exp)
464 {
53342f27
TT
465 if (*exp == '/')
466 {
467 int seen_one = 0;
468
469 for (++exp; *exp && !isspace (*exp); ++exp)
470 {
471 switch (*exp)
472 {
473 case 'r':
474 flags.raw = 1;
475 break;
476 case 'm':
477 flags.print_methods = 0;
478 break;
479 case 'M':
480 flags.print_methods = 1;
481 break;
482 case 't':
483 flags.print_typedefs = 0;
484 break;
485 case 'T':
486 flags.print_typedefs = 1;
487 break;
7c161838
SDJ
488 case 'o':
489 {
490 /* Filter out languages which don't implement the
491 feature. */
46afe196
SDJ
492 if (show > 0
493 && (current_language->la_language == language_c
a33ccfc7
TT
494 || current_language->la_language == language_cplus
495 || current_language->la_language == language_rust))
7c161838
SDJ
496 {
497 flags.print_offsets = 1;
498 flags.print_typedefs = 0;
499 flags.print_methods = 0;
500 }
501 break;
502 }
53342f27
TT
503 default:
504 error (_("unrecognized flag '%c'"), *exp);
505 }
506 seen_one = 1;
507 }
508
509 if (!*exp && !seen_one)
510 error (_("flag expected"));
511 if (!isspace (*exp))
512 error (_("expected space after format"));
513 exp = skip_spaces (exp);
514 }
515
4d01a485 516 expression_up expr = parse_expression (exp);
c973d0aa
PA
517
518 /* The behavior of "whatis" depends on whether the user
519 expression names a type directly, or a language expression
520 (including variable names). If the former, then "whatis"
521 strips one level of typedefs, only. If an expression,
522 "whatis" prints the type of the expression without stripping
523 any typedef level. "ptype" always strips all levels of
524 typedefs. */
525 if (show == -1 && expr->elts[0].opcode == OP_TYPE)
526 {
527 /* The user expression names a type directly. */
528 type = expr->elts[1].type;
529
530 /* If this is a typedef, then find its immediate target.
531 Use check_typedef to resolve stubs, but ignore its result
532 because we do not want to dig past all typedefs. */
533 check_typedef (type);
534 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
535 type = TYPE_TARGET_TYPE (type);
5c319bb2
PA
536
537 /* If the expression is actually a type, then there's no
538 value to fetch the dynamic type from. */
539 val = NULL;
c973d0aa
PA
540 }
541 else
542 {
543 /* The user expression names a type indirectly by naming an
544 object or expression of that type. Find that
545 indirectly-named type. */
546 val = evaluate_type (expr.get ());
547 type = value_type (val);
548 }
c906108c
SS
549 }
550 else
c973d0aa
PA
551 {
552 val = access_value_history (0);
553 type = value_type (val);
554 }
070ad9f0 555
79a45b7d 556 get_user_print_options (&opts);
5c319bb2 557 if (val != NULL && opts.objectprint)
070ad9f0 558 {
aa006118 559 if (((TYPE_CODE (type) == TYPE_CODE_PTR) || TYPE_IS_REFERENCE (type))
4753d33b 560 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
dfcee124 561 real_type = value_rtti_indirect_type (val, &full, &top, &using_enc);
4753d33b 562 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
41808ebe 563 real_type = value_rtti_type (val, &full, &top, &using_enc);
070ad9f0 564 }
c906108c 565
7c161838
SDJ
566 if (flags.print_offsets
567 && (TYPE_CODE (type) == TYPE_CODE_STRUCT
568 || TYPE_CODE (type) == TYPE_CODE_UNION))
569 fprintf_filtered (gdb_stdout, "/* offset | size */ ");
570
c906108c
SS
571 printf_filtered ("type = ");
572
c819b2c0
TT
573 std::unique_ptr<typedef_hash_table> table_holder;
574 std::unique_ptr<ext_lang_type_printers> printer_holder;
18a9fc12 575 if (!flags.raw)
c819b2c0
TT
576 {
577 table_holder.reset (new typedef_hash_table);
578 flags.global_typedefs = table_holder.get ();
579
580 printer_holder.reset (new ext_lang_type_printers);
581 flags.global_printers = printer_holder.get ();
582 }
18a9fc12 583
070ad9f0
DB
584 if (real_type)
585 {
586 printf_filtered ("/* real type = ");
587 type_print (real_type, "", gdb_stdout, -1);
588 if (! full)
589 printf_filtered (" (incomplete object)");
590 printf_filtered (" */\n");
591 }
c906108c 592
53342f27 593 LA_PRINT_TYPE (type, "", gdb_stdout, show, 0, &flags);
c906108c 594 printf_filtered ("\n");
c906108c
SS
595}
596
c906108c 597static void
0b39b52e 598whatis_command (const char *exp, int from_tty)
c906108c
SS
599{
600 /* Most of the time users do not want to see all the fields
601 in a structure. If they do they can use the "ptype" command.
602 Hence the "-1" below. */
603 whatis_exp (exp, -1);
604}
605
c906108c
SS
606/* TYPENAME is either the name of a type, or an expression. */
607
c906108c 608static void
0b39b52e 609ptype_command (const char *type_name, int from_tty)
c906108c 610{
fe978cb0 611 whatis_exp (type_name, 1);
c906108c
SS
612}
613
614/* Print integral scalar data VAL, of type TYPE, onto stdio stream STREAM.
615 Used to print data from type structures in a specified type. For example,
616 array bounds may be characters or booleans in some languages, and this
617 allows the ranges to be printed in their "natural" form rather than as
618 decimal integer values.
619
620 FIXME: This is here simply because only the type printing routines
621 currently use it, and it wasn't clear if it really belonged somewhere
622 else (like printcmd.c). There are a lot of other gdb routines that do
623 something similar, but they are generally concerned with printing values
41808ebe 624 that come from the inferior in target byte order and target size. */
c906108c
SS
625
626void
fba45db2 627print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
c906108c
SS
628{
629 unsigned int i;
630 unsigned len;
631
f168693b 632 type = check_typedef (type);
c906108c
SS
633
634 switch (TYPE_CODE (type))
635 {
636
637 case TYPE_CODE_ENUM:
638 len = TYPE_NFIELDS (type);
639 for (i = 0; i < len; i++)
640 {
14e75d8e 641 if (TYPE_FIELD_ENUMVAL (type, i) == val)
c906108c
SS
642 {
643 break;
644 }
645 }
646 if (i < len)
647 {
648 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
649 }
650 else
651 {
652 print_longest (stream, 'd', 0, val);
653 }
654 break;
655
656 case TYPE_CODE_INT:
657 print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0, val);
658 break;
659
660 case TYPE_CODE_CHAR:
6c7a06a3 661 LA_PRINT_CHAR ((unsigned char) val, type, stream);
c906108c
SS
662 break;
663
664 case TYPE_CODE_BOOL:
665 fprintf_filtered (stream, val ? "TRUE" : "FALSE");
666 break;
667
668 case TYPE_CODE_RANGE:
669 print_type_scalar (TYPE_TARGET_TYPE (type), val, stream);
670 return;
671
672 case TYPE_CODE_UNDEF:
673 case TYPE_CODE_PTR:
674 case TYPE_CODE_ARRAY:
675 case TYPE_CODE_STRUCT:
676 case TYPE_CODE_UNION:
677 case TYPE_CODE_FUNC:
678 case TYPE_CODE_FLT:
679 case TYPE_CODE_VOID:
680 case TYPE_CODE_SET:
681 case TYPE_CODE_STRING:
682 case TYPE_CODE_ERROR:
0d5de010
DJ
683 case TYPE_CODE_MEMBERPTR:
684 case TYPE_CODE_METHODPTR:
c906108c
SS
685 case TYPE_CODE_METHOD:
686 case TYPE_CODE_REF:
aa006118 687 case TYPE_CODE_RVALUE_REF:
5c4e30ca 688 case TYPE_CODE_NAMESPACE:
8a3fe4f8 689 error (_("internal error: unhandled type in print_type_scalar"));
c906108c
SS
690 break;
691
692 default:
8a3fe4f8 693 error (_("Invalid type code in symbol table."));
c906108c 694 }
c906108c
SS
695}
696
c906108c
SS
697/* Dump details of a type specified either directly or indirectly.
698 Uses the same sort of type lookup mechanism as ptype_command()
41808ebe 699 and whatis_command(). */
c906108c
SS
700
701void
58971144 702maintenance_print_type (const char *type_name, int from_tty)
c906108c 703{
3d6d86c6 704 struct value *val;
52f0bd74 705 struct type *type;
c906108c 706
fe978cb0 707 if (type_name != NULL)
c5aa993b 708 {
4d01a485 709 expression_up expr = parse_expression (type_name);
c5aa993b
JM
710 if (expr->elts[0].opcode == OP_TYPE)
711 {
c378eb4e 712 /* The user expression names a type directly, just use that type. */
c5aa993b
JM
713 type = expr->elts[1].type;
714 }
715 else
716 {
717 /* The user expression may name a type indirectly by naming an
c378eb4e 718 object of that type. Find that indirectly named type. */
4d01a485 719 val = evaluate_type (expr.get ());
df407dfe 720 type = value_type (val);
c5aa993b
JM
721 }
722 if (type != NULL)
723 {
724 recursive_dump_type (type, 0);
725 }
c5aa993b 726 }
c906108c 727}
c906108c 728\f
c5aa993b 729
53342f27
TT
730struct cmd_list_element *setprinttypelist;
731
732struct cmd_list_element *showprinttypelist;
733
734static void
981a3fb3 735set_print_type (const char *arg, int from_tty)
53342f27
TT
736{
737 printf_unfiltered (
738 "\"set print type\" must be followed by the name of a subcommand.\n");
635c7e8a 739 help_list (setprintlist, "set print type ", all_commands, gdb_stdout);
53342f27
TT
740}
741
742static void
981a3fb3 743show_print_type (const char *args, int from_tty)
53342f27
TT
744{
745 cmd_show_list (showprinttypelist, from_tty, "");
746}
747
748static int print_methods = 1;
749
750static void
eb4c3f4a
TT
751set_print_type_methods (const char *args,
752 int from_tty, struct cmd_list_element *c)
53342f27
TT
753{
754 default_ptype_flags.print_methods = print_methods;
755}
756
757static void
758show_print_type_methods (struct ui_file *file, int from_tty,
759 struct cmd_list_element *c, const char *value)
760{
761 fprintf_filtered (file, _("Printing of methods defined in a class in %s\n"),
762 value);
763}
764
765static int print_typedefs = 1;
766
767static void
eb4c3f4a
TT
768set_print_type_typedefs (const char *args,
769 int from_tty, struct cmd_list_element *c)
53342f27
TT
770{
771 default_ptype_flags.print_typedefs = print_typedefs;
772}
773
774static void
775show_print_type_typedefs (struct ui_file *file, int from_tty,
776 struct cmd_list_element *c, const char *value)
777{
778 fprintf_filtered (file, _("Printing of typedefs defined in a class in %s\n"),
779 value);
780}
781
883fd55a
KS
782/* Limit on the number of nested type definitions to print or -1 to print
783 all nested type definitions in a class. By default, we do not print
784 nested definitions. */
785
786static int print_nested_type_limit = 0;
787
788/* Set how many nested type definitions should be printed by the type
789 printer. */
790
791static void
792set_print_type_nested_types (const char *args, int from_tty,
793 struct cmd_list_element *c)
794{
795 default_ptype_flags.print_nested_type_limit = print_nested_type_limit;
796}
797
798/* Show how many nested type definitions the type printer will print. */
799
800static void
801show_print_type_nested_types (struct ui_file *file, int from_tty,
802 struct cmd_list_element *c, const char *value)
803{
804 if (*value == '0')
805 {
806 fprintf_filtered (file,
807 _("Will not print nested types defined in a class\n"));
808 }
809 else
810 {
811 fprintf_filtered (file,
812 _("Will print %s nested types defined in a class\n"),
813 value);
814 }
815}
816
c906108c 817void
fba45db2 818_initialize_typeprint (void)
c906108c 819{
4fc5d43e
TT
820 struct cmd_list_element *c;
821
822 c = add_com ("ptype", class_vars, ptype_command, _("\
1bedd215 823Print definition of type TYPE.\n\
a9375afe
DE
824Usage: ptype[/FLAGS] TYPE | EXPRESSION\n\
825Argument may be any type (for example a type name defined by typedef,\n\
826or \"struct STRUCT-TAG\" or \"class CLASS-NAME\" or \"union UNION-TAG\"\n\
827or \"enum ENUM-TAG\") or an expression.\n\
11081198 828The selected stack frame's lexical context is used to look up the name.\n\
53342f27
TT
829Contrary to \"whatis\", \"ptype\" always unrolls any typedefs.\n\
830\n\
831Available FLAGS are:\n\
832 /r print in \"raw\" form; do not substitute typedefs\n\
833 /m do not print methods defined in a class\n\
834 /M print methods defined in a class\n\
835 /t do not print typedefs defined in a class\n\
7c161838
SDJ
836 /T print typedefs defined in a class\n\
837 /o print offsets and sizes of fields in a struct (like pahole)\n"));
4fc5d43e 838 set_cmd_completer (c, expression_completer);
c906108c 839
4fc5d43e
TT
840 c = add_com ("whatis", class_vars, whatis_command,
841 _("Print data type of expression EXP.\n\
11081198 842Only one level of typedefs is unrolled. See also \"ptype\"."));
4fc5d43e 843 set_cmd_completer (c, expression_completer);
53342f27
TT
844
845 add_prefix_cmd ("type", no_class, show_print_type,
846 _("Generic command for showing type-printing settings."),
847 &showprinttypelist, "show print type ", 0, &showprintlist);
848 add_prefix_cmd ("type", no_class, set_print_type,
849 _("Generic command for setting how types print."),
4051d2d6 850 &setprinttypelist, "set print type ", 0, &setprintlist);
53342f27
TT
851
852 add_setshow_boolean_cmd ("methods", no_class, &print_methods,
853 _("\
854Set printing of methods defined in classes."), _("\
855Show printing of methods defined in classes."), NULL,
856 set_print_type_methods,
857 show_print_type_methods,
858 &setprinttypelist, &showprinttypelist);
859 add_setshow_boolean_cmd ("typedefs", no_class, &print_typedefs,
860 _("\
861Set printing of typedefs defined in classes."), _("\
862Show printing of typedefs defined in classes."), NULL,
863 set_print_type_typedefs,
864 show_print_type_typedefs,
865 &setprinttypelist, &showprinttypelist);
883fd55a
KS
866
867 add_setshow_zuinteger_unlimited_cmd ("nested-type-limit", no_class,
868 &print_nested_type_limit,
869 _("\
870Set the number of recursive nested type definitions to print \
871(\"unlimited\" or -1 to show all)."), _("\
872Show the number of recursive nested type definitions to print."), NULL,
873 set_print_type_nested_types,
874 show_print_type_nested_types,
875 &setprinttypelist, &showprinttypelist);
c906108c 876}
3f2f83dd
KB
877
878/* Print <not allocated> status to stream STREAM. */
879
880void
881val_print_not_allocated (struct ui_file *stream)
882{
883 fprintf_filtered (stream, _("<not allocated>"));
884}
885
886/* Print <not associated> status to stream STREAM. */
887
888void
889val_print_not_associated (struct ui_file *stream)
890{
891 fprintf_filtered (stream, _("<not associated>"));
892}
This page took 2.227715 seconds and 4 git commands to generate.