GDB (xrefs)
/tmp/gdb-8.1/gdb/typeprint.c
Go to the documentation of this file.
1 /* Language independent support for printing types for GDB, the GNU debugger.
2 
3  Copyright (C) 1986-2018 Free Software Foundation, Inc.
4 
5  This file is part of GDB.
6 
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.
11 
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.
16 
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/>. */
19 
20 #include "defs.h"
21 #include "gdb_obstack.h"
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"
32 #include "cp-abi.h"
33 #include "typeprint.h"
34 #include "valprint.h"
35 #include <ctype.h>
36 #include "cli/cli-utils.h"
37 #include "extension.h"
38 #include "completer.h"
39 
41 {
42  1, /* raw */
43  1, /* print_methods */
44  1, /* print_typedefs */
45  0, /* print_offsets */
46  0, /* print_nested_type_limit */
47  NULL, /* local_typedefs */
48  NULL, /* global_table */
49  NULL /* global_printers */
50 };
51 
52 /* The default flags for 'ptype' and 'whatis'. */
53 
55 {
56  0, /* raw */
57  1, /* print_methods */
58  1, /* print_typedefs */
59  0, /* print_offsets */
60  0, /* print_nested_type_limit */
61  NULL, /* local_typedefs */
62  NULL, /* global_table */
63  NULL /* global_printers */
64 };
65 
66 
67 
68 /* A hash table holding typedef_field objects. This is more
69  complicated than an ordinary hash because it must also track the
70  lifetime of some -- but not all -- of the contained objects. */
71 
73 {
74  /* The actual hash table. */
75  htab_t table;
76 
77  /* Storage for typedef_field objects that must be synthesized. */
78  struct obstack storage;
79 };
80 
81 /* A hash function for a typedef_field. */
82 
83 static hashval_t
84 hash_typedef_field (const void *p)
85 {
86  const struct decl_field *tf = (const struct decl_field *) p;
87  struct type *t = check_typedef (tf->type);
88 
89  return htab_hash_string (TYPE_SAFE_NAME (t));
90 }
91 
92 /* An equality function for a typedef field. */
93 
94 static int
95 eq_typedef_field (const void *a, const void *b)
96 {
97  const struct decl_field *tfa = (const struct decl_field *) a;
98  const struct decl_field *tfb = (const struct decl_field *) b;
99 
100  return types_equal (tfa->type, tfb->type);
101 }
102 
103 /* Add typedefs from T to the hash table TABLE. */
104 
105 void
107  struct type *t)
108 {
109  int i;
110 
111  if (table == NULL)
112  return;
113 
114  for (i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (t); ++i)
115  {
116  struct decl_field *tdef = &TYPE_TYPEDEF_FIELD (t, i);
117  void **slot;
118 
119  slot = htab_find_slot (table->table, tdef, INSERT);
120  /* Only add a given typedef name once. Really this shouldn't
121  happen; but it is safe enough to do the updates breadth-first
122  and thus use the most specific typedef. */
123  if (*slot == NULL)
124  *slot = tdef;
125  }
126 
127  /* Recurse into superclasses. */
128  for (i = 0; i < TYPE_N_BASECLASSES (t); ++i)
130 }
131 
132 /* Add template parameters from T to the typedef hash TABLE. */
133 
134 void
136 {
137  int i;
138 
139  if (table == NULL)
140  return;
141 
142  for (i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (t); ++i)
143  {
144  struct decl_field *tf;
145  void **slot;
146 
147  /* We only want type-valued template parameters in the hash. */
149  continue;
150 
151  tf = XOBNEW (&table->storage, struct decl_field);
153  tf->type = SYMBOL_TYPE (TYPE_TEMPLATE_ARGUMENT (t, i));
154 
155  slot = htab_find_slot (table->table, tf, INSERT);
156  if (*slot == NULL)
157  *slot = tf;
158  }
159 }
160 
161 /* Create a new typedef-lookup hash table. */
162 
163 struct typedef_hash_table *
165 {
166  struct typedef_hash_table *result;
167 
168  result = XNEW (struct typedef_hash_table);
169  result->table = htab_create_alloc (10, hash_typedef_field, eq_typedef_field,
170  NULL, xcalloc, xfree);
171  obstack_init (&result->storage);
172 
173  return result;
174 }
175 
176 /* Free a typedef field table. */
177 
178 void
180 {
181  if (table != NULL)
182  {
183  htab_delete (table->table);
184  obstack_free (&table->storage, NULL);
185  xfree (table);
186  }
187 }
188 
189 /* A cleanup for freeing a typedef_hash_table. */
190 
191 static void
193 {
194  free_typedef_hash ((struct typedef_hash_table *) arg);
195 }
196 
197 /* Return a new cleanup that frees TABLE. */
198 
199 struct cleanup *
201 {
202  return make_cleanup (do_free_typedef_hash, table);
203 }
204 
205 /* Helper function for copy_typedef_hash. */
206 
207 static int
208 copy_typedef_hash_element (void **slot, void *nt)
209 {
210  htab_t new_table = (htab_t) nt;
211  void **new_slot;
212 
213  new_slot = htab_find_slot (new_table, *slot, INSERT);
214  if (*new_slot == NULL)
215  *new_slot = *slot;
216 
217  return 1;
218 }
219 
220 /* Copy a typedef hash. */
221 
222 struct typedef_hash_table *
224 {
225  struct typedef_hash_table *result;
226 
227  if (table == NULL)
228  return NULL;
229 
230  result = create_typedef_hash ();
231  htab_traverse_noresize (table->table, copy_typedef_hash_element,
232  result->table);
233  return result;
234 }
235 
236 /* A cleanup to free the global typedef hash. */
237 
238 static void
240 {
241  struct type_print_options *flags = (struct type_print_options *) arg;
242 
243  free_typedef_hash (flags->global_typedefs);
244  free_ext_lang_type_printers (flags->global_printers);
245 }
246 
247 /* Create the global typedef hash. */
248 
249 static struct cleanup *
251 {
252  gdb_assert (flags->global_typedefs == NULL && flags->global_printers == NULL);
253  flags->global_typedefs = create_typedef_hash ();
254  flags->global_printers = start_ext_lang_type_printers ();
256 }
257 
258 /* Look up the type T in the global typedef hash. If it is found,
259  return the typedef name. If it is not found, apply the
260  type-printers, if any, given by start_script_type_printers and return the
261  result. A NULL return means that the name was not found. */
262 
263 static const char *
265  struct type *t)
266 {
267  char *applied;
268  void **slot;
269  struct decl_field tf, *new_tf;
270 
271  if (flags->global_typedefs == NULL)
272  return NULL;
273 
274  tf.name = NULL;
275  tf.type = t;
276 
277  slot = htab_find_slot (flags->global_typedefs->table, &tf, INSERT);
278  if (*slot != NULL)
279  {
280  new_tf = (struct decl_field *) *slot;
281  return new_tf->name;
282  }
283 
284  /* Put an entry into the hash table now, in case
285  apply_ext_lang_type_printers recurses. */
286  new_tf = XOBNEW (&flags->global_typedefs->storage, struct decl_field);
287  new_tf->name = NULL;
288  new_tf->type = t;
289 
290  *slot = new_tf;
291 
292  applied = apply_ext_lang_type_printers (flags->global_printers, t);
293 
294  if (applied != NULL)
295  {
296  new_tf->name
297  = (const char *) obstack_copy0 (&flags->global_typedefs->storage,
298  applied, strlen (applied));
299  xfree (applied);
300  }
301 
302  return new_tf->name;
303 }
304 
305 /* Look up the type T in the typedef hash table in with FLAGS. If T
306  is in the table, return its short (class-relative) typedef name.
307  Otherwise return NULL. If the table is NULL, this always returns
308  NULL. */
309 
310 const char *
312 {
313  if (flags->local_typedefs != NULL)
314  {
315  struct decl_field tf, *found;
316 
317  tf.name = NULL;
318  tf.type = t;
319  found = (struct decl_field *) htab_find (flags->local_typedefs->table,
320  &tf);
321 
322  if (found != NULL)
323  return found->name;
324  }
325 
326  return find_global_typedef (flags, t);
327 }
328 
329 
330 
331 /* Print a description of a type in the format of a
332  typedef for the current language.
333  NEW is the new name for a type TYPE. */
334 
335 void
336 typedef_print (struct type *type, struct symbol *newobj, struct ui_file *stream)
337 {
338  LA_PRINT_TYPEDEF (type, newobj, stream);
339 }
340 
341 /* The default way to print a typedef. */
342 
343 void
345  struct ui_file *stream)
346 {
347  error (_("Language not supported."));
348 }
349 
350 /* Print a description of a type TYPE in the form of a declaration of a
351  variable named VARSTRING. (VARSTRING is demangled if necessary.)
352  Output goes to STREAM (via stdio).
353  If SHOW is positive, we show the contents of the outermost level
354  of structure even if there is a type name that could be used instead.
355  If SHOW is negative, we never show the details of elements' types. */
356 
357 void
358 type_print (struct type *type, const char *varstring, struct ui_file *stream,
359  int show)
360 {
361  LA_PRINT_TYPE (type, varstring, stream, show, 0, &default_ptype_flags);
362 }
363 
364 /* Print TYPE to a string, returning it. The caller is responsible for
365  freeing the string. */
366 
369 {
370  TRY
371  {
372  string_file stb;
373 
374  type_print (type, "", &stb, -1);
375  return std::move (stb.string ());
376  }
377  CATCH (except, RETURN_MASK_ALL)
378  {
379  }
380  END_CATCH
381 
382  return {};
383 }
384 
385 /* See typeprint.h. */
386 
387 void
389 {
390  fprintf_filtered (stream, _("<unknown return type>"));
391 }
392 
393 /* See typeprint.h. */
394 
395 void
396 error_unknown_type (const char *sym_print_name)
397 {
398  error (_("'%s' has unknown type; cast it to its declared type"),
399  sym_print_name);
400 }
401 
402 /* Print type of EXP, or last thing in value history if EXP == NULL.
403  show is passed to type_print. */
404 
405 static void
406 whatis_exp (const char *exp, int show)
407 {
408  struct value *val;
409  struct cleanup *old_chain;
410  struct type *real_type = NULL;
411  struct type *type;
412  int full = 0;
413  LONGEST top = -1;
414  int using_enc = 0;
415  struct value_print_options opts;
417 
418  old_chain = make_cleanup (null_cleanup, NULL);
419 
420  if (exp)
421  {
422  if (*exp == '/')
423  {
424  int seen_one = 0;
425 
426  for (++exp; *exp && !isspace (*exp); ++exp)
427  {
428  switch (*exp)
429  {
430  case 'r':
431  flags.raw = 1;
432  break;
433  case 'm':
434  flags.print_methods = 0;
435  break;
436  case 'M':
437  flags.print_methods = 1;
438  break;
439  case 't':
440  flags.print_typedefs = 0;
441  break;
442  case 'T':
443  flags.print_typedefs = 1;
444  break;
445  case 'o':
446  {
447  /* Filter out languages which don't implement the
448  feature. */
449  if (show > 0
452  {
453  flags.print_offsets = 1;
454  flags.print_typedefs = 0;
455  flags.print_methods = 0;
456  }
457  break;
458  }
459  default:
460  error (_("unrecognized flag '%c'"), *exp);
461  }
462  seen_one = 1;
463  }
464 
465  if (!*exp && !seen_one)
466  error (_("flag expected"));
467  if (!isspace (*exp))
468  error (_("expected space after format"));
469  exp = skip_spaces (exp);
470  }
471 
472  expression_up expr = parse_expression (exp);
473 
474  /* The behavior of "whatis" depends on whether the user
475  expression names a type directly, or a language expression
476  (including variable names). If the former, then "whatis"
477  strips one level of typedefs, only. If an expression,
478  "whatis" prints the type of the expression without stripping
479  any typedef level. "ptype" always strips all levels of
480  typedefs. */
481  if (show == -1 && expr->elts[0].opcode == OP_TYPE)
482  {
483  /* The user expression names a type directly. */
484  type = expr->elts[1].type;
485 
486  /* If this is a typedef, then find its immediate target.
487  Use check_typedef to resolve stubs, but ignore its result
488  because we do not want to dig past all typedefs. */
492 
493  /* If the expression is actually a type, then there's no
494  value to fetch the dynamic type from. */
495  val = NULL;
496  }
497  else
498  {
499  /* The user expression names a type indirectly by naming an
500  object or expression of that type. Find that
501  indirectly-named type. */
502  val = evaluate_type (expr.get ());
503  type = value_type (val);
504  }
505  }
506  else
507  {
508  val = access_value_history (0);
509  type = value_type (val);
510  }
511 
512  get_user_print_options (&opts);
513  if (val != NULL && opts.objectprint)
514  {
517  real_type = value_rtti_indirect_type (val, &full, &top, &using_enc);
518  else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
519  real_type = value_rtti_type (val, &full, &top, &using_enc);
520  }
521 
522  if (flags.print_offsets
524  || TYPE_CODE (type) == TYPE_CODE_UNION))
525  fprintf_filtered (gdb_stdout, "/* offset | size */ ");
526 
527  printf_filtered ("type = ");
528 
529  if (!flags.raw)
531 
532  if (real_type)
533  {
534  printf_filtered ("/* real type = ");
535  type_print (real_type, "", gdb_stdout, -1);
536  if (! full)
537  printf_filtered (" (incomplete object)");
538  printf_filtered (" */\n");
539  }
540 
541  LA_PRINT_TYPE (type, "", gdb_stdout, show, 0, &flags);
542  printf_filtered ("\n");
543 
544  do_cleanups (old_chain);
545 }
546 
547 static void
548 whatis_command (const char *exp, int from_tty)
549 {
550  /* Most of the time users do not want to see all the fields
551  in a structure. If they do they can use the "ptype" command.
552  Hence the "-1" below. */
553  whatis_exp (exp, -1);
554 }
555 
556 /* TYPENAME is either the name of a type, or an expression. */
557 
558 static void
559 ptype_command (const char *type_name, int from_tty)
560 {
561  whatis_exp (type_name, 1);
562 }
563 
564 /* Print integral scalar data VAL, of type TYPE, onto stdio stream STREAM.
565  Used to print data from type structures in a specified type. For example,
566  array bounds may be characters or booleans in some languages, and this
567  allows the ranges to be printed in their "natural" form rather than as
568  decimal integer values.
569 
570  FIXME: This is here simply because only the type printing routines
571  currently use it, and it wasn't clear if it really belonged somewhere
572  else (like printcmd.c). There are a lot of other gdb routines that do
573  something similar, but they are generally concerned with printing values
574  that come from the inferior in target byte order and target size. */
575 
576 void
577 print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
578 {
579  unsigned int i;
580  unsigned len;
581 
582  type = check_typedef (type);
583 
584  switch (TYPE_CODE (type))
585  {
586 
587  case TYPE_CODE_ENUM:
588  len = TYPE_NFIELDS (type);
589  for (i = 0; i < len; i++)
590  {
591  if (TYPE_FIELD_ENUMVAL (type, i) == val)
592  {
593  break;
594  }
595  }
596  if (i < len)
597  {
598  fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
599  }
600  else
601  {
602  print_longest (stream, 'd', 0, val);
603  }
604  break;
605 
606  case TYPE_CODE_INT:
607  print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0, val);
608  break;
609 
610  case TYPE_CODE_CHAR:
611  LA_PRINT_CHAR ((unsigned char) val, type, stream);
612  break;
613 
614  case TYPE_CODE_BOOL:
615  fprintf_filtered (stream, val ? "TRUE" : "FALSE");
616  break;
617 
618  case TYPE_CODE_RANGE:
619  print_type_scalar (TYPE_TARGET_TYPE (type), val, stream);
620  return;
621 
622  case TYPE_CODE_UNDEF:
623  case TYPE_CODE_PTR:
624  case TYPE_CODE_ARRAY:
625  case TYPE_CODE_STRUCT:
626  case TYPE_CODE_UNION:
627  case TYPE_CODE_FUNC:
628  case TYPE_CODE_FLT:
629  case TYPE_CODE_VOID:
630  case TYPE_CODE_SET:
631  case TYPE_CODE_STRING:
632  case TYPE_CODE_ERROR:
633  case TYPE_CODE_MEMBERPTR:
634  case TYPE_CODE_METHODPTR:
635  case TYPE_CODE_METHOD:
636  case TYPE_CODE_REF:
638  case TYPE_CODE_NAMESPACE:
639  error (_("internal error: unhandled type in print_type_scalar"));
640  break;
641 
642  default:
643  error (_("Invalid type code in symbol table."));
644  }
645  gdb_flush (stream);
646 }
647 
648 /* Dump details of a type specified either directly or indirectly.
649  Uses the same sort of type lookup mechanism as ptype_command()
650  and whatis_command(). */
651 
652 void
653 maintenance_print_type (const char *type_name, int from_tty)
654 {
655  struct value *val;
656  struct type *type;
657 
658  if (type_name != NULL)
659  {
660  expression_up expr = parse_expression (type_name);
661  if (expr->elts[0].opcode == OP_TYPE)
662  {
663  /* The user expression names a type directly, just use that type. */
664  type = expr->elts[1].type;
665  }
666  else
667  {
668  /* The user expression may name a type indirectly by naming an
669  object of that type. Find that indirectly named type. */
670  val = evaluate_type (expr.get ());
671  type = value_type (val);
672  }
673  if (type != NULL)
674  {
676  }
677  }
678 }
679 
680 
682 
684 
685 static void
686 set_print_type (const char *arg, int from_tty)
687 {
689  "\"set print type\" must be followed by the name of a subcommand.\n");
690  help_list (setprintlist, "set print type ", all_commands, gdb_stdout);
691 }
692 
693 static void
694 show_print_type (const char *args, int from_tty)
695 {
696  cmd_show_list (showprinttypelist, from_tty, "");
697 }
698 
699 static int print_methods = 1;
700 
701 static void
702 set_print_type_methods (const char *args,
703  int from_tty, struct cmd_list_element *c)
704 {
706 }
707 
708 static void
709 show_print_type_methods (struct ui_file *file, int from_tty,
710  struct cmd_list_element *c, const char *value)
711 {
712  fprintf_filtered (file, _("Printing of methods defined in a class in %s\n"),
713  value);
714 }
715 
716 static int print_typedefs = 1;
717 
718 static void
719 set_print_type_typedefs (const char *args,
720  int from_tty, struct cmd_list_element *c)
721 {
723 }
724 
725 static void
726 show_print_type_typedefs (struct ui_file *file, int from_tty,
727  struct cmd_list_element *c, const char *value)
728 {
729  fprintf_filtered (file, _("Printing of typedefs defined in a class in %s\n"),
730  value);
731 }
732 
733 /* Limit on the number of nested type definitions to print or -1 to print
734  all nested type definitions in a class. By default, we do not print
735  nested definitions. */
736 
737 static int print_nested_type_limit = 0;
738 
739 /* Set how many nested type definitions should be printed by the type
740  printer. */
741 
742 static void
743 set_print_type_nested_types (const char *args, int from_tty,
744  struct cmd_list_element *c)
745 {
747 }
748 
749 /* Show how many nested type definitions the type printer will print. */
750 
751 static void
752 show_print_type_nested_types (struct ui_file *file, int from_tty,
753  struct cmd_list_element *c, const char *value)
754 {
755  if (*value == '0')
756  {
757  fprintf_filtered (file,
758  _("Will not print nested types defined in a class\n"));
759  }
760  else
761  {
762  fprintf_filtered (file,
763  _("Will print %s nested types defined in a class\n"),
764  value);
765  }
766 }
767 
768 void
770 {
771  struct cmd_list_element *c;
772 
773  c = add_com ("ptype", class_vars, ptype_command, _("\
774 Print definition of type TYPE.\n\
775 Usage: ptype[/FLAGS] TYPE | EXPRESSION\n\
776 Argument may be any type (for example a type name defined by typedef,\n\
777 or \"struct STRUCT-TAG\" or \"class CLASS-NAME\" or \"union UNION-TAG\"\n\
778 or \"enum ENUM-TAG\") or an expression.\n\
779 The selected stack frame's lexical context is used to look up the name.\n\
780 Contrary to \"whatis\", \"ptype\" always unrolls any typedefs.\n\
781 \n\
782 Available FLAGS are:\n\
783  /r print in \"raw\" form; do not substitute typedefs\n\
784  /m do not print methods defined in a class\n\
785  /M print methods defined in a class\n\
786  /t do not print typedefs defined in a class\n\
787  /T print typedefs defined in a class\n\
788  /o print offsets and sizes of fields in a struct (like pahole)\n"));
790 
791  c = add_com ("whatis", class_vars, whatis_command,
792  _("Print data type of expression EXP.\n\
793 Only one level of typedefs is unrolled. See also \"ptype\"."));
795 
797  _("Generic command for showing type-printing settings."),
798  &showprinttypelist, "show print type ", 0, &showprintlist);
800  _("Generic command for setting how types print."),
801  &setprinttypelist, "show print type ", 0, &setprintlist);
802 
804  _("\
805 Set printing of methods defined in classes."), _("\
806 Show printing of methods defined in classes."), NULL,
811  _("\
812 Set printing of typedefs defined in classes."), _("\
813 Show printing of typedefs defined in classes."), NULL,
817 
818  add_setshow_zuinteger_unlimited_cmd ("nested-type-limit", no_class,
820  _("\
821 Set the number of recursive nested type definitions to print \
822 (\"unlimited\" or -1 to show all)."), _("\
823 Show the number of recursive nested type definitions to print."), NULL,
827 }
828 
829 /* Print <not allocated> status to stream STREAM. */
830 
831 void
833 {
834  fprintf_filtered (stream, _("<not allocated>"));
835 }
836 
837 /* Print <not associated> status to stream STREAM. */
838 
839 void
841 {
842  fprintf_filtered (stream, _("<not associated>"));
843 }
void val_print_not_allocated(struct ui_file *stream)
Definition: typeprint.c:832
const char * string
Definition: signals.c:50
struct type * value_rtti_type(struct value *v, int *full, LONGEST *top, int *using_enc)
Definition: cp-abi.c:108
static void set_print_type(const char *arg, int from_tty)
Definition: typeprint.c:686
#define LA_PRINT_TYPEDEF(type, new_symbol, stream)
Definition: language.h:521
static const char * find_global_typedef(const struct type_print_options *flags, struct type *t)
Definition: typeprint.c:264
#define TYPE_FIELD_NAME(thistype, n)
Definition: gdbtypes.h:1372
#define TYPE_N_BASECLASSES(thistype)
Definition: gdbtypes.h:1331
static void whatis_exp(const char *exp, int show)
Definition: typeprint.c:406
gdb::unique_xmalloc_ptr< expression > expression_up
Definition: expression.h:87
void xfree(void *)
struct ext_lang_type_printers * start_ext_lang_type_printers(void)
Definition: extension.c:409
static void set_print_type_typedefs(const char *args, int from_tty, struct cmd_list_element *c)
Definition: typeprint.c:719
const struct type_print_options type_print_raw_options
Definition: typeprint.c:40
static int copy_typedef_hash_element(void **slot, void *nt)
Definition: typeprint.c:208
#define SYMBOL_CLASS(symbol)
Definition: symtab.h:1155
void _initialize_typeprint(void)
Definition: typeprint.c:769
void type_print(struct type *type, const char *varstring, struct ui_file *stream, int show)
Definition: typeprint.c:358
static int print_nested_type_limit
Definition: typeprint.c:737
enum language la_language
Definition: language.h:144
static void show_print_type_typedefs(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
Definition: typeprint.c:726
char * skip_spaces(char *chp)
Definition: common-utils.c:337
#define _(String)
Definition: gdb_locale.h:35
struct typedef_hash_table * copy_typedef_hash(struct typedef_hash_table *table)
Definition: typeprint.c:223
#define TYPE_FIELD_ENUMVAL(thistype, n)
Definition: gdbtypes.h:1375
#define END_CATCH
void error_unknown_type(const char *sym_print_name)
Definition: typeprint.c:396
void printf_filtered(const char *format,...)
Definition: utils.c:2045
#define TYPE_IS_REFERENCE(t)
Definition: gdbtypes.h:332
#define XNEW(T)
Definition: poison.h:109
struct cmd_list_element * add_prefix_cmd(const char *name, enum command_class theclass, cmd_const_cfunc_ftype *fun, const char *doc, struct cmd_list_element **prefixlist, const char *prefixname, int allow_unknown, struct cmd_list_element **list)
Definition: cli-decode.c:367
mach_port_t kern_return_t mach_port_t msgports mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
Definition: gnu-nat.c:1891
#define TYPE_N_TEMPLATE_ARGUMENTS(thistype)
Definition: gdbtypes.h:1418
void null_cleanup(void *arg)
Definition: cleanups.c:294
static void do_free_typedef_hash(void *arg)
Definition: typeprint.c:192
#define TRY
static void do_free_global_table(void *arg)
Definition: typeprint.c:239
void val_print_not_associated(struct ui_file *stream)
Definition: typeprint.c:840
struct type * check_typedef(struct type *type)
Definition: gdbtypes.c:2421
#define CATCH(EXCEPTION, MASK)
static void show_print_type_nested_types(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
Definition: typeprint.c:752
void typedef_print(struct type *type, struct symbol *newobj, struct ui_file *stream)
Definition: typeprint.c:336
void fprintf_filtered(struct ui_file *stream, const char *format,...)
Definition: utils.c:2008
void set_cmd_completer(struct cmd_list_element *cmd, completer_ftype *completer)
Definition: cli-decode.c:160
void recursively_update_typedef_hash(struct typedef_hash_table *table, struct type *t)
Definition: typeprint.c:106
void fputs_filtered(const char *linebuffer, struct ui_file *stream)
Definition: utils.c:1811
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
Definition: cleanups.c:116
Definition: gdbtypes.h:749
static int print_typedefs
Definition: typeprint.c:716
static void ptype_command(const char *type_name, int from_tty)
Definition: typeprint.c:559
unsigned int print_typedefs
Definition: typeprint.h:50
void free_typedef_hash(struct typedef_hash_table *table)
Definition: typeprint.c:179
static const char * type
Definition: language.c:113
void free_ext_lang_type_printers(struct ext_lang_type_printers *printers)
Definition: extension.c:467
#define SYMBOL_LINKAGE_NAME(symbol)
Definition: symtab.h:523
static struct type_print_options default_ptype_flags
Definition: typeprint.c:54
void print_type_scalar(struct type *type, LONGEST val, struct ui_file *stream)
Definition: typeprint.c:577
static struct symbol * new_symbol(struct die_info *, struct type *, struct dwarf2_cu *)
Definition: dwarf2read.c:21568
static hashval_t hash_typedef_field(const void *p)
Definition: typeprint.c:84
struct cmd_list_element * setprintlist
Definition: cli-cmds.c:149
#define TYPE_BASECLASS(thistype, index)
Definition: gdbtypes.h:1330
void printf_unfiltered(const char *format,...)
Definition: utils.c:2056
unsigned int print_methods
Definition: typeprint.h:47
void cmd_show_list(struct cmd_list_element *list, int from_tty, const char *prefix)
Definition: cli-setshow.c:657
#define TYPE_UNSIGNED(t)
Definition: gdbtypes.h:205
std::string & string()
Definition: ui-file.h:132
void maintenance_print_type(const char *type_name, int from_tty)
Definition: typeprint.c:653
#define gdb_assert(expr)
Definition: gdb_assert.h:32
Definition: value.c:169
void type_print_unknown_return_type(struct ui_file *stream)
Definition: typeprint.c:388
#define LA_PRINT_TYPE(type, varstring, stream, show, level, flags)
Definition: language.h:518
int types_equal(struct type *a, struct type *b)
Definition: gdbtypes.c:3431
void help_list(struct cmd_list_element *list, const char *cmdtype, enum command_class theclass, struct ui_file *stream)
Definition: cli-decode.c:1071
const struct language_defn * current_language
Definition: language.c:81
#define TYPE_TARGET_TYPE(thistype)
Definition: gdbtypes.h:1226
void print_longest(struct ui_file *stream, int format, int use_c_format, LONGEST val_long)
Definition: valprint.c:1303
const char * find_typedef_in_hash(const struct type_print_options *flags, struct type *t)
Definition: typeprint.c:311
static int print_methods
Definition: typeprint.c:699
int print_nested_type_limit
Definition: typeprint.h:56
char * apply_ext_lang_type_printers(struct ext_lang_type_printers *printers, struct type *type)
Definition: extension.c:431
#define TYPE_CODE(thistype)
Definition: gdbtypes.h:1238
static int eq_typedef_field(const void *a, const void *b)
Definition: typeprint.c:95
static void set_print_type_methods(const char *args, int from_tty, struct cmd_list_element *c)
Definition: typeprint.c:702
void expression_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
Definition: completer.c:1076
const char * name
Definition: gdbtypes.h:894
void recursive_dump_type(struct type *type, int spaces)
Definition: gdbtypes.c:4380
static void whatis_command(const char *exp, int from_tty)
Definition: typeprint.c:548
void get_user_print_options(struct value_print_options *opts)
Definition: valprint.c:120
void add_setshow_boolean_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
Definition: cli-decode.c:569
#define TYPE_NFIELDS(thistype)
Definition: gdbtypes.h:1239
static void set_print_type_nested_types(const char *args, int from_tty, struct cmd_list_element *c)
Definition: typeprint.c:743
struct cmd_list_element * showprintlist
Definition: cli-cmds.c:151
#define TYPE_TYPEDEF_FIELD(thistype, n)
Definition: gdbtypes.h:1444
#define TYPE_TYPEDEF_FIELD_COUNT(thistype)
Definition: gdbtypes.h:1450
expression_up parse_expression(const char *)
Definition: parse.c:1237
#define TYPE_TEMPLATE_ARGUMENT(thistype, n)
Definition: gdbtypes.h:1422
struct type * value_type(const struct value *value)
Definition: value.c:1095
#define SYMBOL_TYPE(symbol)
Definition: symtab.h:1161
struct value * access_value_history(int num)
Definition: value.c:1927
struct value * evaluate_type(struct expression *exp)
Definition: eval.c:155
void add_template_parameters(struct typedef_hash_table *table, struct type *t)
Definition: typeprint.c:135
struct cleanup * make_cleanup_free_typedef_hash(struct typedef_hash_table *table)
Definition: typeprint.c:200
struct type * type
Definition: gdbtypes.h:898
void default_print_typedef(struct type *type, struct symbol *new_symbol, struct ui_file *stream)
Definition: typeprint.c:344
std::string type_to_string(struct type *type)
Definition: typeprint.c:368
#define LA_PRINT_CHAR(ch, type, stream)
Definition: language.h:527
void gdb_flush(struct ui_file *file)
Definition: ui-file.c:93
struct typedef_hash_table * create_typedef_hash(void)
Definition: typeprint.c:164
struct cmd_list_element * add_com(const char *name, enum command_class theclass, cmd_const_cfunc_ftype *fun, const char *doc)
Definition: cli-decode.c:902
struct cmd_list_element * showprinttypelist
Definition: typeprint.c:683
static void show_print_type_methods(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
Definition: typeprint.c:709
static struct cleanup * create_global_typedef_table(struct type_print_options *flags)
Definition: typeprint.c:250
struct obstack storage
Definition: typeprint.c:78
PTR xcalloc(size_t number, size_t size)
Definition: common-utils.c:72
void add_setshow_zuinteger_unlimited_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
Definition: cli-decode.c:765
void error(const char *fmt,...)
Definition: errors.c:38
long long LONGEST
Definition: common-types.h:52
void do_cleanups(struct cleanup *old_chain)
Definition: cleanups.c:174
struct cmd_list_element * setprinttypelist
Definition: typeprint.c:681
#define TYPE_SAFE_NAME(type)
Definition: gdbtypes.h:1483
#define gdb_stdout
Definition: utils.h:340
struct type * value_rtti_indirect_type(struct value *v, int *full, LONGEST *top, int *using_enc)
Definition: valops.c:3595
static void show_print_type(const char *args, int from_tty)
Definition: typeprint.c:694