1 /* Support for printing C and C++ types for GDB, the GNU debugger.
2 Copyright (C) 1986-2018 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 #include "gdb_obstack.h"
21 #include "bfd.h" /* Binary File Description. */
24 #include "expression.h"
31 #include "typeprint.h"
33 #include "cp-support.h"
35 /* A list of access specifiers used for printing. */
45 static void c_type_print_varspec_suffix (struct type *, struct ui_file *, int,
48 const struct type_print_options *);
50 static void c_type_print_varspec_prefix (struct type *,
54 const struct type_print_options *,
55 struct print_offset_data *);
57 /* Print "const", "volatile", or address space modifiers. */
58 static void c_type_print_modifier (struct type *,
62 static void c_type_print_base_1 (struct type *type, struct ui_file *stream,
63 int show, int level, enum language language,
64 const struct type_print_options *flags,
65 struct print_offset_data *podata);
68 /* A callback function for cp_canonicalize_string_full that uses
69 typedef_hash_table::find_typedef. */
72 find_typedef_for_canonicalize (struct type *t, void *data)
74 return typedef_hash_table::find_typedef
75 ((const struct type_print_options *) data, t);
78 /* Print NAME on STREAM. If the 'raw' field of FLAGS is not set,
79 canonicalize NAME using the local typedefs first. */
82 print_name_maybe_canonical (const char *name,
83 const struct type_print_options *flags,
84 struct ui_file *stream)
89 s = cp_canonicalize_string_full (name,
90 find_typedef_for_canonicalize,
93 fputs_filtered (!s.empty () ? s.c_str () : name, stream);
98 /* Helper function for c_print_type. */
101 c_print_type_1 (struct type *type,
102 const char *varstring,
103 struct ui_file *stream,
105 enum language language,
106 const struct type_print_options *flags,
107 struct print_offset_data *podata)
112 const char *local_name;
115 type = check_typedef (type);
117 local_name = typedef_hash_table::find_typedef (flags, type);
118 if (local_name != NULL)
120 fputs_filtered (local_name, stream);
121 if (varstring != NULL && *varstring != '\0')
122 fputs_filtered (" ", stream);
126 c_type_print_base_1 (type, stream, show, level, language, flags, podata);
127 code = TYPE_CODE (type);
128 if ((varstring != NULL && *varstring != '\0')
129 /* Need a space if going to print stars or brackets;
130 but not if we will print just a type name. */
131 || ((show > 0 || TYPE_NAME (type) == 0)
132 && (code == TYPE_CODE_PTR || code == TYPE_CODE_FUNC
133 || code == TYPE_CODE_METHOD
134 || (code == TYPE_CODE_ARRAY
135 && !TYPE_VECTOR (type))
136 || code == TYPE_CODE_MEMBERPTR
137 || code == TYPE_CODE_METHODPTR
138 || TYPE_IS_REFERENCE (type))))
139 fputs_filtered (" ", stream);
140 need_post_space = (varstring != NULL && strcmp (varstring, "") != 0);
141 c_type_print_varspec_prefix (type, stream, show, 0, need_post_space,
142 language, flags, podata);
145 if (varstring != NULL)
147 fputs_filtered (varstring, stream);
149 /* For demangled function names, we have the arglist as part of
150 the name, so don't print an additional pair of ()'s. */
151 if (local_name == NULL)
153 demangled_args = strchr (varstring, '(') != NULL;
154 c_type_print_varspec_suffix (type, stream, show,
161 /* LEVEL is the depth to indent lines by. */
164 c_print_type (struct type *type,
165 const char *varstring,
166 struct ui_file *stream,
168 const struct type_print_options *flags)
170 struct print_offset_data podata;
172 c_print_type_1 (type, varstring, stream, show, level,
173 current_language->la_language, flags, &podata);
180 c_print_type (struct type *type,
181 const char *varstring,
182 struct ui_file *stream,
184 enum language language,
185 const struct type_print_options *flags)
187 struct print_offset_data podata;
189 c_print_type_1 (type, varstring, stream, show, level, language, flags,
193 /* Print a typedef using C syntax. TYPE is the underlying type.
194 NEW_SYMBOL is the symbol naming the type. STREAM is the stream on
198 c_print_typedef (struct type *type,
199 struct symbol *new_symbol,
200 struct ui_file *stream)
202 type = check_typedef (type);
203 fprintf_filtered (stream, "typedef ");
204 type_print (type, "", stream, 0);
205 if (TYPE_NAME ((SYMBOL_TYPE (new_symbol))) == 0
206 || strcmp (TYPE_NAME ((SYMBOL_TYPE (new_symbol))),
207 SYMBOL_LINKAGE_NAME (new_symbol)) != 0
208 || TYPE_CODE (SYMBOL_TYPE (new_symbol)) == TYPE_CODE_TYPEDEF)
209 fprintf_filtered (stream, " %s", SYMBOL_PRINT_NAME (new_symbol));
210 fprintf_filtered (stream, ";\n");
213 /* If TYPE is a derived type, then print out derivation information.
214 Print only the actual base classes of this type, not the base
215 classes of the base classes. I.e. for the derivation hierarchy:
218 class B : public A {int b; };
219 class C : public B {int c; };
221 Print the type of class C as:
227 Not as the following (like gdb used to), which is not legal C++
228 syntax for derived types and may be confused with the multiple
231 class C : public B : public A {
235 In general, gdb should try to print the types as closely as
236 possible to the form that they appear in the source code. */
239 cp_type_print_derivation_info (struct ui_file *stream,
241 const struct type_print_options *flags)
246 for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
249 fputs_filtered (i == 0 ? ": " : ", ", stream);
250 fprintf_filtered (stream, "%s%s ",
251 BASETYPE_VIA_PUBLIC (type, i)
252 ? "public" : (TYPE_FIELD_PROTECTED (type, i)
253 ? "protected" : "private"),
254 BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
255 name = TYPE_NAME (TYPE_BASECLASS (type, i));
257 print_name_maybe_canonical (name, flags, stream);
259 fprintf_filtered (stream, "(null)");
263 fputs_filtered (" ", stream);
267 /* Print the C++ method arguments ARGS to the file STREAM. */
270 cp_type_print_method_args (struct type *mtype, const char *prefix,
271 const char *varstring, int staticp,
272 struct ui_file *stream,
273 enum language language,
274 const struct type_print_options *flags)
276 struct field *args = TYPE_FIELDS (mtype);
277 int nargs = TYPE_NFIELDS (mtype);
278 int varargs = TYPE_VARARGS (mtype);
281 fprintf_symbol_filtered (stream, prefix,
282 language_cplus, DMGL_ANSI);
283 fprintf_symbol_filtered (stream, varstring,
284 language_cplus, DMGL_ANSI);
285 fputs_filtered ("(", stream);
287 /* Skip the class variable. We keep this here to accommodate older
288 compilers and debug formats which may not support artificial
295 struct field arg = args[i++];
297 /* Skip any artificial arguments. */
298 if (FIELD_ARTIFICIAL (arg))
301 c_print_type (arg.type, "", stream, 0, 0, flags);
303 if (i == nargs && varargs)
304 fprintf_filtered (stream, ", ...");
307 fprintf_filtered (stream, ", ");
313 fprintf_filtered (stream, "...");
314 else if (language == language_cplus)
315 fprintf_filtered (stream, "void");
317 fprintf_filtered (stream, ")");
319 /* For non-static methods, read qualifiers from the type of
325 gdb_assert (nargs > 0);
326 gdb_assert (TYPE_CODE (args[0].type) == TYPE_CODE_PTR);
327 domain = TYPE_TARGET_TYPE (args[0].type);
329 if (TYPE_CONST (domain))
330 fprintf_filtered (stream, " const");
332 if (TYPE_VOLATILE (domain))
333 fprintf_filtered (stream, " volatile");
335 if (TYPE_RESTRICT (domain))
336 fprintf_filtered (stream, " restrict");
338 if (TYPE_ATOMIC (domain))
339 fprintf_filtered (stream, " _Atomic");
344 /* Print any asterisks or open-parentheses needed before the
345 variable name (to describe its type).
347 On outermost call, pass 0 for PASSED_A_PTR.
348 On outermost call, SHOW > 0 means should ignore
349 any typename for TYPE and show its details.
350 SHOW is always zero on recursive calls.
352 NEED_POST_SPACE is non-zero when a space will be be needed
353 between a trailing qualifier and a field, variable, or function
357 c_type_print_varspec_prefix (struct type *type,
358 struct ui_file *stream,
359 int show, int passed_a_ptr,
361 enum language language,
362 const struct type_print_options *flags,
363 struct print_offset_data *podata)
370 if (TYPE_NAME (type) && show <= 0)
375 switch (TYPE_CODE (type))
378 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
379 stream, show, 1, 1, language, flags,
381 fprintf_filtered (stream, "*");
382 c_type_print_modifier (type, stream, 1, need_post_space);
385 case TYPE_CODE_MEMBERPTR:
386 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
387 stream, show, 0, 0, language, flags, podata);
388 name = TYPE_NAME (TYPE_SELF_TYPE (type));
390 print_name_maybe_canonical (name, flags, stream);
392 c_type_print_base_1 (TYPE_SELF_TYPE (type),
393 stream, -1, passed_a_ptr, language, flags,
395 fprintf_filtered (stream, "::*");
398 case TYPE_CODE_METHODPTR:
399 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
400 stream, show, 0, 0, language, flags,
402 fprintf_filtered (stream, "(");
403 name = TYPE_NAME (TYPE_SELF_TYPE (type));
405 print_name_maybe_canonical (name, flags, stream);
407 c_type_print_base_1 (TYPE_SELF_TYPE (type),
408 stream, -1, passed_a_ptr, language, flags,
410 fprintf_filtered (stream, "::*");
414 case TYPE_CODE_RVALUE_REF:
415 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
416 stream, show, 1, 0, language, flags,
418 fprintf_filtered (stream, TYPE_CODE(type) == TYPE_CODE_REF ? "&" : "&&");
419 c_type_print_modifier (type, stream, 1, need_post_space);
422 case TYPE_CODE_METHOD:
424 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
425 stream, show, 0, 0, language, flags,
428 fprintf_filtered (stream, "(");
431 case TYPE_CODE_ARRAY:
432 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
433 stream, show, 0, 0, language, flags,
436 fprintf_filtered (stream, "(");
439 case TYPE_CODE_TYPEDEF:
440 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
441 stream, show, passed_a_ptr, 0,
442 language, flags, podata);
445 case TYPE_CODE_UNDEF:
446 case TYPE_CODE_STRUCT:
447 case TYPE_CODE_UNION:
449 case TYPE_CODE_FLAGS:
453 case TYPE_CODE_ERROR:
457 case TYPE_CODE_RANGE:
458 case TYPE_CODE_STRING:
459 case TYPE_CODE_COMPLEX:
460 case TYPE_CODE_NAMESPACE:
461 case TYPE_CODE_DECFLOAT:
462 /* These types need no prefix. They are listed here so that
463 gcc -Wall will reveal any types that haven't been handled. */
466 error (_("type not handled in c_type_print_varspec_prefix()"));
471 /* Print out "const" and "volatile" attributes,
472 and address space id if present.
473 TYPE is a pointer to the type being printed out.
474 STREAM is the output destination.
475 NEED_PRE_SPACE = 1 indicates an initial white space is needed.
476 NEED_POST_SPACE = 1 indicates a final white space is needed. */
479 c_type_print_modifier (struct type *type, struct ui_file *stream,
480 int need_pre_space, int need_post_space)
482 int did_print_modifier = 0;
483 const char *address_space_id;
485 /* We don't print `const' qualifiers for references --- since all
486 operators affect the thing referenced, not the reference itself,
487 every reference is `const'. */
488 if (TYPE_CONST (type) && !TYPE_IS_REFERENCE (type))
491 fprintf_filtered (stream, " ");
492 fprintf_filtered (stream, "const");
493 did_print_modifier = 1;
496 if (TYPE_VOLATILE (type))
498 if (did_print_modifier || need_pre_space)
499 fprintf_filtered (stream, " ");
500 fprintf_filtered (stream, "volatile");
501 did_print_modifier = 1;
504 if (TYPE_RESTRICT (type))
506 if (did_print_modifier || need_pre_space)
507 fprintf_filtered (stream, " ");
508 fprintf_filtered (stream, "restrict");
509 did_print_modifier = 1;
512 if (TYPE_ATOMIC (type))
514 if (did_print_modifier || need_pre_space)
515 fprintf_filtered (stream, " ");
516 fprintf_filtered (stream, "_Atomic");
517 did_print_modifier = 1;
520 address_space_id = address_space_int_to_name (get_type_arch (type),
521 TYPE_INSTANCE_FLAGS (type));
522 if (address_space_id)
524 if (did_print_modifier || need_pre_space)
525 fprintf_filtered (stream, " ");
526 fprintf_filtered (stream, "@%s", address_space_id);
527 did_print_modifier = 1;
530 if (did_print_modifier && need_post_space)
531 fprintf_filtered (stream, " ");
535 /* Print out the arguments of TYPE, which should have TYPE_CODE_METHOD
536 or TYPE_CODE_FUNC, to STREAM. Artificial arguments, such as "this"
537 in non-static methods, are displayed if LINKAGE_NAME is zero. If
538 LINKAGE_NAME is non-zero and LANGUAGE is language_cplus the topmost
539 parameter types get removed their possible const and volatile qualifiers to
540 match demangled linkage name parameters part of such function type.
541 LANGUAGE is the language in which TYPE was defined. This is a necessary
542 evil since this code is used by the C and C++. */
545 c_type_print_args (struct type *type, struct ui_file *stream,
546 int linkage_name, enum language language,
547 const struct type_print_options *flags)
552 fprintf_filtered (stream, "(");
554 for (i = 0; i < TYPE_NFIELDS (type); i++)
556 struct type *param_type;
558 if (TYPE_FIELD_ARTIFICIAL (type, i) && linkage_name)
563 fprintf_filtered (stream, ", ");
567 param_type = TYPE_FIELD_TYPE (type, i);
569 if (language == language_cplus && linkage_name)
571 /* C++ standard, 13.1 Overloadable declarations, point 3, item:
572 - Parameter declarations that differ only in the presence or
573 absence of const and/or volatile are equivalent.
575 And the const/volatile qualifiers are not present in the mangled
576 names as produced by GCC. */
578 param_type = make_cv_type (0, 0, param_type, NULL);
581 c_print_type (param_type, "", stream, -1, 0, language, flags);
585 if (printed_any && TYPE_VARARGS (type))
587 /* Print out a trailing ellipsis for varargs functions. Ignore
588 TYPE_VARARGS if the function has no named arguments; that
589 represents unprototyped (K&R style) C functions. */
590 if (printed_any && TYPE_VARARGS (type))
592 fprintf_filtered (stream, ", ");
594 fprintf_filtered (stream, "...");
597 else if (!printed_any
598 && (TYPE_PROTOTYPED (type) || language == language_cplus))
599 fprintf_filtered (stream, "void");
601 fprintf_filtered (stream, ")");
604 /* Return true iff the j'th overloading of the i'th method of TYPE
605 is a type conversion operator, like `operator int () { ... }'.
606 When listing a class's methods, we don't print the return type of
610 is_type_conversion_operator (struct type *type, int i, int j)
612 /* I think the whole idea of recognizing type conversion operators
613 by their name is pretty terrible. But I don't think our present
614 data structure gives us any other way to tell. If you know of
615 some other way, feel free to rewrite this function. */
616 const char *name = TYPE_FN_FIELDLIST_NAME (type, i);
618 if (!startswith (name, CP_OPERATOR_STR))
622 if (! strchr (" \t\f\n\r", *name))
625 while (strchr (" \t\f\n\r", *name))
628 if (!('a' <= *name && *name <= 'z')
629 && !('A' <= *name && *name <= 'Z')
631 /* If this doesn't look like the start of an identifier, then it
632 isn't a type conversion operator. */
634 else if (startswith (name, "new"))
636 else if (startswith (name, "delete"))
639 /* If it doesn't look like new or delete, it's a type conversion
643 /* Is that really the end of the name? */
644 if (('a' <= *name && *name <= 'z')
645 || ('A' <= *name && *name <= 'Z')
646 || ('0' <= *name && *name <= '9')
648 /* No, so the identifier following "operator" must be a type name,
649 and this is a type conversion operator. */
652 /* That was indeed the end of the name, so it was `operator new' or
653 `operator delete', neither of which are type conversion
658 /* Given a C++ qualified identifier QID, strip off the qualifiers,
659 yielding the unqualified name. The return value is a pointer into
662 It's a pity we don't have this information in some more structured
663 form. Even the author of this function feels that writing little
664 parsers like this everywhere is stupid. */
667 remove_qualifiers (char *qid)
669 int quoted = 0; /* Zero if we're not in quotes;
670 '"' if we're in a double-quoted string;
671 '\'' if we're in a single-quoted string. */
672 int depth = 0; /* Number of unclosed parens we've seen. */
673 char *parenstack = (char *) alloca (strlen (qid));
675 char *last = 0; /* The character after the rightmost
676 `::' token we've seen so far. */
678 for (scan = qid; *scan; scan++)
684 else if (*scan == '\\' && *(scan + 1))
687 else if (scan[0] == ':' && scan[1] == ':')
689 /* If we're inside parenthesis (i.e., an argument list) or
690 angle brackets (i.e., a list of template arguments), then
691 we don't record the position of this :: token, since it's
692 not relevant to the top-level structure we're trying to
700 else if (*scan == '"' || *scan == '\'')
702 else if (*scan == '(')
703 parenstack[depth++] = ')';
704 else if (*scan == '[')
705 parenstack[depth++] = ']';
706 /* We're going to treat <> as a pair of matching characters,
707 since we're more likely to see those in template id's than
708 real less-than characters. What a crock. */
709 else if (*scan == '<')
710 parenstack[depth++] = '>';
711 else if (*scan == ')' || *scan == ']' || *scan == '>')
713 if (depth > 0 && parenstack[depth - 1] == *scan)
717 /* We're going to do a little error recovery here. If
718 we don't find a match for *scan on the paren stack,
719 but there is something lower on the stack that does
720 match, we pop the stack to that point. */
723 for (i = depth - 1; i >= 0; i--)
724 if (parenstack[i] == *scan)
736 /* We didn't find any :: tokens at the top level, so declare the
737 whole thing an unqualified identifier. */
741 /* Print any array sizes, function arguments or close parentheses
742 needed after the variable name (to describe its type).
743 Args work like c_type_print_varspec_prefix. */
746 c_type_print_varspec_suffix (struct type *type,
747 struct ui_file *stream,
748 int show, int passed_a_ptr,
750 enum language language,
751 const struct type_print_options *flags)
756 if (TYPE_NAME (type) && show <= 0)
761 switch (TYPE_CODE (type))
763 case TYPE_CODE_ARRAY:
765 LONGEST low_bound, high_bound;
766 int is_vector = TYPE_VECTOR (type);
769 fprintf_filtered (stream, ")");
771 fprintf_filtered (stream, (is_vector ?
772 " __attribute__ ((vector_size(" : "["));
773 /* Bounds are not yet resolved, print a bounds placeholder instead. */
774 if (TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (type)) == PROP_LOCEXPR
775 || TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (type)) == PROP_LOCLIST)
776 fprintf_filtered (stream, "variable length");
777 else if (get_array_bounds (type, &low_bound, &high_bound))
778 fprintf_filtered (stream, "%s",
779 plongest (high_bound - low_bound + 1));
780 fprintf_filtered (stream, (is_vector ? ")))" : "]"));
782 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
783 show, 0, 0, language, flags);
787 case TYPE_CODE_MEMBERPTR:
788 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
789 show, 0, 0, language, flags);
792 case TYPE_CODE_METHODPTR:
793 fprintf_filtered (stream, ")");
794 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
795 show, 0, 0, language, flags);
800 case TYPE_CODE_RVALUE_REF:
801 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
802 show, 1, 0, language, flags);
805 case TYPE_CODE_METHOD:
808 fprintf_filtered (stream, ")");
810 c_type_print_args (type, stream, 0, language, flags);
811 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
812 show, passed_a_ptr, 0, language, flags);
815 case TYPE_CODE_TYPEDEF:
816 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
817 show, passed_a_ptr, 0, language, flags);
820 case TYPE_CODE_UNDEF:
821 case TYPE_CODE_STRUCT:
822 case TYPE_CODE_UNION:
823 case TYPE_CODE_FLAGS:
828 case TYPE_CODE_ERROR:
832 case TYPE_CODE_RANGE:
833 case TYPE_CODE_STRING:
834 case TYPE_CODE_COMPLEX:
835 case TYPE_CODE_NAMESPACE:
836 case TYPE_CODE_DECFLOAT:
837 /* These types do not need a suffix. They are listed so that
838 gcc -Wall will report types that may not have been
842 error (_("type not handled in c_type_print_varspec_suffix()"));
847 /* A helper for c_type_print_base that displays template
848 parameters and their bindings, if needed.
850 TABLE is the local bindings table to use. If NULL, no printing is
851 done. Note that, at this point, TABLE won't have any useful
852 information in it -- but it is also used as a flag to
853 print_name_maybe_canonical to activate searching the global typedef
856 TYPE is the type whose template arguments are being displayed.
858 STREAM is the stream on which to print. */
861 c_type_print_template_args (const struct type_print_options *flags,
862 struct type *type, struct ui_file *stream)
869 for (i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (type); ++i)
871 struct symbol *sym = TYPE_TEMPLATE_ARGUMENT (type, i);
873 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
879 fprintf_filtered (stream, _("[with %s = "),
880 SYMBOL_LINKAGE_NAME (sym));
885 fputs_filtered (", ", stream);
887 fprintf_filtered (stream, "%s = ", SYMBOL_LINKAGE_NAME (sym));
890 c_print_type (SYMBOL_TYPE (sym), "", stream, -1, 0, flags);
894 fputs_filtered (_("] "), stream);
897 /* Use 'print_spaces_filtered', but take into consideration the
898 type_print_options FLAGS in order to determine how many whitespaces
902 print_spaces_filtered_with_print_options
903 (int level, struct ui_file *stream, const struct type_print_options *flags)
905 if (!flags->print_offsets)
906 print_spaces_filtered (level, stream);
908 print_spaces_filtered (level + print_offset_data::indentation, stream);
911 /* Output an access specifier to STREAM, if needed. LAST_ACCESS is the
912 last access specifier output (typically returned by this function). */
914 static enum access_specifier
915 output_access_specifier (struct ui_file *stream,
916 enum access_specifier last_access,
917 int level, bool is_protected, bool is_private,
918 const struct type_print_options *flags)
922 if (last_access != s_protected)
924 last_access = s_protected;
925 print_spaces_filtered_with_print_options (level + 2, stream, flags);
926 fprintf_filtered (stream, "protected:\n");
931 if (last_access != s_private)
933 last_access = s_private;
934 print_spaces_filtered_with_print_options (level + 2, stream, flags);
935 fprintf_filtered (stream, "private:\n");
940 if (last_access != s_public)
942 last_access = s_public;
943 print_spaces_filtered_with_print_options (level + 2, stream, flags);
944 fprintf_filtered (stream, "public:\n");
951 /* Return true if an access label (i.e., "public:", "private:",
952 "protected:") needs to be printed for TYPE. */
955 need_access_label_p (struct type *type)
957 if (TYPE_DECLARED_CLASS (type))
960 for (int i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++)
961 if (!TYPE_FIELD_PRIVATE (type, i))
964 for (int j = 0; j < TYPE_NFN_FIELDS (type); j++)
965 for (int i = 0; i < TYPE_FN_FIELDLIST_LENGTH (type, j); i++)
966 if (!TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type,
970 for (int i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); ++i)
971 if (!TYPE_TYPEDEF_FIELD_PRIVATE (type, i))
977 for (int i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++)
978 if (TYPE_FIELD_PRIVATE (type, i) || TYPE_FIELD_PROTECTED (type, i))
981 for (int j = 0; j < TYPE_NFN_FIELDS (type); j++)
984 for (int i = 0; i < TYPE_FN_FIELDLIST_LENGTH (type, j); i++)
985 if (TYPE_FN_FIELD_PROTECTED (TYPE_FN_FIELDLIST1 (type,
987 || TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type,
993 for (int i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); ++i)
994 if (TYPE_TYPEDEF_FIELD_PROTECTED (type, i)
995 || TYPE_TYPEDEF_FIELD_PRIVATE (type, i))
1002 /* Helper function that temporarily disables FLAGS->PRINT_OFFSETS,
1003 calls 'c_print_type_1', and then reenables FLAGS->PRINT_OFFSETS if
1007 c_print_type_no_offsets (struct type *type,
1008 const char *varstring,
1009 struct ui_file *stream,
1010 int show, int level,
1011 enum language language,
1012 struct type_print_options *flags,
1013 struct print_offset_data *podata)
1015 unsigned int old_po = flags->print_offsets;
1017 /* Temporarily disable print_offsets, because it would mess with
1019 flags->print_offsets = 0;
1020 c_print_type_1 (type, varstring, stream, show, level, language, flags,
1022 flags->print_offsets = old_po;
1025 /* Helper for 'c_type_print_base' that handles structs and unions.
1026 For a description of the arguments, see 'c_type_print_base'. */
1029 c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
1030 int show, int level,
1031 enum language language,
1032 const struct type_print_options *flags,
1033 struct print_offset_data *podata)
1035 struct type_print_options local_flags = *flags;
1036 local_flags.local_typedefs = NULL;
1038 std::unique_ptr<typedef_hash_table> hash_holder;
1041 if (flags->local_typedefs)
1042 local_flags.local_typedefs
1043 = new typedef_hash_table (*flags->local_typedefs);
1045 local_flags.local_typedefs = new typedef_hash_table ();
1047 hash_holder.reset (local_flags.local_typedefs);
1050 c_type_print_modifier (type, stream, 0, 1);
1051 if (TYPE_CODE (type) == TYPE_CODE_UNION)
1052 fprintf_filtered (stream, "union ");
1053 else if (TYPE_DECLARED_CLASS (type))
1054 fprintf_filtered (stream, "class ");
1056 fprintf_filtered (stream, "struct ");
1058 /* Print the tag if it exists. The HP aCC compiler emits a
1059 spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed
1060 enum}" tag for unnamed struct/union/enum's, which we don't
1062 if (TYPE_NAME (type) != NULL
1063 && !startswith (TYPE_NAME (type), "{unnamed"))
1065 /* When printing the tag name, we are still effectively
1066 printing in the outer context, hence the use of FLAGS
1068 print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
1070 fputs_filtered (" ", stream);
1075 /* If we just printed a tag name, no need to print anything
1077 if (TYPE_NAME (type) == NULL)
1078 fprintf_filtered (stream, "{...}");
1080 else if (show > 0 || TYPE_NAME (type) == NULL)
1082 struct type *basetype;
1085 c_type_print_template_args (&local_flags, type, stream);
1087 /* Add in template parameters when printing derivation info. */
1088 if (local_flags.local_typedefs != NULL)
1089 local_flags.local_typedefs->add_template_parameters (type);
1090 cp_type_print_derivation_info (stream, type, &local_flags);
1092 /* This holds just the global typedefs and the template
1094 struct type_print_options semi_local_flags = *flags;
1095 semi_local_flags.local_typedefs = NULL;
1097 std::unique_ptr<typedef_hash_table> semi_holder;
1098 if (local_flags.local_typedefs != nullptr)
1100 semi_local_flags.local_typedefs
1101 = new typedef_hash_table (*local_flags.local_typedefs);
1102 semi_holder.reset (semi_local_flags.local_typedefs);
1104 /* Now add in the local typedefs. */
1105 local_flags.local_typedefs->recursively_update (type);
1108 fprintf_filtered (stream, "{\n");
1110 if (TYPE_NFIELDS (type) == 0 && TYPE_NFN_FIELDS (type) == 0
1111 && TYPE_TYPEDEF_FIELD_COUNT (type) == 0)
1113 if (TYPE_STUB (type))
1114 fprintfi_filtered (level + 4, stream,
1115 _("<incomplete type>\n"));
1117 fprintfi_filtered (level + 4, stream,
1118 _("<no data fields>\n"));
1121 /* Start off with no specific section type, so we can print
1122 one for the first field we find, and use that section type
1123 thereafter until we find another type. */
1125 enum access_specifier section_type = s_none;
1127 /* For a class, if all members are private, there's no need
1128 for a "private:" label; similarly, for a struct or union
1129 masquerading as a class, if all members are public, there's
1130 no need for a "public:" label. */
1131 bool need_access_label = need_access_label_p (type);
1133 /* If there is a base class for this type,
1134 do not print the field that it occupies. */
1136 int len = TYPE_NFIELDS (type);
1137 vptr_fieldno = get_vptr_fieldno (type, &basetype);
1139 struct print_offset_data local_podata;
1141 for (int i = TYPE_N_BASECLASSES (type); i < len; i++)
1145 /* If we have a virtual table pointer, omit it. Even if
1146 virtual table pointers are not specifically marked in
1147 the debug info, they should be artificial. */
1148 if ((i == vptr_fieldno && type == basetype)
1149 || TYPE_FIELD_ARTIFICIAL (type, i))
1152 if (need_access_label)
1154 section_type = output_access_specifier
1155 (stream, section_type, level,
1156 TYPE_FIELD_PROTECTED (type, i),
1157 TYPE_FIELD_PRIVATE (type, i), flags);
1160 bool is_static = field_is_static (&TYPE_FIELD (type, i));
1162 if (flags->print_offsets)
1163 podata->update (type, i, stream);
1165 print_spaces_filtered (level + 4, stream);
1167 fprintf_filtered (stream, "static ");
1169 int newshow = show - 1;
1171 if (!is_static && flags->print_offsets
1172 && (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_STRUCT
1173 || TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_UNION))
1175 /* If we're printing offsets and this field's type is
1176 either a struct or an union, then we're interested in
1180 /* Make sure we carry our offset when we expand the
1182 local_podata.offset_bitpos
1183 = podata->offset_bitpos + TYPE_FIELD_BITPOS (type, i);
1184 /* We're entering a struct/union. Right now,
1185 PODATA->END_BITPOS points right *after* the
1186 struct/union. However, when printing the first field
1187 of this inner struct/union, the end_bitpos we're
1188 expecting is exactly at the beginning of the
1189 struct/union. Therefore, we subtract the length of
1190 the whole struct/union. */
1191 local_podata.end_bitpos
1192 = podata->end_bitpos
1193 - TYPE_LENGTH (TYPE_FIELD_TYPE (type, i)) * TARGET_CHAR_BIT;
1196 c_print_type_1 (TYPE_FIELD_TYPE (type, i),
1197 TYPE_FIELD_NAME (type, i),
1198 stream, newshow, level + 4,
1199 language, &local_flags, &local_podata);
1201 if (!is_static && TYPE_FIELD_PACKED (type, i))
1203 /* It is a bitfield. This code does not attempt
1204 to look at the bitpos and reconstruct filler,
1205 unnamed fields. This would lead to misleading
1206 results if the compiler does not put out fields
1207 for such things (I don't know what it does). */
1208 fprintf_filtered (stream, " : %d",
1209 TYPE_FIELD_BITSIZE (type, i));
1211 fprintf_filtered (stream, ";\n");
1214 /* If there are both fields and methods, put a blank line
1215 between them. Make sure to count only method that we
1216 will display; artificial methods will be hidden. */
1217 len = TYPE_NFN_FIELDS (type);
1218 if (!flags->print_methods)
1221 for (int i = 0; i < len; i++)
1223 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
1224 int len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
1227 for (j = 0; j < len2; j++)
1228 if (!TYPE_FN_FIELD_ARTIFICIAL (f, j))
1231 if (real_len > 0 && section_type != s_none)
1232 fprintf_filtered (stream, "\n");
1234 /* C++: print out the methods. */
1235 for (int i = 0; i < len; i++)
1237 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
1238 int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
1239 const char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
1240 const char *name = TYPE_NAME (type);
1241 int is_constructor = name && strcmp (method_name,
1244 for (j = 0; j < len2; j++)
1246 const char *mangled_name;
1247 gdb::unique_xmalloc_ptr<char> mangled_name_holder;
1248 char *demangled_name;
1249 const char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
1250 int is_full_physname_constructor =
1251 TYPE_FN_FIELD_CONSTRUCTOR (f, j)
1252 || is_constructor_name (physname)
1253 || is_destructor_name (physname)
1254 || method_name[0] == '~';
1256 /* Do not print out artificial methods. */
1257 if (TYPE_FN_FIELD_ARTIFICIAL (f, j))
1261 section_type = output_access_specifier
1262 (stream, section_type, level,
1263 TYPE_FN_FIELD_PROTECTED (f, j),
1264 TYPE_FN_FIELD_PRIVATE (f, j), flags);
1266 print_spaces_filtered_with_print_options (level + 4, stream,
1268 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
1269 fprintf_filtered (stream, "virtual ");
1270 else if (TYPE_FN_FIELD_STATIC_P (f, j))
1271 fprintf_filtered (stream, "static ");
1272 if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
1274 /* Keep GDB from crashing here. */
1275 fprintf_filtered (stream,
1276 _("<undefined type> %s;\n"),
1277 TYPE_FN_FIELD_PHYSNAME (f, j));
1280 else if (!is_constructor /* Constructors don't
1283 && !is_full_physname_constructor /* " " */
1284 && !is_type_conversion_operator (type, i, j))
1286 c_print_type_no_offsets
1287 (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
1288 "", stream, -1, 0, language, &local_flags, podata);
1290 fputs_filtered (" ", stream);
1292 if (TYPE_FN_FIELD_STUB (f, j))
1294 /* Build something we can demangle. */
1295 mangled_name_holder.reset (gdb_mangle_name (type, i, j));
1296 mangled_name = mangled_name_holder.get ();
1299 mangled_name = TYPE_FN_FIELD_PHYSNAME (f, j);
1302 gdb_demangle (mangled_name,
1303 DMGL_ANSI | DMGL_PARAMS);
1304 if (demangled_name == NULL)
1306 /* In some cases (for instance with the HP
1307 demangling), if a function has more than 10
1308 arguments, the demangling will fail.
1309 Let's try to reconstruct the function
1310 signature from the symbol information. */
1311 if (!TYPE_FN_FIELD_STUB (f, j))
1313 int staticp = TYPE_FN_FIELD_STATIC_P (f, j);
1314 struct type *mtype = TYPE_FN_FIELD_TYPE (f, j);
1316 cp_type_print_method_args (mtype,
1324 fprintf_filtered (stream,
1325 _("<badly mangled name '%s'>"),
1331 char *demangled_no_class
1332 = remove_qualifiers (demangled_name);
1334 /* Get rid of the `static' appended by the
1336 p = strstr (demangled_no_class, " static");
1339 int length = p - demangled_no_class;
1340 char *demangled_no_static;
1343 = (char *) xmalloc (length + 1);
1344 strncpy (demangled_no_static,
1345 demangled_no_class, length);
1346 *(demangled_no_static + length) = '\0';
1347 fputs_filtered (demangled_no_static, stream);
1348 xfree (demangled_no_static);
1351 fputs_filtered (demangled_no_class, stream);
1352 xfree (demangled_name);
1355 fprintf_filtered (stream, ";\n");
1359 /* Print out nested types. */
1360 if (TYPE_NESTED_TYPES_COUNT (type) != 0
1361 && semi_local_flags.print_nested_type_limit != 0)
1363 if (semi_local_flags.print_nested_type_limit > 0)
1364 --semi_local_flags.print_nested_type_limit;
1366 if (TYPE_NFIELDS (type) != 0 || TYPE_NFN_FIELDS (type) != 0)
1367 fprintf_filtered (stream, "\n");
1369 for (int i = 0; i < TYPE_NESTED_TYPES_COUNT (type); ++i)
1371 print_spaces_filtered_with_print_options (level + 4, stream,
1373 c_print_type_no_offsets (TYPE_NESTED_TYPES_FIELD_TYPE (type, i),
1374 "", stream, show, level + 4,
1375 language, &semi_local_flags, podata);
1376 fprintf_filtered (stream, ";\n");
1380 /* Print typedefs defined in this class. */
1382 if (TYPE_TYPEDEF_FIELD_COUNT (type) != 0 && flags->print_typedefs)
1384 if (TYPE_NFIELDS (type) != 0 || TYPE_NFN_FIELDS (type) != 0
1385 || TYPE_NESTED_TYPES_COUNT (type) != 0)
1386 fprintf_filtered (stream, "\n");
1388 for (int i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); i++)
1390 struct type *target = TYPE_TYPEDEF_FIELD_TYPE (type, i);
1392 /* Dereference the typedef declaration itself. */
1393 gdb_assert (TYPE_CODE (target) == TYPE_CODE_TYPEDEF);
1394 target = TYPE_TARGET_TYPE (target);
1396 if (need_access_label)
1398 section_type = output_access_specifier
1399 (stream, section_type, level,
1400 TYPE_TYPEDEF_FIELD_PROTECTED (type, i),
1401 TYPE_TYPEDEF_FIELD_PRIVATE (type, i), flags);
1403 print_spaces_filtered_with_print_options (level + 4, stream,
1405 fprintf_filtered (stream, "typedef ");
1407 /* We want to print typedefs with substitutions
1408 from the template parameters or globally-known
1409 typedefs but not local typedefs. */
1410 c_print_type_no_offsets (target,
1411 TYPE_TYPEDEF_FIELD_NAME (type, i),
1412 stream, show - 1, level + 4,
1413 language, &semi_local_flags, podata);
1414 fprintf_filtered (stream, ";\n");
1418 if (flags->print_offsets)
1421 podata->finish (type, level, stream);
1423 print_spaces_filtered (print_offset_data::indentation, stream);
1425 print_spaces_filtered (2, stream);
1428 fprintfi_filtered (level, stream, "}");
1432 /* Print the name of the type (or the ultimate pointer target,
1433 function value or array element), or the description of a structure
1436 SHOW positive means print details about the type (e.g. enum
1437 values), and print structure elements passing SHOW - 1 for show.
1439 SHOW negative means just print the type name or struct tag if there
1440 is one. If there is no name, print something sensible but concise
1441 like "struct {...}".
1443 SHOW zero means just print the type name or struct tag if there is
1444 one. If there is no name, print something sensible but not as
1445 concise like "struct {int x; int y;}".
1447 LEVEL is the number of spaces to indent by.
1448 We increase it for some recursive calls. */
1451 c_type_print_base_1 (struct type *type, struct ui_file *stream,
1452 int show, int level,
1453 enum language language,
1454 const struct type_print_options *flags,
1455 struct print_offset_data *podata)
1464 fputs_filtered (_("<type unknown>"), stream);
1468 /* When SHOW is zero or less, and there is a valid type name, then
1469 always just print the type name directly from the type. */
1472 && TYPE_NAME (type) != NULL)
1474 c_type_print_modifier (type, stream, 0, 1);
1476 /* If we have "typedef struct foo {. . .} bar;" do we want to
1477 print it as "struct foo" or as "bar"? Pick the latter for
1478 C++, because C++ folk tend to expect things like "class5
1479 *foo" rather than "struct class5 *foo". We rather
1480 arbitrarily choose to make language_minimal work in a C-like
1482 if (language == language_c || language == language_minimal)
1484 if (TYPE_CODE (type) == TYPE_CODE_UNION)
1485 fprintf_filtered (stream, "union ");
1486 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1488 if (TYPE_DECLARED_CLASS (type))
1489 fprintf_filtered (stream, "class ");
1491 fprintf_filtered (stream, "struct ");
1493 else if (TYPE_CODE (type) == TYPE_CODE_ENUM)
1494 fprintf_filtered (stream, "enum ");
1497 print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
1501 type = check_typedef (type);
1503 switch (TYPE_CODE (type))
1505 case TYPE_CODE_TYPEDEF:
1506 /* If we get here, the typedef doesn't have a name, and we
1507 couldn't resolve TYPE_TARGET_TYPE. Not much we can do. */
1508 gdb_assert (TYPE_NAME (type) == NULL);
1509 gdb_assert (TYPE_TARGET_TYPE (type) == NULL);
1510 fprintf_filtered (stream, _("<unnamed typedef>"));
1513 case TYPE_CODE_FUNC:
1514 case TYPE_CODE_METHOD:
1515 if (TYPE_TARGET_TYPE (type) == NULL)
1516 type_print_unknown_return_type (stream);
1518 c_type_print_base_1 (TYPE_TARGET_TYPE (type),
1519 stream, show, level, language, flags, podata);
1521 case TYPE_CODE_ARRAY:
1523 case TYPE_CODE_MEMBERPTR:
1525 case TYPE_CODE_RVALUE_REF:
1526 case TYPE_CODE_METHODPTR:
1527 c_type_print_base_1 (TYPE_TARGET_TYPE (type),
1528 stream, show, level, language, flags, podata);
1531 case TYPE_CODE_STRUCT:
1532 case TYPE_CODE_UNION:
1533 c_type_print_base_struct_union (type, stream, show, level,
1534 language, flags, podata);
1537 case TYPE_CODE_ENUM:
1538 c_type_print_modifier (type, stream, 0, 1);
1539 fprintf_filtered (stream, "enum ");
1540 if (TYPE_DECLARED_CLASS (type))
1541 fprintf_filtered (stream, "class ");
1542 /* Print the tag name if it exists.
1543 The aCC compiler emits a spurious
1544 "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
1545 tag for unnamed struct/union/enum's, which we don't
1547 if (TYPE_NAME (type) != NULL
1548 && !startswith (TYPE_NAME (type), "{unnamed"))
1550 print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
1552 fputs_filtered (" ", stream);
1558 /* If we just printed a tag name, no need to print anything
1560 if (TYPE_NAME (type) == NULL)
1561 fprintf_filtered (stream, "{...}");
1563 else if (show > 0 || TYPE_NAME (type) == NULL)
1565 LONGEST lastval = 0;
1567 /* We can't handle this case perfectly, as DWARF does not
1568 tell us whether or not the underlying type was specified
1569 in the source (and other debug formats don't provide this
1570 at all). We choose to print the underlying type, if it
1571 has a name, when in C++ on the theory that it's better to
1572 print too much than too little; but conversely not to
1573 print something egregiously outside the current
1574 language's syntax. */
1575 if (language == language_cplus && TYPE_TARGET_TYPE (type) != NULL)
1577 struct type *underlying = check_typedef (TYPE_TARGET_TYPE (type));
1579 if (TYPE_NAME (underlying) != NULL)
1580 fprintf_filtered (stream, ": %s ", TYPE_NAME (underlying));
1583 fprintf_filtered (stream, "{");
1584 len = TYPE_NFIELDS (type);
1585 for (i = 0; i < len; i++)
1589 fprintf_filtered (stream, ", ");
1591 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
1592 if (lastval != TYPE_FIELD_ENUMVAL (type, i))
1594 fprintf_filtered (stream, " = %s",
1595 plongest (TYPE_FIELD_ENUMVAL (type, i)));
1596 lastval = TYPE_FIELD_ENUMVAL (type, i);
1600 fprintf_filtered (stream, "}");
1604 case TYPE_CODE_FLAGS:
1606 struct type_print_options local_flags = *flags;
1608 local_flags.local_typedefs = NULL;
1610 c_type_print_modifier (type, stream, 0, 1);
1611 fprintf_filtered (stream, "flag ");
1612 print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
1615 fputs_filtered (" ", stream);
1616 fprintf_filtered (stream, "{\n");
1617 if (TYPE_NFIELDS (type) == 0)
1619 if (TYPE_STUB (type))
1620 fprintfi_filtered (level + 4, stream,
1621 _("<incomplete type>\n"));
1623 fprintfi_filtered (level + 4, stream,
1624 _("<no data fields>\n"));
1626 len = TYPE_NFIELDS (type);
1627 for (i = 0; i < len; i++)
1630 print_spaces_filtered (level + 4, stream);
1631 /* We pass "show" here and not "show - 1" to get enum types
1632 printed. There's no other way to see them. */
1633 c_print_type_1 (TYPE_FIELD_TYPE (type, i),
1634 TYPE_FIELD_NAME (type, i),
1635 stream, show, level + 4,
1636 language, &local_flags, podata);
1637 fprintf_filtered (stream, " @%s",
1638 plongest (TYPE_FIELD_BITPOS (type, i)));
1639 if (TYPE_FIELD_BITSIZE (type, i) > 1)
1641 fprintf_filtered (stream, "-%s",
1642 plongest (TYPE_FIELD_BITPOS (type, i)
1643 + TYPE_FIELD_BITSIZE (type, i)
1646 fprintf_filtered (stream, ";\n");
1648 fprintfi_filtered (level, stream, "}");
1653 case TYPE_CODE_VOID:
1654 fprintf_filtered (stream, "void");
1657 case TYPE_CODE_UNDEF:
1658 fprintf_filtered (stream, _("struct <unknown>"));
1661 case TYPE_CODE_ERROR:
1662 fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
1665 case TYPE_CODE_RANGE:
1666 /* This should not occur. */
1667 fprintf_filtered (stream, _("<range type>"));
1670 case TYPE_CODE_NAMESPACE:
1671 fputs_filtered ("namespace ", stream);
1672 fputs_filtered (TYPE_NAME (type), stream);
1676 /* Handle types not explicitly handled by the other cases, such
1677 as fundamental types. For these, just print whatever the
1678 type name is, as recorded in the type itself. If there is no
1679 type name, then complain. */
1680 if (TYPE_NAME (type) != NULL)
1682 c_type_print_modifier (type, stream, 0, 1);
1683 print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
1687 /* At least for dump_symtab, it is important that this not
1689 fprintf_filtered (stream, _("<invalid type code %d>"),
1696 /* See c_type_print_base_1. */
1699 c_type_print_base (struct type *type, struct ui_file *stream,
1700 int show, int level,
1701 const struct type_print_options *flags)
1703 struct print_offset_data podata;
1705 c_type_print_base_1 (type, stream, show, level,
1706 current_language->la_language, flags, &podata);