1 /* Support for printing C and C++ types for GDB, the GNU debugger.
2 Copyright 1986, 1988, 1989, 1991, 1993, 1994, 1995, 1996
3 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
23 #include "bfd.h" /* Binary File Description */
26 #include "expression.h"
35 #include "typeprint.h"
37 #include "gdb_string.h"
41 /* Flag indicating target was compiled by HP compiler */
42 extern int hp_som_som_object_present
;
45 c_type_print_args
PARAMS ((struct type
*, GDB_FILE
*));
48 c_type_print_varspec_suffix
PARAMS ((struct type
*, GDB_FILE
*, int, int, int));
51 cp_type_print_derivation_info
PARAMS ((GDB_FILE
*, struct type
*));
54 c_type_print_varspec_prefix
PARAMS ((struct type
*, GDB_FILE
*, int, int));
57 c_type_print_cv_qualifier
PARAMS ((struct type
*, GDB_FILE
*, int, int));
61 /* Print a description of a type in the format of a
62 typedef for the current language.
63 NEW is the new name for a type TYPE. */
66 c_typedef_print (type
, new, stream
)
72 switch (current_language
->la_language
)
77 fprintf_filtered(stream
, "typedef ");
78 type_print(type
,"",stream
,0);
79 if(TYPE_NAME ((SYMBOL_TYPE (new))) == 0
80 || !STREQ (TYPE_NAME ((SYMBOL_TYPE (new))), SYMBOL_NAME (new)))
81 fprintf_filtered(stream
, " %s", SYMBOL_SOURCE_NAME(new));
86 fprintf_filtered(stream
, "TYPE ");
87 if(!TYPE_NAME(SYMBOL_TYPE(new)) ||
88 !STREQ (TYPE_NAME(SYMBOL_TYPE(new)), SYMBOL_NAME(new)))
89 fprintf_filtered(stream
, "%s = ", SYMBOL_SOURCE_NAME(new));
91 fprintf_filtered(stream
, "<builtin> = ");
92 type_print(type
,"",stream
,0);
97 fprintf_filtered(stream
, "SYNMODE ");
98 if(!TYPE_NAME(SYMBOL_TYPE(new)) ||
99 !STREQ (TYPE_NAME(SYMBOL_TYPE(new)), SYMBOL_NAME(new)))
100 fprintf_filtered(stream
, "%s = ", SYMBOL_SOURCE_NAME(new));
102 fprintf_filtered(stream
, "<builtin> = ");
103 type_print(type
,"",stream
,0);
107 error("Language not supported.");
109 fprintf_filtered(stream
, ";\n");
113 /* LEVEL is the depth to indent lines by. */
116 c_print_type (type
, varstring
, stream
, show
, level
)
123 register enum type_code code
;
127 CHECK_TYPEDEF (type
);
129 c_type_print_base (type
, stream
, show
, level
);
130 code
= TYPE_CODE (type
);
131 if ((varstring
!= NULL
&& *varstring
!= '\0')
133 /* Need a space if going to print stars or brackets;
134 but not if we will print just a type name. */
135 ((show
> 0 || TYPE_NAME (type
) == 0)
137 (code
== TYPE_CODE_PTR
|| code
== TYPE_CODE_FUNC
138 || code
== TYPE_CODE_METHOD
139 || code
== TYPE_CODE_ARRAY
140 || code
== TYPE_CODE_MEMBER
141 || code
== TYPE_CODE_REF
)))
142 fputs_filtered (" ", stream
);
143 c_type_print_varspec_prefix (type
, stream
, show
, 0);
145 if (varstring
!= NULL
)
147 fputs_filtered (varstring
, stream
);
149 /* For demangled function names, we have the arglist as part of the name,
150 so don't print an additional pair of ()'s */
152 demangled_args
= strchr(varstring
, '(') != NULL
;
153 c_type_print_varspec_suffix (type
, stream
, show
, 0, demangled_args
);
157 /* If TYPE is a derived type, then print out derivation information.
158 Print only the actual base classes of this type, not the base classes
159 of the base classes. I.E. for the derivation hierarchy:
162 class B : public A {int b; };
163 class C : public B {int c; };
165 Print the type of class C as:
171 Not as the following (like gdb used to), which is not legal C++ syntax for
172 derived types and may be confused with the multiple inheritance form:
174 class C : public B : public A {
178 In general, gdb should try to print the types as closely as possible to
179 the form that they appear in the source code.
180 Note that in case of protected derivation gcc will not say 'protected'
181 but 'private'. The HP's aCC compiler emits specific information for
182 derivation via protected inheritance, so gdb can print it out */
185 cp_type_print_derivation_info (stream
, type
)
192 for (i
= 0; i
< TYPE_N_BASECLASSES (type
); i
++)
194 fputs_filtered (i
== 0 ? ": " : ", ", stream
);
195 fprintf_filtered (stream
, "%s%s ",
196 BASETYPE_VIA_PUBLIC (type
, i
) ? "public"
197 : (TYPE_FIELD_PROTECTED (type
, i
) ? "protected" : "private"),
198 BASETYPE_VIA_VIRTUAL(type
, i
) ? " virtual" : "");
199 name
= type_name_no_tag (TYPE_BASECLASS (type
, i
));
200 fprintf_filtered (stream
, "%s", name
? name
: "(null)");
204 fputs_filtered (" ", stream
);
207 /* Print the C++ method arguments ARGS to the file STREAM. */
210 cp_type_print_method_args (args
, prefix
, varstring
, staticp
, stream
)
219 fprintf_symbol_filtered (stream
, prefix
, language_cplus
, DMGL_ANSI
);
220 fprintf_symbol_filtered (stream
, varstring
, language_cplus
, DMGL_ANSI
);
221 fputs_filtered ("(", stream
);
222 if (args
&& args
[!staticp
] && args
[!staticp
]->code
!= TYPE_CODE_VOID
)
224 i
= !staticp
; /* skip the class variable */
227 type_print (args
[i
++], "", stream
, 0);
230 fprintf_filtered (stream
, " ...");
233 else if (args
[i
]->code
!= TYPE_CODE_VOID
)
235 fprintf_filtered (stream
, ", ");
240 else if (current_language
->la_language
== language_cplus
)
242 fprintf_filtered (stream
, "void");
245 fprintf_filtered (stream
, ")");
249 /* Print any asterisks or open-parentheses needed before the
250 variable name (to describe its type).
252 On outermost call, pass 0 for PASSED_A_PTR.
253 On outermost call, SHOW > 0 means should ignore
254 any typename for TYPE and show its details.
255 SHOW is always zero on recursive calls. */
258 c_type_print_varspec_prefix (type
, stream
, show
, passed_a_ptr
)
268 if (TYPE_NAME (type
) && show
<= 0)
273 switch (TYPE_CODE (type
))
276 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 1);
277 fprintf_filtered (stream
, "*");
278 c_type_print_cv_qualifier (type
, stream
, 1, 0);
281 case TYPE_CODE_MEMBER
:
283 fprintf_filtered (stream
, "(");
284 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
285 fprintf_filtered (stream
, " ");
286 name
= type_name_no_tag (TYPE_DOMAIN_TYPE (type
));
288 fputs_filtered (name
, stream
);
290 c_type_print_base (TYPE_DOMAIN_TYPE (type
), stream
, 0, passed_a_ptr
);
291 fprintf_filtered (stream
, "::");
294 case TYPE_CODE_METHOD
:
296 fprintf_filtered (stream
, "(");
297 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
300 fprintf_filtered (stream
, " ");
301 c_type_print_base (TYPE_DOMAIN_TYPE (type
), stream
, 0, passed_a_ptr
);
302 fprintf_filtered (stream
, "::");
307 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 1);
308 fprintf_filtered (stream
, "&");
309 c_type_print_cv_qualifier (type
, stream
, 1, 0);
313 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
315 fprintf_filtered (stream
, "(");
318 case TYPE_CODE_ARRAY
:
319 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
321 fprintf_filtered (stream
, "(");
324 case TYPE_CODE_UNDEF
:
325 case TYPE_CODE_STRUCT
:
326 case TYPE_CODE_UNION
:
331 case TYPE_CODE_ERROR
:
335 case TYPE_CODE_RANGE
:
336 case TYPE_CODE_STRING
:
337 case TYPE_CODE_BITSTRING
:
338 case TYPE_CODE_COMPLEX
:
339 case TYPE_CODE_TYPEDEF
:
340 /* These types need no prefix. They are listed here so that
341 gcc -Wall will reveal any types that haven't been handled. */
346 /* Print out "const" and "volatile" attributes.
347 TYPE is a pointer to the type being printed out.
348 STREAM is the output destination.
349 NEED_SPACE = 1 indicates an initial white space is needed */
352 c_type_print_cv_qualifier (type
, stream
, need_pre_space
, need_post_space
)
360 if (TYPE_CONST (type
))
363 fprintf_filtered (stream
, " ");
364 fprintf_filtered (stream
, "const");
368 if (TYPE_VOLATILE (type
))
370 if (flag
|| need_pre_space
)
371 fprintf_filtered (stream
, " ");
372 fprintf_filtered (stream
, "volatile");
376 if (flag
&& need_post_space
)
377 fprintf_filtered (stream
, " ");
384 c_type_print_args (type
, stream
)
391 fprintf_filtered (stream
, "(");
392 args
= TYPE_ARG_TYPES (type
);
397 fprintf_filtered (stream
, "...");
399 else if ((args
[1]->code
== TYPE_CODE_VOID
) &&
400 (current_language
->la_language
== language_cplus
))
402 fprintf_filtered (stream
, "void");
407 args
[i
] != NULL
&& args
[i
]->code
!= TYPE_CODE_VOID
;
410 c_print_type (args
[i
], "", stream
, -1, 0);
411 if (args
[i
+1] == NULL
)
413 fprintf_filtered (stream
, "...");
415 else if (args
[i
+1]->code
!= TYPE_CODE_VOID
)
417 fprintf_filtered (stream
, ",");
423 else if (current_language
->la_language
== language_cplus
)
425 fprintf_filtered (stream
, "void");
428 fprintf_filtered (stream
, ")");
431 /* Print any array sizes, function arguments or close parentheses
432 needed after the variable name (to describe its type).
433 Args work like c_type_print_varspec_prefix. */
436 c_type_print_varspec_suffix (type
, stream
, show
, passed_a_ptr
, demangled_args
)
446 if (TYPE_NAME (type
) && show
<= 0)
451 switch (TYPE_CODE (type
))
453 case TYPE_CODE_ARRAY
:
455 fprintf_filtered (stream
, ")");
457 fprintf_filtered (stream
, "[");
458 if (TYPE_LENGTH (type
) >= 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type
)) > 0
459 && TYPE_ARRAY_UPPER_BOUND_TYPE(type
) != BOUND_CANNOT_BE_DETERMINED
)
460 fprintf_filtered (stream
, "%d",
462 / TYPE_LENGTH (TYPE_TARGET_TYPE (type
))));
463 fprintf_filtered (stream
, "]");
465 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 0, 0);
468 case TYPE_CODE_MEMBER
:
470 fprintf_filtered (stream
, ")");
471 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 0, 0);
474 case TYPE_CODE_METHOD
:
476 fprintf_filtered (stream
, ")");
477 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 0, 0);
480 c_type_print_args (type
, stream
);
486 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 1, 0);
491 fprintf_filtered (stream
, ")");
493 { int i
, len
= TYPE_NFIELDS (type
);
494 fprintf_filtered (stream
, "(");
495 if ((len
== 0) && (current_language
->la_language
== language_cplus
))
497 fprintf_filtered (stream
, "void");
500 for (i
= 0; i
< len
; i
++)
504 fputs_filtered (", ", stream
);
507 c_print_type (TYPE_FIELD_TYPE (type
, i
), "", stream
, -1, 0);
509 fprintf_filtered (stream
, ")");
511 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0,
515 case TYPE_CODE_UNDEF
:
516 case TYPE_CODE_STRUCT
:
517 case TYPE_CODE_UNION
:
522 case TYPE_CODE_ERROR
:
526 case TYPE_CODE_RANGE
:
527 case TYPE_CODE_STRING
:
528 case TYPE_CODE_BITSTRING
:
529 case TYPE_CODE_COMPLEX
:
530 case TYPE_CODE_TYPEDEF
:
531 /* These types do not need a suffix. They are listed so that
532 gcc -Wall will report types that may not have been considered. */
537 /* Print the name of the type (or the ultimate pointer target,
538 function value or array element), or the description of a
541 SHOW positive means print details about the type (e.g. enum values),
542 and print structure elements passing SHOW - 1 for show.
543 SHOW negative means just print the type name or struct tag if there is one.
544 If there is no name, print something sensible but concise like
546 SHOW zero means just print the type name or struct tag if there is one.
547 If there is no name, print something sensible but not as concise like
548 "struct {int x; int y;}".
550 LEVEL is the number of spaces to indent by.
551 We increase it for some recursive calls. */
554 c_type_print_base (type
, stream
, show
, level
)
562 register int lastval
;
564 char *demangled_name
;
565 char *demangled_no_static
;
566 enum {s_none
, s_public
, s_private
, s_protected
} section_type
;
567 int need_access_label
= 0;
575 fputs_filtered ("<type unknown>", stream
);
579 /* When SHOW is zero or less, and there is a valid type name, then always
580 just print the type name directly from the type. */
581 /* If we have "typedef struct foo {. . .} bar;" do we want to print it
582 as "struct foo" or as "bar"? Pick the latter, because C++ folk tend
583 to expect things like "class5 *foo" rather than "struct class5 *foo". */
586 && TYPE_NAME (type
) != NULL
)
588 c_type_print_cv_qualifier (type
, stream
, 0, 1);
589 fputs_filtered (TYPE_NAME (type
), stream
);
593 CHECK_TYPEDEF (type
);
595 switch (TYPE_CODE (type
))
597 case TYPE_CODE_TYPEDEF
:
598 case TYPE_CODE_ARRAY
:
600 case TYPE_CODE_MEMBER
:
603 case TYPE_CODE_METHOD
:
604 c_type_print_base (TYPE_TARGET_TYPE (type
), stream
, show
, level
);
607 case TYPE_CODE_STRUCT
:
608 c_type_print_cv_qualifier (type
, stream
, 0, 1);
609 /* Note TYPE_CODE_STRUCT and TYPE_CODE_CLASS have the same value,
610 * so we use another means for distinguishing them.
612 if (HAVE_CPLUS_STRUCT (type
)) {
613 switch (TYPE_DECLARED_TYPE(type
)) {
614 case DECLARED_TYPE_CLASS
:
615 fprintf_filtered (stream
, "class ");
617 case DECLARED_TYPE_UNION
:
618 fprintf_filtered (stream
, "union ");
620 case DECLARED_TYPE_STRUCT
:
621 fprintf_filtered (stream
, "struct ");
624 /* If there is a CPLUS_STRUCT, assume class if not
625 * otherwise specified in the declared_type field.
627 fprintf_filtered (stream
, "class ");
631 /* If not CPLUS_STRUCT, then assume it's a C struct */
632 fprintf_filtered (stream
, "struct ");
636 case TYPE_CODE_UNION
:
637 c_type_print_cv_qualifier (type
, stream
, 0, 1);
638 fprintf_filtered (stream
, "union ");
642 /* Print the tag if it exists.
643 * The HP aCC compiler emits
644 * a spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
645 * tag for unnamed struct/union/enum's, which we don't
648 if (TYPE_TAG_NAME (type
) != NULL
&&
649 strncmp(TYPE_TAG_NAME(type
), "{unnamed", 8))
651 fputs_filtered (TYPE_TAG_NAME (type
), stream
);
653 fputs_filtered (" ", stream
);
658 /* If we just printed a tag name, no need to print anything else. */
659 if (TYPE_TAG_NAME (type
) == NULL
)
660 fprintf_filtered (stream
, "{...}");
662 else if (show
> 0 || TYPE_TAG_NAME (type
) == NULL
)
664 cp_type_print_derivation_info (stream
, type
);
666 fprintf_filtered (stream
, "{\n");
667 if ((TYPE_NFIELDS (type
) == 0) && (TYPE_NFN_FIELDS (type
) == 0))
669 if (TYPE_FLAGS (type
) & TYPE_FLAG_STUB
)
670 fprintfi_filtered (level
+ 4, stream
, "<incomplete type>\n");
672 fprintfi_filtered (level
+ 4, stream
, "<no data fields>\n");
675 /* Start off with no specific section type, so we can print
676 one for the first field we find, and use that section type
677 thereafter until we find another type. */
679 section_type
= s_none
;
681 /* For a class, if all members are private, there's no need
682 for a "private:" label; similarly, for a struct or union
683 masquerading as a class, if all members are public, there's
684 no need for a "public:" label. */
686 if ((TYPE_DECLARED_TYPE (type
) == DECLARED_TYPE_CLASS
) ||
687 (TYPE_DECLARED_TYPE (type
) == DECLARED_TYPE_TEMPLATE
))
690 len
= TYPE_NFIELDS (type
);
691 for (i
= TYPE_N_BASECLASSES (type
); i
< len
; i
++)
692 if (!TYPE_FIELD_PRIVATE (type
, i
))
694 need_access_label
= 1;
698 if (!need_access_label
)
700 len2
= TYPE_NFN_FIELDS (type
);
701 for (j
= 0; j
< len2
; j
++)
703 len
= TYPE_FN_FIELDLIST_LENGTH (type
, j
);
704 for (i
= 0; i
< len
; i
++)
705 if (!TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type
, j
), i
))
707 need_access_label
= 1;
710 if (need_access_label
)
715 else if ((TYPE_DECLARED_TYPE (type
) == DECLARED_TYPE_STRUCT
) ||
716 (TYPE_DECLARED_TYPE (type
) == DECLARED_TYPE_UNION
))
719 len
= TYPE_NFIELDS (type
);
720 for (i
= TYPE_N_BASECLASSES (type
); i
< len
; i
++)
721 if (TYPE_FIELD_PRIVATE (type
, i
) || TYPE_FIELD_PROTECTED (type
, i
))
723 need_access_label
= 1;
727 if (!need_access_label
)
729 len2
= TYPE_NFN_FIELDS (type
);
730 for (j
= 0; j
< len2
; j
++)
733 len
= TYPE_FN_FIELDLIST_LENGTH (type
, j
);
734 for (i
= 0; i
< len
; i
++)
735 if (TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type
, j
), i
) ||
736 TYPE_FN_FIELD_PROTECTED (TYPE_FN_FIELDLIST1 (type
, j
), i
))
738 need_access_label
= 1;
741 if (need_access_label
)
747 /* If there is a base class for this type,
748 do not print the field that it occupies. */
750 len
= TYPE_NFIELDS (type
);
751 for (i
= TYPE_N_BASECLASSES (type
); i
< len
; i
++)
754 /* Don't print out virtual function table. */
755 /* HP ANSI C++ case */
756 if (TYPE_HAS_VTABLE(type
) && (STREQN (TYPE_FIELD_NAME (type
, i
), "__vfp", 5)))
758 /* Other compilers */
759 /* pai:: FIXME : check for has_vtable < 0 */
760 if (STREQN (TYPE_FIELD_NAME (type
, i
), "_vptr", 5)
761 && is_cplus_marker ((TYPE_FIELD_NAME (type
, i
))[5]))
764 /* If this is a C++ class we can print the various C++ section
767 if (HAVE_CPLUS_STRUCT (type
) && need_access_label
)
769 if (TYPE_FIELD_PROTECTED (type
, i
))
771 if (section_type
!= s_protected
)
773 section_type
= s_protected
;
774 fprintfi_filtered (level
+ 2, stream
,
778 else if (TYPE_FIELD_PRIVATE (type
, i
))
780 if (section_type
!= s_private
)
782 section_type
= s_private
;
783 fprintfi_filtered (level
+ 2, stream
, "private:\n");
788 if (section_type
!= s_public
)
790 section_type
= s_public
;
791 fprintfi_filtered (level
+ 2, stream
, "public:\n");
796 print_spaces_filtered (level
+ 4, stream
);
797 if (TYPE_FIELD_STATIC (type
, i
))
799 fprintf_filtered (stream
, "static ");
801 c_print_type (TYPE_FIELD_TYPE (type
, i
),
802 TYPE_FIELD_NAME (type
, i
),
803 stream
, show
- 1, level
+ 4);
804 if (!TYPE_FIELD_STATIC (type
, i
)
805 && TYPE_FIELD_PACKED (type
, i
))
807 /* It is a bitfield. This code does not attempt
808 to look at the bitpos and reconstruct filler,
809 unnamed fields. This would lead to misleading
810 results if the compiler does not put out fields
811 for such things (I don't know what it does). */
812 fprintf_filtered (stream
, " : %d",
813 TYPE_FIELD_BITSIZE (type
, i
));
815 fprintf_filtered (stream
, ";\n");
818 /* If there are both fields and methods, put a space between. */
819 len
= TYPE_NFN_FIELDS (type
);
820 if (len
&& section_type
!= s_none
)
821 fprintf_filtered (stream
, "\n");
823 /* C++: print out the methods */
824 for (i
= 0; i
< len
; i
++)
826 struct fn_field
*f
= TYPE_FN_FIELDLIST1 (type
, i
);
827 int j
, len2
= TYPE_FN_FIELDLIST_LENGTH (type
, i
);
828 char *method_name
= TYPE_FN_FIELDLIST_NAME (type
, i
);
829 char *name
= type_name_no_tag (type
);
830 int is_constructor
= name
&& STREQ(method_name
, name
);
831 for (j
= 0; j
< len2
; j
++)
833 char *physname
= TYPE_FN_FIELD_PHYSNAME (f
, j
);
834 int is_full_physname_constructor
=
835 ((physname
[0] == '_' && physname
[1] == '_'
836 && strchr ("0123456789Qt", physname
[2]))
837 || STREQN (physname
, "__ct__", 6)
838 || DESTRUCTOR_PREFIX_P (physname
)
839 || STREQN (physname
, "__dt__", 6));
842 if (TYPE_FN_FIELD_PROTECTED (f
, j
))
844 if (section_type
!= s_protected
)
846 section_type
= s_protected
;
847 fprintfi_filtered (level
+ 2, stream
,
851 else if (TYPE_FN_FIELD_PRIVATE (f
, j
))
853 if (section_type
!= s_private
)
855 section_type
= s_private
;
856 fprintfi_filtered (level
+ 2, stream
, "private:\n");
861 if (section_type
!= s_public
)
863 section_type
= s_public
;
864 fprintfi_filtered (level
+ 2, stream
, "public:\n");
868 print_spaces_filtered (level
+ 4, stream
);
869 if (TYPE_FN_FIELD_VIRTUAL_P (f
, j
))
870 fprintf_filtered (stream
, "virtual ");
871 else if (TYPE_FN_FIELD_STATIC_P (f
, j
))
872 fprintf_filtered (stream
, "static ");
873 if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f
, j
)) == 0)
875 /* Keep GDB from crashing here. */
876 fprintf_filtered (stream
, "<undefined type> %s;\n",
877 TYPE_FN_FIELD_PHYSNAME (f
, j
));
880 else if (!is_constructor
&& /* constructors don't have declared types */
881 !is_full_physname_constructor
&& /* " " */
882 !strstr (method_name
, "operator ")) /* Not a type conversion operator */
883 /* (note space -- other operators don't have it) */
885 type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f
, j
)),
887 fputs_filtered (" ", stream
);
889 if (TYPE_FN_FIELD_STUB (f
, j
))
890 /* Build something we can demangle. */
891 mangled_name
= gdb_mangle_name (type
, i
, j
);
893 mangled_name
= TYPE_FN_FIELD_PHYSNAME (f
, j
);
896 cplus_demangle (mangled_name
,
897 DMGL_ANSI
| DMGL_PARAMS
);
898 if (demangled_name
== NULL
)
900 /* in some cases (for instance with the HP demangling),
901 if a function has more than 10 arguments,
902 the demangling will fail.
903 Let's try to reconstruct the function signature from
904 the symbol information */
905 if (!TYPE_FN_FIELD_STUB (f
, j
))
906 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f
, j
), "",
908 TYPE_FN_FIELD_STATIC_P (f
, j
),
911 fprintf_filtered (stream
, "<badly mangled name '%s'>",
917 char *demangled_no_class
= demangled_name
;
919 while (p
= strchr (demangled_no_class
, ':'))
921 demangled_no_class
= p
;
922 if (*++demangled_no_class
== ':')
923 ++demangled_no_class
;
925 /* get rid of the static word appended by the demangler */
926 p
= strstr (demangled_no_class
, " static");
929 int length
= p
- demangled_no_class
;
930 demangled_no_static
= (char *) xmalloc (length
+ 1);
931 strncpy (demangled_no_static
, demangled_no_class
, length
);
932 *(demangled_no_static
+ length
) = '\0';
933 fputs_filtered (demangled_no_static
, stream
);
934 free (demangled_no_static
);
937 fputs_filtered (demangled_no_class
, stream
);
938 free (demangled_name
);
941 if (TYPE_FN_FIELD_STUB (f
, j
))
944 fprintf_filtered (stream
, ";\n");
948 if (TYPE_LOCALTYPE_PTR (type
) && show
>= 0)
949 fprintfi_filtered (level
, stream
, " (Local at %s:%d)\n",
950 TYPE_LOCALTYPE_FILE (type
),
951 TYPE_LOCALTYPE_LINE (type
));
953 fprintfi_filtered (level
, stream
, "}");
955 if (TYPE_CODE(type
) == TYPE_CODE_TEMPLATE
)
960 c_type_print_cv_qualifier (type
, stream
, 0, 1);
961 /* HP C supports sized enums */
962 if (hp_som_som_object_present
)
963 switch (TYPE_LENGTH (type
))
966 fputs_filtered ("char ", stream
);
969 fputs_filtered ("short ", stream
);
974 fprintf_filtered (stream
, "enum ");
975 /* Print the tag name if it exists.
976 * Fix for CHFts22718 (RT): The aCC compiler emits
977 * a spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
978 * tag for unnamed struct/union/enum's, which we don't
981 if (TYPE_TAG_NAME (type
) != NULL
&&
982 strncmp(TYPE_TAG_NAME(type
), "{unnamed", 8))
984 fputs_filtered (TYPE_TAG_NAME (type
), stream
);
986 fputs_filtered (" ", stream
);
992 /* If we just printed a tag name, no need to print anything else. */
993 if (TYPE_TAG_NAME (type
) == NULL
)
994 fprintf_filtered (stream
, "{...}");
996 else if (show
> 0 || TYPE_TAG_NAME (type
) == NULL
)
998 fprintf_filtered (stream
, "{");
999 len
= TYPE_NFIELDS (type
);
1001 for (i
= 0; i
< len
; i
++)
1004 if (i
) fprintf_filtered (stream
, ", ");
1006 fputs_filtered (TYPE_FIELD_NAME (type
, i
), stream
);
1007 if (lastval
!= TYPE_FIELD_BITPOS (type
, i
))
1009 fprintf_filtered (stream
, " = %d", TYPE_FIELD_BITPOS (type
, i
));
1010 lastval
= TYPE_FIELD_BITPOS (type
, i
);
1014 fprintf_filtered (stream
, "}");
1018 case TYPE_CODE_VOID
:
1019 fprintf_filtered (stream
, "void");
1022 case TYPE_CODE_UNDEF
:
1023 fprintf_filtered (stream
, "struct <unknown>");
1026 case TYPE_CODE_ERROR
:
1027 fprintf_filtered (stream
, "<unknown type>");
1030 case TYPE_CODE_RANGE
:
1031 /* This should not occur */
1032 fprintf_filtered (stream
, "<range type>");
1035 case TYPE_CODE_TEMPLATE
:
1036 /* Called on "ptype t" where "t" is a template.
1037 * Prints the template header (with args), e.g.:
1038 * template <class T1, class T2> class "
1039 * and then merges with the struct/union/class code to
1040 * print the rest of the definition.
1042 c_type_print_cv_qualifier (type
, stream
, 0, 1);
1043 fprintf_filtered (stream
, "template <");
1044 for (i
= 0; i
< TYPE_NTEMPLATE_ARGS(type
); i
++) {
1045 struct template_arg templ_arg
;
1046 templ_arg
= TYPE_TEMPLATE_ARG(type
, i
);
1047 fprintf_filtered (stream
, "class %s", templ_arg
.name
);
1048 if (i
< TYPE_NTEMPLATE_ARGS(type
)-1)
1049 fprintf_filtered (stream
, ", ");
1051 fprintf_filtered (stream
, "> class ");
1052 /* Yuck, factor this out to a subroutine so we can call
1053 * it and return to the point marked with the "goback:" label... - RT
1057 if (TYPE_NINSTANTIATIONS(type
) > 0) {
1058 fprintf_filtered (stream
, "\ntemplate instantiations:\n");
1059 for (i
= 0; i
< TYPE_NINSTANTIATIONS(type
); i
++) {
1060 fprintf_filtered(stream
, " ");
1061 c_type_print_base (TYPE_INSTANTIATION(type
, i
), stream
, 0, level
);
1062 if (i
< TYPE_NINSTANTIATIONS(type
)-1) fprintf_filtered(stream
, "\n");
1068 /* Handle types not explicitly handled by the other cases,
1069 such as fundamental types. For these, just print whatever
1070 the type name is, as recorded in the type itself. If there
1071 is no type name, then complain. */
1072 if (TYPE_NAME (type
) != NULL
)
1074 c_type_print_cv_qualifier (type
, stream
, 0, 1);
1075 fputs_filtered (TYPE_NAME (type
), stream
);
1079 /* At least for dump_symtab, it is important that this not be
1081 fprintf_filtered (stream
, "<invalid type code %d>",