1 /* Support for printing C and C++ types for GDB, the GNU debugger.
2 Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1998,
4 Free Software Foundation, Inc.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
25 #include "bfd.h" /* Binary File Description */
28 #include "expression.h"
35 #include "typeprint.h"
37 #include "gdb_string.h"
40 /* Flag indicating target was compiled by HP compiler */
41 extern int hp_som_som_object_present
;
43 static void cp_type_print_method_args (struct type
** args
, char *prefix
,
44 char *varstring
, int staticp
,
45 struct ui_file
*stream
);
47 static void c_type_print_args (struct type
*, struct ui_file
*);
49 static void cp_type_print_derivation_info (struct ui_file
*, struct type
*);
51 void c_type_print_varspec_prefix (struct type
*, struct ui_file
*, int,
54 static void c_type_print_cv_qualifier (struct type
*, struct ui_file
*,
60 /* LEVEL is the depth to indent lines by. */
63 c_print_type (struct type
*type
, char *varstring
, struct ui_file
*stream
,
66 register enum type_code code
;
72 c_type_print_base (type
, stream
, show
, level
);
73 code
= TYPE_CODE (type
);
74 if ((varstring
!= NULL
&& *varstring
!= '\0')
76 /* Need a space if going to print stars or brackets;
77 but not if we will print just a type name. */
78 ((show
> 0 || TYPE_NAME (type
) == 0)
80 (code
== TYPE_CODE_PTR
|| code
== TYPE_CODE_FUNC
81 || code
== TYPE_CODE_METHOD
82 || code
== TYPE_CODE_ARRAY
83 || code
== TYPE_CODE_MEMBER
84 || code
== TYPE_CODE_REF
)))
85 fputs_filtered (" ", stream
);
86 c_type_print_varspec_prefix (type
, stream
, show
, 0);
88 if (varstring
!= NULL
)
90 fputs_filtered (varstring
, stream
);
92 /* For demangled function names, we have the arglist as part of the name,
93 so don't print an additional pair of ()'s */
95 demangled_args
= strchr (varstring
, '(') != NULL
;
96 c_type_print_varspec_suffix (type
, stream
, show
, 0, demangled_args
);
100 /* If TYPE is a derived type, then print out derivation information.
101 Print only the actual base classes of this type, not the base classes
102 of the base classes. I.E. for the derivation hierarchy:
105 class B : public A {int b; };
106 class C : public B {int c; };
108 Print the type of class C as:
114 Not as the following (like gdb used to), which is not legal C++ syntax for
115 derived types and may be confused with the multiple inheritance form:
117 class C : public B : public A {
121 In general, gdb should try to print the types as closely as possible to
122 the form that they appear in the source code.
123 Note that in case of protected derivation gcc will not say 'protected'
124 but 'private'. The HP's aCC compiler emits specific information for
125 derivation via protected inheritance, so gdb can print it out */
128 cp_type_print_derivation_info (struct ui_file
*stream
, struct type
*type
)
133 for (i
= 0; i
< TYPE_N_BASECLASSES (type
); i
++)
135 fputs_filtered (i
== 0 ? ": " : ", ", stream
);
136 fprintf_filtered (stream
, "%s%s ",
137 BASETYPE_VIA_PUBLIC (type
, i
) ? "public"
138 : (TYPE_FIELD_PROTECTED (type
, i
) ? "protected" : "private"),
139 BASETYPE_VIA_VIRTUAL (type
, i
) ? " virtual" : "");
140 name
= type_name_no_tag (TYPE_BASECLASS (type
, i
));
141 fprintf_filtered (stream
, "%s", name
? name
: "(null)");
145 fputs_filtered (" ", stream
);
148 /* Print the C++ method arguments ARGS to the file STREAM. */
151 cp_type_print_method_args (struct type
**args
, char *prefix
, char *varstring
,
152 int staticp
, struct ui_file
*stream
)
156 fprintf_symbol_filtered (stream
, prefix
, language_cplus
, DMGL_ANSI
);
157 fprintf_symbol_filtered (stream
, varstring
, language_cplus
, DMGL_ANSI
);
158 fputs_filtered ("(", stream
);
159 if (args
&& args
[!staticp
] && args
[!staticp
]->code
!= TYPE_CODE_VOID
)
161 i
= !staticp
; /* skip the class variable */
164 type_print (args
[i
++], "", stream
, 0);
167 fprintf_filtered (stream
, " ...");
170 else if (args
[i
]->code
!= TYPE_CODE_VOID
)
172 fprintf_filtered (stream
, ", ");
178 else if (current_language
->la_language
== language_cplus
)
180 fprintf_filtered (stream
, "void");
183 fprintf_filtered (stream
, ")");
187 /* Print any asterisks or open-parentheses needed before the
188 variable name (to describe its type).
190 On outermost call, pass 0 for PASSED_A_PTR.
191 On outermost call, SHOW > 0 means should ignore
192 any typename for TYPE and show its details.
193 SHOW is always zero on recursive calls. */
196 c_type_print_varspec_prefix (struct type
*type
, struct ui_file
*stream
,
197 int show
, int passed_a_ptr
)
203 if (TYPE_NAME (type
) && show
<= 0)
208 switch (TYPE_CODE (type
))
211 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 1);
212 fprintf_filtered (stream
, "*");
213 c_type_print_cv_qualifier (type
, stream
, 1, 0);
216 case TYPE_CODE_MEMBER
:
218 fprintf_filtered (stream
, "(");
219 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
220 fprintf_filtered (stream
, " ");
221 name
= type_name_no_tag (TYPE_DOMAIN_TYPE (type
));
223 fputs_filtered (name
, stream
);
225 c_type_print_base (TYPE_DOMAIN_TYPE (type
), stream
, 0, passed_a_ptr
);
226 fprintf_filtered (stream
, "::");
229 case TYPE_CODE_METHOD
:
231 fprintf_filtered (stream
, "(");
232 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
235 fprintf_filtered (stream
, " ");
236 c_type_print_base (TYPE_DOMAIN_TYPE (type
), stream
, 0, passed_a_ptr
);
237 fprintf_filtered (stream
, "::");
242 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 1);
243 fprintf_filtered (stream
, "&");
244 c_type_print_cv_qualifier (type
, stream
, 1, 0);
248 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
250 fprintf_filtered (stream
, "(");
253 case TYPE_CODE_ARRAY
:
254 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
256 fprintf_filtered (stream
, "(");
259 case TYPE_CODE_UNDEF
:
260 case TYPE_CODE_STRUCT
:
261 case TYPE_CODE_UNION
:
266 case TYPE_CODE_ERROR
:
270 case TYPE_CODE_RANGE
:
271 case TYPE_CODE_STRING
:
272 case TYPE_CODE_BITSTRING
:
273 case TYPE_CODE_COMPLEX
:
274 case TYPE_CODE_TYPEDEF
:
275 case TYPE_CODE_TEMPLATE
:
276 /* These types need no prefix. They are listed here so that
277 gcc -Wall will reveal any types that haven't been handled. */
280 error ("type not handled in c_type_print_varspec_prefix()");
285 /* Print out "const" and "volatile" attributes.
286 TYPE is a pointer to the type being printed out.
287 STREAM is the output destination.
288 NEED_SPACE = 1 indicates an initial white space is needed */
291 c_type_print_cv_qualifier (struct type
*type
, struct ui_file
*stream
,
292 int need_pre_space
, int need_post_space
)
296 /* We don't print `const' qualifiers for references --- since all
297 operators affect the thing referenced, not the reference itself,
298 every reference is `const'. */
299 if (TYPE_CONST (type
)
300 && TYPE_CODE (type
) != TYPE_CODE_REF
)
303 fprintf_filtered (stream
, " ");
304 fprintf_filtered (stream
, "const");
308 if (TYPE_VOLATILE (type
))
310 if (flag
|| need_pre_space
)
311 fprintf_filtered (stream
, " ");
312 fprintf_filtered (stream
, "volatile");
316 if (flag
&& need_post_space
)
317 fprintf_filtered (stream
, " ");
324 c_type_print_args (struct type
*type
, struct ui_file
*stream
)
329 fprintf_filtered (stream
, "(");
330 args
= TYPE_ARG_TYPES (type
);
335 fprintf_filtered (stream
, "...");
337 else if ((args
[1]->code
== TYPE_CODE_VOID
) &&
338 (current_language
->la_language
== language_cplus
))
340 fprintf_filtered (stream
, "void");
345 args
[i
] != NULL
&& args
[i
]->code
!= TYPE_CODE_VOID
;
348 c_print_type (args
[i
], "", stream
, -1, 0);
349 if (args
[i
+ 1] == NULL
)
351 fprintf_filtered (stream
, "...");
353 else if (args
[i
+ 1]->code
!= TYPE_CODE_VOID
)
355 fprintf_filtered (stream
, ",");
361 else if (current_language
->la_language
== language_cplus
)
363 fprintf_filtered (stream
, "void");
366 fprintf_filtered (stream
, ")");
370 /* Return true iff the j'th overloading of the i'th method of TYPE
371 is a type conversion operator, like `operator int () { ... }'.
372 When listing a class's methods, we don't print the return type of
375 is_type_conversion_operator (struct type
*type
, int i
, int j
)
377 /* I think the whole idea of recognizing type conversion operators
378 by their name is pretty terrible. But I don't think our present
379 data structure gives us any other way to tell. If you know of
380 some other way, feel free to rewrite this function. */
381 char *name
= TYPE_FN_FIELDLIST_NAME (type
, i
);
383 if (strncmp (name
, "operator", 8) != 0)
387 if (! strchr (" \t\f\n\r", *name
))
390 while (strchr (" \t\f\n\r", *name
))
393 if (strncmp (name
, "new", 3) == 0)
395 else if (strncmp (name
, "delete", 6) == 0)
400 /* Is that really the end of the name? */
401 if (('a' <= *name
&& *name
<= 'z')
402 || ('A' <= *name
&& *name
<= 'Z')
403 || ('0' <= *name
&& *name
<= '9')
405 /* No, so the identifier following "operator" must be a type name,
406 and this is a type conversion operator. */
409 /* That was indeed the end of the name, so it was `operator new' or
410 `operator delete', neither of which are type conversion operators. */
415 /* Given a C++ qualified identifier QID, strip off the qualifiers,
416 yielding the unqualified name. The return value is a pointer into
419 It's a pity we don't have this information in some more structured
420 form. Even the author of this function feels that writing little
421 parsers like this everywhere is stupid. */
423 remove_qualifiers (char *qid
)
425 int quoted
= 0; /* zero if we're not in quotes;
426 '"' if we're in a double-quoted string;
427 '\'' if we're in a single-quoted string. */
428 int depth
= 0; /* number of unclosed parens we've seen */
429 char *parenstack
= (char *) alloca (strlen (qid
));
431 char *last
= 0; /* The character after the rightmost
432 `::' token we've seen so far. */
434 for (scan
= qid
; *scan
; scan
++)
440 else if (*scan
== '\\' && *(scan
+ 1))
443 else if (scan
[0] == ':' && scan
[1] == ':')
445 /* If we're inside parenthesis (i.e., an argument list) or
446 angle brackets (i.e., a list of template arguments), then
447 we don't record the position of this :: token, since it's
448 not relevant to the top-level structure we're trying
456 else if (*scan
== '"' || *scan
== '\'')
458 else if (*scan
== '(')
459 parenstack
[depth
++] = ')';
460 else if (*scan
== '[')
461 parenstack
[depth
++] = ']';
462 /* We're going to treat <> as a pair of matching characters,
463 since we're more likely to see those in template id's than
464 real less-than characters. What a crock. */
465 else if (*scan
== '<')
466 parenstack
[depth
++] = '>';
467 else if (*scan
== ')' || *scan
== ']' || *scan
== '>')
469 if (depth
> 0 && parenstack
[depth
- 1] == *scan
)
473 /* We're going to do a little error recovery here. If we
474 don't find a match for *scan on the paren stack, but
475 there is something lower on the stack that does match, we
476 pop the stack to that point. */
479 for (i
= depth
- 1; i
>= 0; i
--)
480 if (parenstack
[i
] == *scan
)
492 /* We didn't find any :: tokens at the top level, so declare the
493 whole thing an unqualified identifier. */
498 /* Print any array sizes, function arguments or close parentheses
499 needed after the variable name (to describe its type).
500 Args work like c_type_print_varspec_prefix. */
503 c_type_print_varspec_suffix (struct type
*type
, struct ui_file
*stream
,
504 int show
, int passed_a_ptr
, int demangled_args
)
509 if (TYPE_NAME (type
) && show
<= 0)
514 switch (TYPE_CODE (type
))
516 case TYPE_CODE_ARRAY
:
518 fprintf_filtered (stream
, ")");
520 fprintf_filtered (stream
, "[");
521 if (TYPE_LENGTH (type
) >= 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type
)) > 0
522 && TYPE_ARRAY_UPPER_BOUND_TYPE (type
) != BOUND_CANNOT_BE_DETERMINED
)
523 fprintf_filtered (stream
, "%d",
525 / TYPE_LENGTH (TYPE_TARGET_TYPE (type
))));
526 fprintf_filtered (stream
, "]");
528 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 0, 0);
531 case TYPE_CODE_MEMBER
:
533 fprintf_filtered (stream
, ")");
534 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 0, 0);
537 case TYPE_CODE_METHOD
:
539 fprintf_filtered (stream
, ")");
540 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 0, 0);
543 c_type_print_args (type
, stream
);
549 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 1, 0);
554 fprintf_filtered (stream
, ")");
557 int i
, len
= TYPE_NFIELDS (type
);
558 fprintf_filtered (stream
, "(");
559 if ((len
== 0) && (current_language
->la_language
== language_cplus
))
561 fprintf_filtered (stream
, "void");
564 for (i
= 0; i
< len
; i
++)
568 fputs_filtered (", ", stream
);
571 c_print_type (TYPE_FIELD_TYPE (type
, i
), "", stream
, -1, 0);
573 fprintf_filtered (stream
, ")");
575 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0,
579 case TYPE_CODE_UNDEF
:
580 case TYPE_CODE_STRUCT
:
581 case TYPE_CODE_UNION
:
586 case TYPE_CODE_ERROR
:
590 case TYPE_CODE_RANGE
:
591 case TYPE_CODE_STRING
:
592 case TYPE_CODE_BITSTRING
:
593 case TYPE_CODE_COMPLEX
:
594 case TYPE_CODE_TYPEDEF
:
595 case TYPE_CODE_TEMPLATE
:
596 /* These types do not need a suffix. They are listed so that
597 gcc -Wall will report types that may not have been considered. */
600 error ("type not handled in c_type_print_varspec_suffix()");
605 /* Print the name of the type (or the ultimate pointer target,
606 function value or array element), or the description of a
609 SHOW positive means print details about the type (e.g. enum values),
610 and print structure elements passing SHOW - 1 for show.
611 SHOW negative means just print the type name or struct tag if there is one.
612 If there is no name, print something sensible but concise like
614 SHOW zero means just print the type name or struct tag if there is one.
615 If there is no name, print something sensible but not as concise like
616 "struct {int x; int y;}".
618 LEVEL is the number of spaces to indent by.
619 We increase it for some recursive calls. */
622 c_type_print_base (struct type
*type
, struct ui_file
*stream
, int show
,
627 register int lastval
;
629 char *demangled_name
;
630 char *demangled_no_static
;
633 s_none
, s_public
, s_private
, s_protected
636 int need_access_label
= 0;
644 fputs_filtered ("<type unknown>", stream
);
648 /* When SHOW is zero or less, and there is a valid type name, then always
649 just print the type name directly from the type. */
650 /* If we have "typedef struct foo {. . .} bar;" do we want to print it
651 as "struct foo" or as "bar"? Pick the latter, because C++ folk tend
652 to expect things like "class5 *foo" rather than "struct class5 *foo". */
655 && TYPE_NAME (type
) != NULL
)
657 c_type_print_cv_qualifier (type
, stream
, 0, 1);
658 fputs_filtered (TYPE_NAME (type
), stream
);
662 CHECK_TYPEDEF (type
);
664 switch (TYPE_CODE (type
))
666 case TYPE_CODE_TYPEDEF
:
667 case TYPE_CODE_ARRAY
:
669 case TYPE_CODE_MEMBER
:
672 case TYPE_CODE_METHOD
:
673 c_type_print_base (TYPE_TARGET_TYPE (type
), stream
, show
, level
);
676 case TYPE_CODE_STRUCT
:
677 c_type_print_cv_qualifier (type
, stream
, 0, 1);
678 /* Note TYPE_CODE_STRUCT and TYPE_CODE_CLASS have the same value,
679 * so we use another means for distinguishing them.
681 if (HAVE_CPLUS_STRUCT (type
))
683 switch (TYPE_DECLARED_TYPE (type
))
685 case DECLARED_TYPE_CLASS
:
686 fprintf_filtered (stream
, "class ");
688 case DECLARED_TYPE_UNION
:
689 fprintf_filtered (stream
, "union ");
691 case DECLARED_TYPE_STRUCT
:
692 fprintf_filtered (stream
, "struct ");
695 /* If there is a CPLUS_STRUCT, assume class if not
696 * otherwise specified in the declared_type field.
698 fprintf_filtered (stream
, "class ");
704 /* If not CPLUS_STRUCT, then assume it's a C struct */
705 fprintf_filtered (stream
, "struct ");
709 case TYPE_CODE_UNION
:
710 c_type_print_cv_qualifier (type
, stream
, 0, 1);
711 fprintf_filtered (stream
, "union ");
715 /* Print the tag if it exists.
716 * The HP aCC compiler emits
717 * a spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
718 * tag for unnamed struct/union/enum's, which we don't
721 if (TYPE_TAG_NAME (type
) != NULL
&&
722 strncmp (TYPE_TAG_NAME (type
), "{unnamed", 8))
724 fputs_filtered (TYPE_TAG_NAME (type
), stream
);
726 fputs_filtered (" ", stream
);
731 /* If we just printed a tag name, no need to print anything else. */
732 if (TYPE_TAG_NAME (type
) == NULL
)
733 fprintf_filtered (stream
, "{...}");
735 else if (show
> 0 || TYPE_TAG_NAME (type
) == NULL
)
737 cp_type_print_derivation_info (stream
, type
);
739 fprintf_filtered (stream
, "{\n");
740 if ((TYPE_NFIELDS (type
) == 0) && (TYPE_NFN_FIELDS (type
) == 0))
742 if (TYPE_FLAGS (type
) & TYPE_FLAG_STUB
)
743 fprintfi_filtered (level
+ 4, stream
, "<incomplete type>\n");
745 fprintfi_filtered (level
+ 4, stream
, "<no data fields>\n");
748 /* Start off with no specific section type, so we can print
749 one for the first field we find, and use that section type
750 thereafter until we find another type. */
752 section_type
= s_none
;
754 /* For a class, if all members are private, there's no need
755 for a "private:" label; similarly, for a struct or union
756 masquerading as a class, if all members are public, there's
757 no need for a "public:" label. */
759 if ((TYPE_DECLARED_TYPE (type
) == DECLARED_TYPE_CLASS
) ||
760 (TYPE_DECLARED_TYPE (type
) == DECLARED_TYPE_TEMPLATE
))
763 len
= TYPE_NFIELDS (type
);
764 for (i
= TYPE_N_BASECLASSES (type
); i
< len
; i
++)
765 if (!TYPE_FIELD_PRIVATE (type
, i
))
767 need_access_label
= 1;
771 if (!need_access_label
)
773 len2
= TYPE_NFN_FIELDS (type
);
774 for (j
= 0; j
< len2
; j
++)
776 len
= TYPE_FN_FIELDLIST_LENGTH (type
, j
);
777 for (i
= 0; i
< len
; i
++)
778 if (!TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type
, j
), i
))
780 need_access_label
= 1;
783 if (need_access_label
)
788 else if ((TYPE_DECLARED_TYPE (type
) == DECLARED_TYPE_STRUCT
) ||
789 (TYPE_DECLARED_TYPE (type
) == DECLARED_TYPE_UNION
))
792 len
= TYPE_NFIELDS (type
);
793 for (i
= TYPE_N_BASECLASSES (type
); i
< len
; i
++)
794 if (TYPE_FIELD_PRIVATE (type
, i
) || TYPE_FIELD_PROTECTED (type
, i
))
796 need_access_label
= 1;
800 if (!need_access_label
)
802 len2
= TYPE_NFN_FIELDS (type
);
803 for (j
= 0; j
< len2
; j
++)
806 len
= TYPE_FN_FIELDLIST_LENGTH (type
, j
);
807 for (i
= 0; i
< len
; i
++)
808 if (TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type
, j
), i
) ||
809 TYPE_FN_FIELD_PROTECTED (TYPE_FN_FIELDLIST1 (type
, j
), i
))
811 need_access_label
= 1;
814 if (need_access_label
)
820 /* If there is a base class for this type,
821 do not print the field that it occupies. */
823 len
= TYPE_NFIELDS (type
);
824 for (i
= TYPE_N_BASECLASSES (type
); i
< len
; i
++)
827 /* Don't print out virtual function table. */
828 /* HP ANSI C++ case */
829 if (TYPE_HAS_VTABLE (type
) && (STREQN (TYPE_FIELD_NAME (type
, i
), "__vfp", 5)))
831 /* Other compilers */
832 if (STREQN (TYPE_FIELD_NAME (type
, i
), "_vptr", 5)
833 && is_cplus_marker ((TYPE_FIELD_NAME (type
, i
))[5]))
836 /* If this is a C++ class we can print the various C++ section
839 if (HAVE_CPLUS_STRUCT (type
) && need_access_label
)
841 if (TYPE_FIELD_PROTECTED (type
, i
))
843 if (section_type
!= s_protected
)
845 section_type
= s_protected
;
846 fprintfi_filtered (level
+ 2, stream
,
850 else if (TYPE_FIELD_PRIVATE (type
, i
))
852 if (section_type
!= s_private
)
854 section_type
= s_private
;
855 fprintfi_filtered (level
+ 2, stream
, "private:\n");
860 if (section_type
!= s_public
)
862 section_type
= s_public
;
863 fprintfi_filtered (level
+ 2, stream
, "public:\n");
868 print_spaces_filtered (level
+ 4, stream
);
869 if (TYPE_FIELD_STATIC (type
, i
))
871 fprintf_filtered (stream
, "static ");
873 c_print_type (TYPE_FIELD_TYPE (type
, i
),
874 TYPE_FIELD_NAME (type
, i
),
875 stream
, show
- 1, level
+ 4);
876 if (!TYPE_FIELD_STATIC (type
, i
)
877 && TYPE_FIELD_PACKED (type
, i
))
879 /* It is a bitfield. This code does not attempt
880 to look at the bitpos and reconstruct filler,
881 unnamed fields. This would lead to misleading
882 results if the compiler does not put out fields
883 for such things (I don't know what it does). */
884 fprintf_filtered (stream
, " : %d",
885 TYPE_FIELD_BITSIZE (type
, i
));
887 fprintf_filtered (stream
, ";\n");
890 /* If there are both fields and methods, put a space between. */
891 len
= TYPE_NFN_FIELDS (type
);
892 if (len
&& section_type
!= s_none
)
893 fprintf_filtered (stream
, "\n");
895 /* C++: print out the methods */
896 for (i
= 0; i
< len
; i
++)
898 struct fn_field
*f
= TYPE_FN_FIELDLIST1 (type
, i
);
899 int j
, len2
= TYPE_FN_FIELDLIST_LENGTH (type
, i
);
900 char *method_name
= TYPE_FN_FIELDLIST_NAME (type
, i
);
901 char *name
= type_name_no_tag (type
);
902 int is_constructor
= name
&& STREQ (method_name
, name
);
903 for (j
= 0; j
< len2
; j
++)
905 char *physname
= TYPE_FN_FIELD_PHYSNAME (f
, j
);
906 int is_full_physname_constructor
=
907 ((physname
[0] == '_' && physname
[1] == '_'
908 && strchr ("0123456789Qt", physname
[2]))
909 || STREQN (physname
, "__ct__", 6)
910 || DESTRUCTOR_PREFIX_P (physname
)
911 || STREQN (physname
, "__dt__", 6));
914 if (TYPE_FN_FIELD_PROTECTED (f
, j
))
916 if (section_type
!= s_protected
)
918 section_type
= s_protected
;
919 fprintfi_filtered (level
+ 2, stream
,
923 else if (TYPE_FN_FIELD_PRIVATE (f
, j
))
925 if (section_type
!= s_private
)
927 section_type
= s_private
;
928 fprintfi_filtered (level
+ 2, stream
, "private:\n");
933 if (section_type
!= s_public
)
935 section_type
= s_public
;
936 fprintfi_filtered (level
+ 2, stream
, "public:\n");
940 print_spaces_filtered (level
+ 4, stream
);
941 if (TYPE_FN_FIELD_VIRTUAL_P (f
, j
))
942 fprintf_filtered (stream
, "virtual ");
943 else if (TYPE_FN_FIELD_STATIC_P (f
, j
))
944 fprintf_filtered (stream
, "static ");
945 if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f
, j
)) == 0)
947 /* Keep GDB from crashing here. */
948 fprintf_filtered (stream
, "<undefined type> %s;\n",
949 TYPE_FN_FIELD_PHYSNAME (f
, j
));
952 else if (!is_constructor
&& /* constructors don't have declared types */
953 !is_full_physname_constructor
&& /* " " */
954 !is_type_conversion_operator (type
, i
, j
))
956 type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f
, j
)),
958 fputs_filtered (" ", stream
);
960 if (TYPE_FN_FIELD_STUB (f
, j
))
961 /* Build something we can demangle. */
962 mangled_name
= gdb_mangle_name (type
, i
, j
);
964 mangled_name
= TYPE_FN_FIELD_PHYSNAME (f
, j
);
967 cplus_demangle (mangled_name
,
968 DMGL_ANSI
| DMGL_PARAMS
);
969 if (demangled_name
== NULL
)
971 /* in some cases (for instance with the HP demangling),
972 if a function has more than 10 arguments,
973 the demangling will fail.
974 Let's try to reconstruct the function signature from
975 the symbol information */
976 if (!TYPE_FN_FIELD_STUB (f
, j
))
977 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f
, j
), "",
979 TYPE_FN_FIELD_STATIC_P (f
, j
),
982 fprintf_filtered (stream
, "<badly mangled name '%s'>",
988 char *demangled_no_class
989 = remove_qualifiers (demangled_name
);
991 /* get rid of the `static' appended by the demangler */
992 p
= strstr (demangled_no_class
, " static");
995 int length
= p
- demangled_no_class
;
996 demangled_no_static
= (char *) xmalloc (length
+ 1);
997 strncpy (demangled_no_static
, demangled_no_class
, length
);
998 *(demangled_no_static
+ length
) = '\0';
999 fputs_filtered (demangled_no_static
, stream
);
1000 xfree (demangled_no_static
);
1003 fputs_filtered (demangled_no_class
, stream
);
1004 xfree (demangled_name
);
1007 if (TYPE_FN_FIELD_STUB (f
, j
))
1008 xfree (mangled_name
);
1010 fprintf_filtered (stream
, ";\n");
1014 fprintfi_filtered (level
, stream
, "}");
1016 if (TYPE_LOCALTYPE_PTR (type
) && show
>= 0)
1017 fprintfi_filtered (level
, stream
, " (Local at %s:%d)\n",
1018 TYPE_LOCALTYPE_FILE (type
),
1019 TYPE_LOCALTYPE_LINE (type
));
1021 if (TYPE_CODE (type
) == TYPE_CODE_TEMPLATE
)
1025 case TYPE_CODE_ENUM
:
1026 c_type_print_cv_qualifier (type
, stream
, 0, 1);
1027 /* HP C supports sized enums */
1028 if (hp_som_som_object_present
)
1029 switch (TYPE_LENGTH (type
))
1032 fputs_filtered ("char ", stream
);
1035 fputs_filtered ("short ", stream
);
1040 fprintf_filtered (stream
, "enum ");
1041 /* Print the tag name if it exists.
1042 The aCC compiler emits a spurious
1043 "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
1044 tag for unnamed struct/union/enum's, which we don't
1046 if (TYPE_TAG_NAME (type
) != NULL
&&
1047 strncmp (TYPE_TAG_NAME (type
), "{unnamed", 8))
1049 fputs_filtered (TYPE_TAG_NAME (type
), stream
);
1051 fputs_filtered (" ", stream
);
1057 /* If we just printed a tag name, no need to print anything else. */
1058 if (TYPE_TAG_NAME (type
) == NULL
)
1059 fprintf_filtered (stream
, "{...}");
1061 else if (show
> 0 || TYPE_TAG_NAME (type
) == NULL
)
1063 fprintf_filtered (stream
, "{");
1064 len
= TYPE_NFIELDS (type
);
1066 for (i
= 0; i
< len
; i
++)
1070 fprintf_filtered (stream
, ", ");
1072 fputs_filtered (TYPE_FIELD_NAME (type
, i
), stream
);
1073 if (lastval
!= TYPE_FIELD_BITPOS (type
, i
))
1075 fprintf_filtered (stream
, " = %d", TYPE_FIELD_BITPOS (type
, i
));
1076 lastval
= TYPE_FIELD_BITPOS (type
, i
);
1080 fprintf_filtered (stream
, "}");
1084 case TYPE_CODE_VOID
:
1085 fprintf_filtered (stream
, "void");
1088 case TYPE_CODE_UNDEF
:
1089 fprintf_filtered (stream
, "struct <unknown>");
1092 case TYPE_CODE_ERROR
:
1093 fprintf_filtered (stream
, "<unknown type>");
1096 case TYPE_CODE_RANGE
:
1097 /* This should not occur */
1098 fprintf_filtered (stream
, "<range type>");
1101 case TYPE_CODE_TEMPLATE
:
1102 /* Called on "ptype t" where "t" is a template.
1103 Prints the template header (with args), e.g.:
1104 template <class T1, class T2> class "
1105 and then merges with the struct/union/class code to
1106 print the rest of the definition. */
1107 c_type_print_cv_qualifier (type
, stream
, 0, 1);
1108 fprintf_filtered (stream
, "template <");
1109 for (i
= 0; i
< TYPE_NTEMPLATE_ARGS (type
); i
++)
1111 struct template_arg templ_arg
;
1112 templ_arg
= TYPE_TEMPLATE_ARG (type
, i
);
1113 fprintf_filtered (stream
, "class %s", templ_arg
.name
);
1114 if (i
< TYPE_NTEMPLATE_ARGS (type
) - 1)
1115 fprintf_filtered (stream
, ", ");
1117 fprintf_filtered (stream
, "> class ");
1118 /* Yuck, factor this out to a subroutine so we can call
1119 it and return to the point marked with the "goback:" label... - RT */
1122 if (TYPE_NINSTANTIATIONS (type
) > 0)
1124 fprintf_filtered (stream
, "\ntemplate instantiations:\n");
1125 for (i
= 0; i
< TYPE_NINSTANTIATIONS (type
); i
++)
1127 fprintf_filtered (stream
, " ");
1128 c_type_print_base (TYPE_INSTANTIATION (type
, i
), stream
, 0, level
);
1129 if (i
< TYPE_NINSTANTIATIONS (type
) - 1)
1130 fprintf_filtered (stream
, "\n");
1136 /* Handle types not explicitly handled by the other cases,
1137 such as fundamental types. For these, just print whatever
1138 the type name is, as recorded in the type itself. If there
1139 is no type name, then complain. */
1140 if (TYPE_NAME (type
) != NULL
)
1142 c_type_print_cv_qualifier (type
, stream
, 0, 1);
1143 fputs_filtered (TYPE_NAME (type
), stream
);
1147 /* At least for dump_symtab, it is important that this not be
1149 fprintf_filtered (stream
, "<invalid type code %d>",