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