1 /* Language independent support for printing types for GDB, the GNU debugger.
3 Copyright (C) 1986-2017 Free Software Foundation, Inc.
5 This file is part of GDB.
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
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
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.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 #include "gdb_obstack.h"
22 #include "bfd.h" /* Binary File Description */
25 #include "expression.h"
33 #include "typeprint.h"
36 #include "cli/cli-utils.h"
37 #include "extension.h"
38 #include "completer.h"
40 const struct type_print_options type_print_raw_options =
43 1, /* print_methods */
44 1, /* print_typedefs */
45 0, /* print_nested_type_limit */
46 NULL, /* local_typedefs */
47 NULL, /* global_table */
48 NULL /* global_printers */
51 /* The default flags for 'ptype' and 'whatis'. */
53 static struct type_print_options default_ptype_flags =
56 1, /* print_methods */
57 1, /* print_typedefs */
58 0, /* print_nested_type_limit */
59 NULL, /* local_typedefs */
60 NULL, /* global_table */
61 NULL /* global_printers */
66 /* A hash table holding typedef_field objects. This is more
67 complicated than an ordinary hash because it must also track the
68 lifetime of some -- but not all -- of the contained objects. */
70 struct typedef_hash_table
72 /* The actual hash table. */
75 /* Storage for typedef_field objects that must be synthesized. */
76 struct obstack storage;
79 /* A hash function for a typedef_field. */
82 hash_typedef_field (const void *p)
84 const struct decl_field *tf = (const struct decl_field *) p;
85 struct type *t = check_typedef (tf->type);
87 return htab_hash_string (TYPE_SAFE_NAME (t));
90 /* An equality function for a typedef field. */
93 eq_typedef_field (const void *a, const void *b)
95 const struct decl_field *tfa = (const struct decl_field *) a;
96 const struct decl_field *tfb = (const struct decl_field *) b;
98 return types_equal (tfa->type, tfb->type);
101 /* Add typedefs from T to the hash table TABLE. */
104 recursively_update_typedef_hash (struct typedef_hash_table *table,
112 for (i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (t); ++i)
114 struct decl_field *tdef = &TYPE_TYPEDEF_FIELD (t, i);
117 slot = htab_find_slot (table->table, tdef, INSERT);
118 /* Only add a given typedef name once. Really this shouldn't
119 happen; but it is safe enough to do the updates breadth-first
120 and thus use the most specific typedef. */
125 /* Recurse into superclasses. */
126 for (i = 0; i < TYPE_N_BASECLASSES (t); ++i)
127 recursively_update_typedef_hash (table, TYPE_BASECLASS (t, i));
130 /* Add template parameters from T to the typedef hash TABLE. */
133 add_template_parameters (struct typedef_hash_table *table, struct type *t)
140 for (i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (t); ++i)
142 struct decl_field *tf;
145 /* We only want type-valued template parameters in the hash. */
146 if (SYMBOL_CLASS (TYPE_TEMPLATE_ARGUMENT (t, i)) != LOC_TYPEDEF)
149 tf = XOBNEW (&table->storage, struct decl_field);
150 tf->name = SYMBOL_LINKAGE_NAME (TYPE_TEMPLATE_ARGUMENT (t, i));
151 tf->type = SYMBOL_TYPE (TYPE_TEMPLATE_ARGUMENT (t, i));
153 slot = htab_find_slot (table->table, tf, INSERT);
159 /* Create a new typedef-lookup hash table. */
161 struct typedef_hash_table *
162 create_typedef_hash (void)
164 struct typedef_hash_table *result;
166 result = XNEW (struct typedef_hash_table);
167 result->table = htab_create_alloc (10, hash_typedef_field, eq_typedef_field,
168 NULL, xcalloc, xfree);
169 obstack_init (&result->storage);
174 /* Free a typedef field table. */
177 free_typedef_hash (struct typedef_hash_table *table)
181 htab_delete (table->table);
182 obstack_free (&table->storage, NULL);
187 /* A cleanup for freeing a typedef_hash_table. */
190 do_free_typedef_hash (void *arg)
192 free_typedef_hash ((struct typedef_hash_table *) arg);
195 /* Return a new cleanup that frees TABLE. */
198 make_cleanup_free_typedef_hash (struct typedef_hash_table *table)
200 return make_cleanup (do_free_typedef_hash, table);
203 /* Helper function for copy_typedef_hash. */
206 copy_typedef_hash_element (void **slot, void *nt)
208 htab_t new_table = (htab_t) nt;
211 new_slot = htab_find_slot (new_table, *slot, INSERT);
212 if (*new_slot == NULL)
218 /* Copy a typedef hash. */
220 struct typedef_hash_table *
221 copy_typedef_hash (struct typedef_hash_table *table)
223 struct typedef_hash_table *result;
228 result = create_typedef_hash ();
229 htab_traverse_noresize (table->table, copy_typedef_hash_element,
234 /* A cleanup to free the global typedef hash. */
237 do_free_global_table (void *arg)
239 struct type_print_options *flags = (struct type_print_options *) arg;
241 free_typedef_hash (flags->global_typedefs);
242 free_ext_lang_type_printers (flags->global_printers);
245 /* Create the global typedef hash. */
247 static struct cleanup *
248 create_global_typedef_table (struct type_print_options *flags)
250 gdb_assert (flags->global_typedefs == NULL && flags->global_printers == NULL);
251 flags->global_typedefs = create_typedef_hash ();
252 flags->global_printers = start_ext_lang_type_printers ();
253 return make_cleanup (do_free_global_table, flags);
256 /* Look up the type T in the global typedef hash. If it is found,
257 return the typedef name. If it is not found, apply the
258 type-printers, if any, given by start_script_type_printers and return the
259 result. A NULL return means that the name was not found. */
262 find_global_typedef (const struct type_print_options *flags,
267 struct decl_field tf, *new_tf;
269 if (flags->global_typedefs == NULL)
275 slot = htab_find_slot (flags->global_typedefs->table, &tf, INSERT);
278 new_tf = (struct decl_field *) *slot;
282 /* Put an entry into the hash table now, in case
283 apply_ext_lang_type_printers recurses. */
284 new_tf = XOBNEW (&flags->global_typedefs->storage, struct decl_field);
290 applied = apply_ext_lang_type_printers (flags->global_printers, t);
295 = (const char *) obstack_copy0 (&flags->global_typedefs->storage,
296 applied, strlen (applied));
303 /* Look up the type T in the typedef hash table in with FLAGS. If T
304 is in the table, return its short (class-relative) typedef name.
305 Otherwise return NULL. If the table is NULL, this always returns
309 find_typedef_in_hash (const struct type_print_options *flags, struct type *t)
311 if (flags->local_typedefs != NULL)
313 struct decl_field tf, *found;
317 found = (struct decl_field *) htab_find (flags->local_typedefs->table,
324 return find_global_typedef (flags, t);
329 /* Print a description of a type in the format of a
330 typedef for the current language.
331 NEW is the new name for a type TYPE. */
334 typedef_print (struct type *type, struct symbol *newobj, struct ui_file *stream)
336 LA_PRINT_TYPEDEF (type, newobj, stream);
339 /* The default way to print a typedef. */
342 default_print_typedef (struct type *type, struct symbol *new_symbol,
343 struct ui_file *stream)
345 error (_("Language not supported."));
348 /* Print a description of a type TYPE in the form of a declaration of a
349 variable named VARSTRING. (VARSTRING is demangled if necessary.)
350 Output goes to STREAM (via stdio).
351 If SHOW is positive, we show the contents of the outermost level
352 of structure even if there is a type name that could be used instead.
353 If SHOW is negative, we never show the details of elements' types. */
356 type_print (struct type *type, const char *varstring, struct ui_file *stream,
359 LA_PRINT_TYPE (type, varstring, stream, show, 0, &default_ptype_flags);
362 /* Print TYPE to a string, returning it. The caller is responsible for
363 freeing the string. */
366 type_to_string (struct type *type)
372 type_print (type, "", &stb, -1);
373 return std::move (stb.string ());
375 CATCH (except, RETURN_MASK_ALL)
383 /* See typeprint.h. */
386 type_print_unknown_return_type (struct ui_file *stream)
388 fprintf_filtered (stream, _("<unknown return type>"));
391 /* See typeprint.h. */
394 error_unknown_type (const char *sym_print_name)
396 error (_("'%s' has unknown type; cast it to its declared type"),
400 /* Print type of EXP, or last thing in value history if EXP == NULL.
401 show is passed to type_print. */
404 whatis_exp (const char *exp, int show)
407 struct cleanup *old_chain;
408 struct type *real_type = NULL;
413 struct value_print_options opts;
414 struct type_print_options flags = default_ptype_flags;
416 old_chain = make_cleanup (null_cleanup, NULL);
424 for (++exp; *exp && !isspace (*exp); ++exp)
432 flags.print_methods = 0;
435 flags.print_methods = 1;
438 flags.print_typedefs = 0;
441 flags.print_typedefs = 1;
444 error (_("unrecognized flag '%c'"), *exp);
449 if (!*exp && !seen_one)
450 error (_("flag expected"));
452 error (_("expected space after format"));
453 exp = skip_spaces (exp);
456 expression_up expr = parse_expression (exp);
458 /* The behavior of "whatis" depends on whether the user
459 expression names a type directly, or a language expression
460 (including variable names). If the former, then "whatis"
461 strips one level of typedefs, only. If an expression,
462 "whatis" prints the type of the expression without stripping
463 any typedef level. "ptype" always strips all levels of
465 if (show == -1 && expr->elts[0].opcode == OP_TYPE)
467 /* The user expression names a type directly. */
468 type = expr->elts[1].type;
470 /* If this is a typedef, then find its immediate target.
471 Use check_typedef to resolve stubs, but ignore its result
472 because we do not want to dig past all typedefs. */
473 check_typedef (type);
474 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
475 type = TYPE_TARGET_TYPE (type);
479 /* The user expression names a type indirectly by naming an
480 object or expression of that type. Find that
481 indirectly-named type. */
482 val = evaluate_type (expr.get ());
483 type = value_type (val);
488 val = access_value_history (0);
489 type = value_type (val);
492 get_user_print_options (&opts);
493 if (opts.objectprint)
495 if (((TYPE_CODE (type) == TYPE_CODE_PTR) || TYPE_IS_REFERENCE (type))
496 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
497 real_type = value_rtti_indirect_type (val, &full, &top, &using_enc);
498 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
499 real_type = value_rtti_type (val, &full, &top, &using_enc);
502 printf_filtered ("type = ");
505 create_global_typedef_table (&flags);
509 printf_filtered ("/* real type = ");
510 type_print (real_type, "", gdb_stdout, -1);
512 printf_filtered (" (incomplete object)");
513 printf_filtered (" */\n");
516 LA_PRINT_TYPE (type, "", gdb_stdout, show, 0, &flags);
517 printf_filtered ("\n");
519 do_cleanups (old_chain);
523 whatis_command (const char *exp, int from_tty)
525 /* Most of the time users do not want to see all the fields
526 in a structure. If they do they can use the "ptype" command.
527 Hence the "-1" below. */
528 whatis_exp (exp, -1);
531 /* TYPENAME is either the name of a type, or an expression. */
534 ptype_command (const char *type_name, int from_tty)
536 whatis_exp (type_name, 1);
539 /* Print integral scalar data VAL, of type TYPE, onto stdio stream STREAM.
540 Used to print data from type structures in a specified type. For example,
541 array bounds may be characters or booleans in some languages, and this
542 allows the ranges to be printed in their "natural" form rather than as
543 decimal integer values.
545 FIXME: This is here simply because only the type printing routines
546 currently use it, and it wasn't clear if it really belonged somewhere
547 else (like printcmd.c). There are a lot of other gdb routines that do
548 something similar, but they are generally concerned with printing values
549 that come from the inferior in target byte order and target size. */
552 print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
557 type = check_typedef (type);
559 switch (TYPE_CODE (type))
563 len = TYPE_NFIELDS (type);
564 for (i = 0; i < len; i++)
566 if (TYPE_FIELD_ENUMVAL (type, i) == val)
573 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
577 print_longest (stream, 'd', 0, val);
582 print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0, val);
586 LA_PRINT_CHAR ((unsigned char) val, type, stream);
590 fprintf_filtered (stream, val ? "TRUE" : "FALSE");
593 case TYPE_CODE_RANGE:
594 print_type_scalar (TYPE_TARGET_TYPE (type), val, stream);
597 case TYPE_CODE_UNDEF:
599 case TYPE_CODE_ARRAY:
600 case TYPE_CODE_STRUCT:
601 case TYPE_CODE_UNION:
606 case TYPE_CODE_STRING:
607 case TYPE_CODE_ERROR:
608 case TYPE_CODE_MEMBERPTR:
609 case TYPE_CODE_METHODPTR:
610 case TYPE_CODE_METHOD:
612 case TYPE_CODE_RVALUE_REF:
613 case TYPE_CODE_NAMESPACE:
614 error (_("internal error: unhandled type in print_type_scalar"));
618 error (_("Invalid type code in symbol table."));
623 /* Dump details of a type specified either directly or indirectly.
624 Uses the same sort of type lookup mechanism as ptype_command()
625 and whatis_command(). */
628 maintenance_print_type (const char *type_name, int from_tty)
633 if (type_name != NULL)
635 expression_up expr = parse_expression (type_name);
636 if (expr->elts[0].opcode == OP_TYPE)
638 /* The user expression names a type directly, just use that type. */
639 type = expr->elts[1].type;
643 /* The user expression may name a type indirectly by naming an
644 object of that type. Find that indirectly named type. */
645 val = evaluate_type (expr.get ());
646 type = value_type (val);
650 recursive_dump_type (type, 0);
656 struct cmd_list_element *setprinttypelist;
658 struct cmd_list_element *showprinttypelist;
661 set_print_type (const char *arg, int from_tty)
664 "\"set print type\" must be followed by the name of a subcommand.\n");
665 help_list (setprintlist, "set print type ", all_commands, gdb_stdout);
669 show_print_type (const char *args, int from_tty)
671 cmd_show_list (showprinttypelist, from_tty, "");
674 static int print_methods = 1;
677 set_print_type_methods (const char *args,
678 int from_tty, struct cmd_list_element *c)
680 default_ptype_flags.print_methods = print_methods;
684 show_print_type_methods (struct ui_file *file, int from_tty,
685 struct cmd_list_element *c, const char *value)
687 fprintf_filtered (file, _("Printing of methods defined in a class in %s\n"),
691 static int print_typedefs = 1;
694 set_print_type_typedefs (const char *args,
695 int from_tty, struct cmd_list_element *c)
697 default_ptype_flags.print_typedefs = print_typedefs;
701 show_print_type_typedefs (struct ui_file *file, int from_tty,
702 struct cmd_list_element *c, const char *value)
704 fprintf_filtered (file, _("Printing of typedefs defined in a class in %s\n"),
708 /* Limit on the number of nested type definitions to print or -1 to print
709 all nested type definitions in a class. By default, we do not print
710 nested definitions. */
712 static int print_nested_type_limit = 0;
714 /* Set how many nested type definitions should be printed by the type
718 set_print_type_nested_types (const char *args, int from_tty,
719 struct cmd_list_element *c)
721 default_ptype_flags.print_nested_type_limit = print_nested_type_limit;
724 /* Show how many nested type definitions the type printer will print. */
727 show_print_type_nested_types (struct ui_file *file, int from_tty,
728 struct cmd_list_element *c, const char *value)
732 fprintf_filtered (file,
733 _("Will not print nested types defined in a class\n"));
737 fprintf_filtered (file,
738 _("Will print %s nested types defined in a class\n"),
744 _initialize_typeprint (void)
746 struct cmd_list_element *c;
748 c = add_com ("ptype", class_vars, ptype_command, _("\
749 Print definition of type TYPE.\n\
750 Usage: ptype[/FLAGS] TYPE | EXPRESSION\n\
751 Argument may be any type (for example a type name defined by typedef,\n\
752 or \"struct STRUCT-TAG\" or \"class CLASS-NAME\" or \"union UNION-TAG\"\n\
753 or \"enum ENUM-TAG\") or an expression.\n\
754 The selected stack frame's lexical context is used to look up the name.\n\
755 Contrary to \"whatis\", \"ptype\" always unrolls any typedefs.\n\
757 Available FLAGS are:\n\
758 /r print in \"raw\" form; do not substitute typedefs\n\
759 /m do not print methods defined in a class\n\
760 /M print methods defined in a class\n\
761 /t do not print typedefs defined in a class\n\
762 /T print typedefs defined in a class"));
763 set_cmd_completer (c, expression_completer);
765 c = add_com ("whatis", class_vars, whatis_command,
766 _("Print data type of expression EXP.\n\
767 Only one level of typedefs is unrolled. See also \"ptype\"."));
768 set_cmd_completer (c, expression_completer);
770 add_prefix_cmd ("type", no_class, show_print_type,
771 _("Generic command for showing type-printing settings."),
772 &showprinttypelist, "show print type ", 0, &showprintlist);
773 add_prefix_cmd ("type", no_class, set_print_type,
774 _("Generic command for setting how types print."),
775 &setprinttypelist, "show print type ", 0, &setprintlist);
777 add_setshow_boolean_cmd ("methods", no_class, &print_methods,
779 Set printing of methods defined in classes."), _("\
780 Show printing of methods defined in classes."), NULL,
781 set_print_type_methods,
782 show_print_type_methods,
783 &setprinttypelist, &showprinttypelist);
784 add_setshow_boolean_cmd ("typedefs", no_class, &print_typedefs,
786 Set printing of typedefs defined in classes."), _("\
787 Show printing of typedefs defined in classes."), NULL,
788 set_print_type_typedefs,
789 show_print_type_typedefs,
790 &setprinttypelist, &showprinttypelist);
792 add_setshow_zuinteger_unlimited_cmd ("nested-type-limit", no_class,
793 &print_nested_type_limit,
795 Set the number of recursive nested type definitions to print \
796 (\"unlimited\" or -1 to show all)."), _("\
797 Show the number of recursive nested type definitions to print."), NULL,
798 set_print_type_nested_types,
799 show_print_type_nested_types,
800 &setprinttypelist, &showprinttypelist);
803 /* Print <not allocated> status to stream STREAM. */
806 val_print_not_allocated (struct ui_file *stream)
808 fprintf_filtered (stream, _("<not allocated>"));
811 /* Print <not associated> status to stream STREAM. */
814 val_print_not_associated (struct ui_file *stream)
816 fprintf_filtered (stream, _("<not associated>"));