1 /* Support for printing C and C++ types for GDB, the GNU debugger.
2 Copyright 1986, 1988, 1989, 1991 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 2 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, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
22 #include "bfd.h" /* Binary File Description */
25 #include "expression.h"
34 #include "typeprint.h"
39 extern int demangle
; /* whether to print C++ syms raw or source-form */
42 c_type_print_args
PARAMS ((struct type
*, FILE *));
45 c_type_print_varspec_suffix
PARAMS ((struct type
*, FILE *, int, int, int));
48 cp_type_print_derivation_info
PARAMS ((FILE *, struct type
*));
51 c_type_print_varspec_prefix
PARAMS ((struct type
*, FILE *, int, int));
54 c_type_print_base
PARAMS ((struct type
*, FILE *, int, int));
57 /* Print a description of a type in the format of a
58 typedef for the current language.
59 NEW is the new name for a type TYPE. */
62 c_typedef_print (type
, new, stream
)
67 switch (current_language
->la_language
)
72 fprintf_filtered(stream
, "typedef ");
73 type_print(type
,"",stream
,0);
74 if(TYPE_NAME ((SYMBOL_TYPE (new))) == 0
75 || !STREQ (TYPE_NAME ((SYMBOL_TYPE (new))), SYMBOL_NAME (new)))
76 fprintf_filtered(stream
, " %s", SYMBOL_SOURCE_NAME(new));
81 fprintf_filtered(stream
, "TYPE ");
82 if(!TYPE_NAME(SYMBOL_TYPE(new)) ||
83 !STREQ (TYPE_NAME(SYMBOL_TYPE(new)), SYMBOL_NAME(new)))
84 fprintf_filtered(stream
, "%s = ", SYMBOL_SOURCE_NAME(new));
86 fprintf_filtered(stream
, "<builtin> = ");
87 type_print(type
,"",stream
,0);
92 error ("Missing Chill support in function c_typedef_print."); /*FIXME*/
95 error("Language not supported.");
97 fprintf_filtered(stream
, ";\n");
101 /* LEVEL is the depth to indent lines by. */
104 c_print_type (type
, varstring
, stream
, show
, level
)
111 register enum type_code code
;
114 c_type_print_base (type
, stream
, show
, level
);
115 code
= TYPE_CODE (type
);
116 if ((varstring
!= NULL
&& *varstring
!= '\0')
118 /* Need a space if going to print stars or brackets;
119 but not if we will print just a type name. */
120 ((show
> 0 || TYPE_NAME (type
) == 0)
122 (code
== TYPE_CODE_PTR
|| code
== TYPE_CODE_FUNC
123 || code
== TYPE_CODE_METHOD
124 || code
== TYPE_CODE_ARRAY
125 || code
== TYPE_CODE_MEMBER
126 || code
== TYPE_CODE_REF
)))
127 fputs_filtered (" ", stream
);
128 c_type_print_varspec_prefix (type
, stream
, show
, 0);
130 fputs_filtered (varstring
, stream
);
132 /* For demangled function names, we have the arglist as part of the name,
133 so don't print an additional pair of ()'s */
135 demangled_args
= varstring
[strlen(varstring
) - 1] == ')';
136 c_type_print_varspec_suffix (type
, stream
, show
, 0, demangled_args
);
140 /* Print the C++ method arguments ARGS to the file STREAM. */
143 cp_type_print_method_args (args
, prefix
, varstring
, staticp
, stream
)
152 fprintf_symbol_filtered (stream
, prefix
, language_cplus
, DMGL_ANSI
);
153 fprintf_symbol_filtered (stream
, varstring
, language_cplus
, DMGL_ANSI
);
154 fputs_filtered (" (", stream
);
155 if (args
&& args
[!staticp
] && args
[!staticp
]->code
!= TYPE_CODE_VOID
)
157 i
= !staticp
; /* skip the class variable */
160 type_print (args
[i
++], "", stream
, 0);
163 fprintf_filtered (stream
, " ...");
166 else if (args
[i
]->code
!= TYPE_CODE_VOID
)
168 fprintf_filtered (stream
, ", ");
173 fprintf_filtered (stream
, ")");
176 /* If TYPE is a derived type, then print out derivation information.
177 Print only the actual base classes of this type, not the base classes
178 of the base classes. I.E. for the derivation hierarchy:
181 class B : public A {int b; };
182 class C : public B {int c; };
184 Print the type of class C as:
190 Not as the following (like gdb used to), which is not legal C++ syntax for
191 derived types and may be confused with the multiple inheritance form:
193 class C : public B : public A {
197 In general, gdb should try to print the types as closely as possible to
198 the form that they appear in the source code. */
201 cp_type_print_derivation_info (stream
, type
)
208 for (i
= 0; i
< TYPE_N_BASECLASSES (type
); i
++)
210 fputs_filtered (i
== 0 ? ": " : ", ", stream
);
211 fprintf_filtered (stream
, "%s%s ",
212 BASETYPE_VIA_PUBLIC (type
, i
) ? "public" : "private",
213 BASETYPE_VIA_VIRTUAL(type
, i
) ? " virtual" : "");
214 name
= type_name_no_tag (TYPE_BASECLASS (type
, i
));
215 fprintf_filtered (stream
, "%s", name
? name
: "(null)");
219 fputs_filtered (" ", stream
);
223 /* Print any asterisks or open-parentheses needed before the
224 variable name (to describe its type).
226 On outermost call, pass 0 for PASSED_A_PTR.
227 On outermost call, SHOW > 0 means should ignore
228 any typename for TYPE and show its details.
229 SHOW is always zero on recursive calls. */
232 c_type_print_varspec_prefix (type
, stream
, show
, passed_a_ptr
)
242 if (TYPE_NAME (type
) && show
<= 0)
247 switch (TYPE_CODE (type
))
250 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 1);
251 fprintf_filtered (stream
, "*");
254 case TYPE_CODE_MEMBER
:
256 fprintf_filtered (stream
, "(");
257 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
258 fprintf_filtered (stream
, " ");
259 name
= type_name_no_tag (TYPE_DOMAIN_TYPE (type
));
261 fputs_filtered (name
, stream
);
263 c_type_print_base (TYPE_DOMAIN_TYPE (type
), stream
, 0, passed_a_ptr
);
264 fprintf_filtered (stream
, "::");
267 case TYPE_CODE_METHOD
:
269 fprintf (stream
, "(");
270 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
273 fprintf_filtered (stream
, " ");
274 c_type_print_base (TYPE_DOMAIN_TYPE (type
), stream
, 0, passed_a_ptr
);
275 fprintf_filtered (stream
, "::");
280 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 1);
281 fprintf_filtered (stream
, "&");
285 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
287 fprintf_filtered (stream
, "(");
290 case TYPE_CODE_ARRAY
:
291 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
293 fprintf_filtered (stream
, "(");
296 case TYPE_CODE_UNDEF
:
297 case TYPE_CODE_STRUCT
:
298 case TYPE_CODE_UNION
:
303 case TYPE_CODE_ERROR
:
307 case TYPE_CODE_RANGE
:
308 case TYPE_CODE_STRING
:
309 /* These types need no prefix. They are listed here so that
310 gcc -Wall will reveal any types that haven't been handled. */
316 c_type_print_args (type
, stream
)
323 fprintf_filtered (stream
, "(");
324 args
= TYPE_ARG_TYPES (type
);
329 fprintf_filtered (stream
, "...");
334 args
[i
] != NULL
&& args
[i
]->code
!= TYPE_CODE_VOID
;
337 c_print_type (args
[i
], "", stream
, -1, 0);
338 if (args
[i
+1] == NULL
)
340 fprintf_filtered (stream
, "...");
342 else if (args
[i
+1]->code
!= TYPE_CODE_VOID
)
344 fprintf_filtered (stream
, ",");
350 fprintf_filtered (stream
, ")");
353 /* Print any array sizes, function arguments or close parentheses
354 needed after the variable name (to describe its type).
355 Args work like c_type_print_varspec_prefix. */
358 c_type_print_varspec_suffix (type
, stream
, show
, passed_a_ptr
, demangled_args
)
368 if (TYPE_NAME (type
) && show
<= 0)
373 switch (TYPE_CODE (type
))
375 case TYPE_CODE_ARRAY
:
377 fprintf_filtered (stream
, ")");
379 fprintf_filtered (stream
, "[");
380 if (TYPE_LENGTH (type
) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type
)) > 0)
381 fprintf_filtered (stream
, "%d",
383 / TYPE_LENGTH (TYPE_TARGET_TYPE (type
))));
384 fprintf_filtered (stream
, "]");
386 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 0, 0);
389 case TYPE_CODE_MEMBER
:
391 fprintf_filtered (stream
, ")");
392 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 0, 0);
395 case TYPE_CODE_METHOD
:
397 fprintf_filtered (stream
, ")");
398 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 0, 0);
401 c_type_print_args (type
, stream
);
407 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 1, 0);
411 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0,
414 fprintf_filtered (stream
, ")");
416 fprintf_filtered (stream
, "()");
419 case TYPE_CODE_UNDEF
:
420 case TYPE_CODE_STRUCT
:
421 case TYPE_CODE_UNION
:
426 case TYPE_CODE_ERROR
:
430 case TYPE_CODE_RANGE
:
431 case TYPE_CODE_STRING
:
432 /* These types do not need a suffix. They are listed so that
433 gcc -Wall will report types that may not have been considered. */
438 /* Print the name of the type (or the ultimate pointer target,
439 function value or array element), or the description of a
442 SHOW positive means print details about the type (e.g. enum values),
443 and print structure elements passing SHOW - 1 for show.
444 SHOW zero means just print the type name or struct tag if there is one.
445 If there is no name, print something sensible but concise like
447 SHOW negative means the same things as SHOW zero. The difference is that
448 zero is used for printing structure elements and -1 is used for the
449 "whatis" command. But I don't see any need to distinguish.
451 LEVEL is the number of spaces to indent by.
452 We increase it for some recursive calls. */
455 c_type_print_base (type
, stream
, show
, level
)
463 register int lastval
;
465 char *demangled_name
;
466 enum {s_none
, s_public
, s_private
, s_protected
} section_type
;
472 fputs_filtered ("<type unknown>", stream
);
476 /* When SHOW is zero or less, and there is a valid type name, then always
477 just print the type name directly from the type. */
478 /* If we have "typedef struct foo {. . .} bar;" do we want to print it
479 as "struct foo" or as "bar"? Pick the latter, because C++ folk tend
480 to expect things like "class5 *foo" rather than "struct class5 *foo". */
483 && TYPE_NAME (type
) != NULL
)
485 fputs_filtered (TYPE_NAME (type
), stream
);
489 switch (TYPE_CODE (type
))
491 case TYPE_CODE_ARRAY
:
493 case TYPE_CODE_MEMBER
:
496 case TYPE_CODE_METHOD
:
497 c_type_print_base (TYPE_TARGET_TYPE (type
), stream
, show
, level
);
500 case TYPE_CODE_STRUCT
:
501 if (HAVE_CPLUS_STRUCT (type
))
503 fprintf_filtered (stream
, "class ");
507 fprintf_filtered (stream
, "struct ");
511 case TYPE_CODE_UNION
:
512 fprintf_filtered (stream
, "union ");
515 if (TYPE_TAG_NAME (type
) != NULL
)
517 fputs_filtered (TYPE_TAG_NAME (type
), stream
);
519 fputs_filtered (" ", stream
);
524 /* If we just printed a tag name, no need to print anything else. */
525 if (TYPE_TAG_NAME (type
) == NULL
)
526 fprintf_filtered (stream
, "{...}");
530 check_stub_type (type
);
532 cp_type_print_derivation_info (stream
, type
);
534 fprintf_filtered (stream
, "{\n");
535 if ((TYPE_NFIELDS (type
) == 0) && (TYPE_NFN_FIELDS (type
) == 0))
537 if (TYPE_FLAGS (type
) & TYPE_FLAG_STUB
)
538 fprintfi_filtered (level
+ 4, stream
, "<incomplete type>\n");
540 fprintfi_filtered (level
+ 4, stream
, "<no data fields>\n");
543 /* Start off with no specific section type, so we can print
544 one for the first field we find, and use that section type
545 thereafter until we find another type. */
547 section_type
= s_none
;
549 /* If there is a base class for this type,
550 do not print the field that it occupies. */
552 len
= TYPE_NFIELDS (type
);
553 for (i
= TYPE_N_BASECLASSES (type
); i
< len
; i
++)
556 /* Don't print out virtual function table. */
557 if ((TYPE_FIELD_NAME (type
, i
))[5] == CPLUS_MARKER
&&
558 !strncmp (TYPE_FIELD_NAME (type
, i
), "_vptr", 5))
561 /* If this is a C++ class we can print the various C++ section
564 if (HAVE_CPLUS_STRUCT (type
))
566 if (TYPE_FIELD_PROTECTED (type
, i
))
568 if (section_type
!= s_protected
)
570 section_type
= s_protected
;
571 fprintfi_filtered (level
+ 2, stream
,
575 else if (TYPE_FIELD_PRIVATE (type
, i
))
577 if (section_type
!= s_private
)
579 section_type
= s_private
;
580 fprintfi_filtered (level
+ 2, stream
, "private:\n");
585 if (section_type
!= s_public
)
587 section_type
= s_public
;
588 fprintfi_filtered (level
+ 2, stream
, "public:\n");
593 print_spaces_filtered (level
+ 4, stream
);
594 if (TYPE_FIELD_STATIC (type
, i
))
596 fprintf_filtered (stream
, "static ");
598 c_print_type (TYPE_FIELD_TYPE (type
, i
),
599 TYPE_FIELD_NAME (type
, i
),
600 stream
, show
- 1, level
+ 4);
601 if (!TYPE_FIELD_STATIC (type
, i
)
602 && TYPE_FIELD_PACKED (type
, i
))
604 /* It is a bitfield. This code does not attempt
605 to look at the bitpos and reconstruct filler,
606 unnamed fields. This would lead to misleading
607 results if the compiler does not put out fields
608 for such things (I don't know what it does). */
609 fprintf_filtered (stream
, " : %d",
610 TYPE_FIELD_BITSIZE (type
, i
));
612 fprintf_filtered (stream
, ";\n");
615 /* If there are both fields and methods, put a space between. */
616 len
= TYPE_NFN_FIELDS (type
);
617 if (len
&& section_type
!= s_none
)
618 fprintf_filtered (stream
, "\n");
620 /* C++: print out the methods */
622 for (i
= 0; i
< len
; i
++)
624 struct fn_field
*f
= TYPE_FN_FIELDLIST1 (type
, i
);
625 int j
, len2
= TYPE_FN_FIELDLIST_LENGTH (type
, i
);
626 char *method_name
= TYPE_FN_FIELDLIST_NAME (type
, i
);
627 char *name
= type_name_no_tag (type
);
628 int is_constructor
= name
&& STREQ(method_name
, name
);
629 for (j
= 0; j
< len2
; j
++)
632 if (TYPE_FN_FIELD_PROTECTED (f
, j
))
634 if (section_type
!= s_protected
)
636 section_type
= s_protected
;
637 fprintfi_filtered (level
+ 2, stream
,
641 else if (TYPE_FN_FIELD_PRIVATE (f
, j
))
643 if (section_type
!= s_private
)
645 section_type
= s_private
;
646 fprintfi_filtered (level
+ 2, stream
, "private:\n");
651 if (section_type
!= s_public
)
653 section_type
= s_public
;
654 fprintfi_filtered (level
+ 2, stream
, "public:\n");
658 print_spaces_filtered (level
+ 4, stream
);
659 if (TYPE_FN_FIELD_VIRTUAL_P (f
, j
))
660 fprintf_filtered (stream
, "virtual ");
661 else if (TYPE_FN_FIELD_STATIC_P (f
, j
))
662 fprintf_filtered (stream
, "static ");
663 if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f
, j
)) == 0)
665 /* Keep GDB from crashing here. */
666 fprintf (stream
, "<undefined type> %s;\n",
667 TYPE_FN_FIELD_PHYSNAME (f
, j
));
670 else if (!is_constructor
)
672 type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f
, j
)),
674 fputs_filtered (" ", stream
);
676 if (TYPE_FN_FIELD_STUB (f
, j
))
678 /* Build something we can demangle. */
679 mangled_name
= gdb_mangle_name (type
, i
, j
);
681 cplus_demangle (mangled_name
,
682 DMGL_ANSI
| DMGL_PARAMS
);
683 if (demangled_name
== NULL
)
684 fprintf_filtered (stream
, "<badly mangled name %s>",
688 fprintf_filtered (stream
, "%s",
689 strchr (demangled_name
, ':') + 2);
690 free (demangled_name
);
694 else if (TYPE_FN_FIELD_PHYSNAME (f
, j
)[0] == '_'
695 && TYPE_FN_FIELD_PHYSNAME (f
, j
)[1] == CPLUS_MARKER
)
696 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f
, j
) + 1,
697 "~", method_name
, 0, stream
);
699 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f
, j
), "",
701 TYPE_FN_FIELD_STATIC_P (f
, j
),
704 fprintf_filtered (stream
, ";\n");
708 fprintfi_filtered (level
, stream
, "}");
713 fprintf_filtered (stream
, "enum ");
714 if (TYPE_TAG_NAME (type
) != NULL
)
716 fputs_filtered (TYPE_TAG_NAME (type
), stream
);
718 fputs_filtered (" ", stream
);
724 /* If we just printed a tag name, no need to print anything else. */
725 if (TYPE_TAG_NAME (type
) == NULL
)
726 fprintf_filtered (stream
, "{...}");
730 fprintf_filtered (stream
, "{");
731 len
= TYPE_NFIELDS (type
);
733 for (i
= 0; i
< len
; i
++)
736 if (i
) fprintf_filtered (stream
, ", ");
738 fputs_filtered (TYPE_FIELD_NAME (type
, i
), stream
);
739 if (lastval
!= TYPE_FIELD_BITPOS (type
, i
))
741 fprintf_filtered (stream
, " = %d", TYPE_FIELD_BITPOS (type
, i
));
742 lastval
= TYPE_FIELD_BITPOS (type
, i
);
746 fprintf_filtered (stream
, "}");
751 fprintf_filtered (stream
, "void");
754 case TYPE_CODE_UNDEF
:
755 fprintf_filtered (stream
, "struct <unknown>");
758 case TYPE_CODE_ERROR
:
759 fprintf_filtered (stream
, "<unknown type>");
762 case TYPE_CODE_RANGE
:
763 /* This should not occur */
764 fprintf_filtered (stream
, "<range type>");
768 /* Handle types not explicitly handled by the other cases,
769 such as fundamental types. For these, just print whatever
770 the type name is, as recorded in the type itself. If there
771 is no type name, then complain. */
772 if (TYPE_NAME (type
) != NULL
)
774 fputs_filtered (TYPE_NAME (type
), stream
);
778 /* At least for dump_symtab, it is important that this not be
780 fprintf_filtered (stream
, "<invalid type code %d>",