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"
40 c_type_print_args
PARAMS ((struct type
*, GDB_FILE
*));
43 c_type_print_varspec_suffix
PARAMS ((struct type
*, GDB_FILE
*, int, int, int));
46 cp_type_print_derivation_info
PARAMS ((GDB_FILE
*, struct type
*));
49 c_type_print_varspec_prefix
PARAMS ((struct type
*, GDB_FILE
*, int, int));
52 c_type_print_base
PARAMS ((struct type
*, GDB_FILE
*, int, int));
55 /* Print a description of a type in the format of a
56 typedef for the current language.
57 NEW is the new name for a type TYPE. */
60 c_typedef_print (type
, new, stream
)
65 switch (current_language
->la_language
)
70 fprintf_filtered(stream
, "typedef ");
71 type_print(type
,"",stream
,0);
72 if(TYPE_NAME ((SYMBOL_TYPE (new))) == 0
73 || !STREQ (TYPE_NAME ((SYMBOL_TYPE (new))), SYMBOL_NAME (new)))
74 fprintf_filtered(stream
, " %s", SYMBOL_SOURCE_NAME(new));
79 fprintf_filtered(stream
, "TYPE ");
80 if(!TYPE_NAME(SYMBOL_TYPE(new)) ||
81 !STREQ (TYPE_NAME(SYMBOL_TYPE(new)), SYMBOL_NAME(new)))
82 fprintf_filtered(stream
, "%s = ", SYMBOL_SOURCE_NAME(new));
84 fprintf_filtered(stream
, "<builtin> = ");
85 type_print(type
,"",stream
,0);
90 error ("Missing Chill support in function c_typedef_print."); /*FIXME*/
93 error("Language not supported.");
95 fprintf_filtered(stream
, ";\n");
99 /* LEVEL is the depth to indent lines by. */
102 c_print_type (type
, varstring
, stream
, show
, level
)
109 register enum type_code code
;
112 c_type_print_base (type
, stream
, show
, level
);
113 code
= TYPE_CODE (type
);
114 if ((varstring
!= NULL
&& *varstring
!= '\0')
116 /* Need a space if going to print stars or brackets;
117 but not if we will print just a type name. */
118 ((show
> 0 || TYPE_NAME (type
) == 0)
120 (code
== TYPE_CODE_PTR
|| code
== TYPE_CODE_FUNC
121 || code
== TYPE_CODE_METHOD
122 || code
== TYPE_CODE_ARRAY
123 || code
== TYPE_CODE_MEMBER
124 || code
== TYPE_CODE_REF
)))
125 fputs_filtered (" ", stream
);
126 c_type_print_varspec_prefix (type
, stream
, show
, 0);
128 fputs_filtered (varstring
, stream
);
130 /* For demangled function names, we have the arglist as part of the name,
131 so don't print an additional pair of ()'s */
133 demangled_args
= strchr(varstring
, '(') != NULL
;
134 c_type_print_varspec_suffix (type
, stream
, show
, 0, demangled_args
);
138 /* Print the C++ method arguments ARGS to the file STREAM. */
141 cp_type_print_method_args (args
, prefix
, varstring
, staticp
, stream
)
150 fprintf_symbol_filtered (stream
, prefix
, language_cplus
, DMGL_ANSI
);
151 fprintf_symbol_filtered (stream
, varstring
, language_cplus
, DMGL_ANSI
);
152 fputs_filtered (" (", stream
);
153 if (args
&& args
[!staticp
] && args
[!staticp
]->code
!= TYPE_CODE_VOID
)
155 i
= !staticp
; /* skip the class variable */
158 type_print (args
[i
++], "", stream
, 0);
161 fprintf_filtered (stream
, " ...");
164 else if (args
[i
]->code
!= TYPE_CODE_VOID
)
166 fprintf_filtered (stream
, ", ");
171 fprintf_filtered (stream
, ")");
174 /* If TYPE is a derived type, then print out derivation information.
175 Print only the actual base classes of this type, not the base classes
176 of the base classes. I.E. for the derivation hierarchy:
179 class B : public A {int b; };
180 class C : public B {int c; };
182 Print the type of class C as:
188 Not as the following (like gdb used to), which is not legal C++ syntax for
189 derived types and may be confused with the multiple inheritance form:
191 class C : public B : public A {
195 In general, gdb should try to print the types as closely as possible to
196 the form that they appear in the source code. */
199 cp_type_print_derivation_info (stream
, type
)
206 for (i
= 0; i
< TYPE_N_BASECLASSES (type
); i
++)
208 fputs_filtered (i
== 0 ? ": " : ", ", stream
);
209 fprintf_filtered (stream
, "%s%s ",
210 BASETYPE_VIA_PUBLIC (type
, i
) ? "public" : "private",
211 BASETYPE_VIA_VIRTUAL(type
, i
) ? " virtual" : "");
212 name
= type_name_no_tag (TYPE_BASECLASS (type
, i
));
213 fprintf_filtered (stream
, "%s", name
? name
: "(null)");
217 fputs_filtered (" ", stream
);
221 /* Print any asterisks or open-parentheses needed before the
222 variable name (to describe its type).
224 On outermost call, pass 0 for PASSED_A_PTR.
225 On outermost call, SHOW > 0 means should ignore
226 any typename for TYPE and show its details.
227 SHOW is always zero on recursive calls. */
230 c_type_print_varspec_prefix (type
, stream
, show
, passed_a_ptr
)
240 if (TYPE_NAME (type
) && show
<= 0)
245 switch (TYPE_CODE (type
))
248 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 1);
249 fprintf_filtered (stream
, "*");
252 case TYPE_CODE_MEMBER
:
254 fprintf_filtered (stream
, "(");
255 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
256 fprintf_filtered (stream
, " ");
257 name
= type_name_no_tag (TYPE_DOMAIN_TYPE (type
));
259 fputs_filtered (name
, stream
);
261 c_type_print_base (TYPE_DOMAIN_TYPE (type
), stream
, 0, passed_a_ptr
);
262 fprintf_filtered (stream
, "::");
265 case TYPE_CODE_METHOD
:
267 fprintf_unfiltered (stream
, "(");
268 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
271 fprintf_filtered (stream
, " ");
272 c_type_print_base (TYPE_DOMAIN_TYPE (type
), stream
, 0, passed_a_ptr
);
273 fprintf_filtered (stream
, "::");
278 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 1);
279 fprintf_filtered (stream
, "&");
283 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
285 fprintf_filtered (stream
, "(");
288 case TYPE_CODE_ARRAY
:
289 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type
), stream
, 0, 0);
291 fprintf_filtered (stream
, "(");
294 case TYPE_CODE_UNDEF
:
295 case TYPE_CODE_STRUCT
:
296 case TYPE_CODE_UNION
:
301 case TYPE_CODE_ERROR
:
305 case TYPE_CODE_RANGE
:
306 case TYPE_CODE_STRING
:
307 case TYPE_CODE_BITSTRING
:
308 /* These types need no prefix. They are listed here so that
309 gcc -Wall will reveal any types that haven't been handled. */
315 c_type_print_args (type
, stream
)
322 fprintf_filtered (stream
, "(");
323 args
= TYPE_ARG_TYPES (type
);
328 fprintf_filtered (stream
, "...");
333 args
[i
] != NULL
&& args
[i
]->code
!= TYPE_CODE_VOID
;
336 c_print_type (args
[i
], "", stream
, -1, 0);
337 if (args
[i
+1] == NULL
)
339 fprintf_filtered (stream
, "...");
341 else if (args
[i
+1]->code
!= TYPE_CODE_VOID
)
343 fprintf_filtered (stream
, ",");
349 fprintf_filtered (stream
, ")");
352 /* Print any array sizes, function arguments or close parentheses
353 needed after the variable name (to describe its type).
354 Args work like c_type_print_varspec_prefix. */
357 c_type_print_varspec_suffix (type
, stream
, show
, passed_a_ptr
, demangled_args
)
367 if (TYPE_NAME (type
) && show
<= 0)
372 switch (TYPE_CODE (type
))
374 case TYPE_CODE_ARRAY
:
376 fprintf_filtered (stream
, ")");
378 fprintf_filtered (stream
, "[");
379 if (TYPE_LENGTH (type
) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type
)) > 0)
380 fprintf_filtered (stream
, "%d",
382 / TYPE_LENGTH (TYPE_TARGET_TYPE (type
))));
383 fprintf_filtered (stream
, "]");
385 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 0, 0);
388 case TYPE_CODE_MEMBER
:
390 fprintf_filtered (stream
, ")");
391 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 0, 0);
394 case TYPE_CODE_METHOD
:
396 fprintf_filtered (stream
, ")");
397 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 0, 0);
400 c_type_print_args (type
, stream
);
406 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0, 1, 0);
411 fprintf_filtered (stream
, ")");
413 fprintf_filtered (stream
, "()");
414 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type
), stream
, 0,
418 case TYPE_CODE_UNDEF
:
419 case TYPE_CODE_STRUCT
:
420 case TYPE_CODE_UNION
:
425 case TYPE_CODE_ERROR
:
429 case TYPE_CODE_RANGE
:
430 case TYPE_CODE_STRING
:
431 case TYPE_CODE_BITSTRING
:
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 negative 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 zero means just print the type name or struct tag if there is one.
448 If there is no name, print something sensible but not as concise like
449 "struct {int x; int y;}".
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 check_stub_type (type
);
491 switch (TYPE_CODE (type
))
493 case TYPE_CODE_ARRAY
:
495 case TYPE_CODE_MEMBER
:
498 case TYPE_CODE_METHOD
:
499 c_type_print_base (TYPE_TARGET_TYPE (type
), stream
, show
, level
);
502 case TYPE_CODE_STRUCT
:
503 if (HAVE_CPLUS_STRUCT (type
))
505 fprintf_filtered (stream
, "class ");
509 fprintf_filtered (stream
, "struct ");
513 case TYPE_CODE_UNION
:
514 fprintf_filtered (stream
, "union ");
517 if (TYPE_TAG_NAME (type
) != NULL
)
519 fputs_filtered (TYPE_TAG_NAME (type
), stream
);
521 fputs_filtered (" ", stream
);
526 /* If we just printed a tag name, no need to print anything else. */
527 if (TYPE_TAG_NAME (type
) == NULL
)
528 fprintf_filtered (stream
, "{...}");
530 else if (show
> 0 || TYPE_TAG_NAME (type
) == NULL
)
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_unfiltered (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 char *demangled_no_class
=
689 strchr (demangled_name
, ':');
691 if (demangled_no_class
== NULL
)
692 demangled_no_class
= demangled_name
;
695 if (*++demangled_no_class
== ':')
696 ++demangled_no_class
;
698 fputs_filtered (demangled_no_class
, stream
);
699 free (demangled_name
);
703 else if (TYPE_FN_FIELD_PHYSNAME (f
, j
)[0] == '_'
704 && TYPE_FN_FIELD_PHYSNAME (f
, j
)[1] == CPLUS_MARKER
)
705 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f
, j
) + 1,
706 "~", method_name
, 0, stream
);
708 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f
, j
), "",
710 TYPE_FN_FIELD_STATIC_P (f
, j
),
713 fprintf_filtered (stream
, ";\n");
717 fprintfi_filtered (level
, stream
, "}");
722 fprintf_filtered (stream
, "enum ");
723 if (TYPE_TAG_NAME (type
) != NULL
)
725 fputs_filtered (TYPE_TAG_NAME (type
), stream
);
727 fputs_filtered (" ", stream
);
733 /* If we just printed a tag name, no need to print anything else. */
734 if (TYPE_TAG_NAME (type
) == NULL
)
735 fprintf_filtered (stream
, "{...}");
737 else if (show
> 0 || TYPE_TAG_NAME (type
) == NULL
)
739 fprintf_filtered (stream
, "{");
740 len
= TYPE_NFIELDS (type
);
742 for (i
= 0; i
< len
; i
++)
745 if (i
) fprintf_filtered (stream
, ", ");
747 fputs_filtered (TYPE_FIELD_NAME (type
, i
), stream
);
748 if (lastval
!= TYPE_FIELD_BITPOS (type
, i
))
750 fprintf_filtered (stream
, " = %d", TYPE_FIELD_BITPOS (type
, i
));
751 lastval
= TYPE_FIELD_BITPOS (type
, i
);
755 fprintf_filtered (stream
, "}");
760 fprintf_filtered (stream
, "void");
763 case TYPE_CODE_UNDEF
:
764 fprintf_filtered (stream
, "struct <unknown>");
767 case TYPE_CODE_ERROR
:
768 fprintf_filtered (stream
, "<unknown type>");
771 case TYPE_CODE_RANGE
:
772 /* This should not occur */
773 fprintf_filtered (stream
, "<range type>");
777 /* Handle types not explicitly handled by the other cases,
778 such as fundamental types. For these, just print whatever
779 the type name is, as recorded in the type itself. If there
780 is no type name, then complain. */
781 if (TYPE_NAME (type
) != NULL
)
783 fputs_filtered (TYPE_NAME (type
), stream
);
787 /* At least for dump_symtab, it is important that this not be
789 fprintf_filtered (stream
, "<invalid type code %d>",