1 /* Support for printing C and C++ types for GDB, the GNU debugger.
2 Copyright 1986, 1988, 1989, 1991, 1993, 1994
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., 675 Mass Ave, Cambridge, MA 02139, USA. */
23 #include "bfd.h" /* Binary File Description */
26 #include "expression.h"
35 #include "typeprint.h"
42 c_type_print_args PARAMS ((struct type *, GDB_FILE *));
45 c_type_print_varspec_suffix PARAMS ((struct type *, GDB_FILE *, int, int, int));
48 cp_type_print_derivation_info PARAMS ((GDB_FILE *, struct type *));
51 c_type_print_varspec_prefix PARAMS ((struct type *, GDB_FILE *, int, int));
54 c_type_print_base PARAMS ((struct type *, GDB_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 fprintf_filtered(stream, "SYNMODE ");
93 if(!TYPE_NAME(SYMBOL_TYPE(new)) ||
94 !STREQ (TYPE_NAME(SYMBOL_TYPE(new)), SYMBOL_NAME(new)))
95 fprintf_filtered(stream, "%s = ", SYMBOL_SOURCE_NAME(new));
97 fprintf_filtered(stream, "<builtin> = ");
98 type_print(type,"",stream,0);
102 error("Language not supported.");
104 fprintf_filtered(stream, ";\n");
108 /* LEVEL is the depth to indent lines by. */
111 c_print_type (type, varstring, stream, show, level)
118 register enum type_code code;
121 c_type_print_base (type, stream, show, level);
122 code = TYPE_CODE (type);
123 if ((varstring != NULL && *varstring != '\0')
125 /* Need a space if going to print stars or brackets;
126 but not if we will print just a type name. */
127 ((show > 0 || TYPE_NAME (type) == 0)
129 (code == TYPE_CODE_PTR || code == TYPE_CODE_FUNC
130 || code == TYPE_CODE_METHOD
131 || code == TYPE_CODE_ARRAY
132 || code == TYPE_CODE_MEMBER
133 || code == TYPE_CODE_REF)))
134 fputs_filtered (" ", stream);
135 c_type_print_varspec_prefix (type, stream, show, 0);
137 fputs_filtered (varstring, stream);
139 /* For demangled function names, we have the arglist as part of the name,
140 so don't print an additional pair of ()'s */
142 demangled_args = strchr(varstring, '(') != NULL;
143 c_type_print_varspec_suffix (type, stream, show, 0, demangled_args);
147 /* Print the C++ method arguments ARGS to the file STREAM. */
150 cp_type_print_method_args (args, prefix, varstring, staticp, stream)
159 fprintf_symbol_filtered (stream, prefix, language_cplus, DMGL_ANSI);
160 fprintf_symbol_filtered (stream, varstring, language_cplus, DMGL_ANSI);
161 fputs_filtered (" (", stream);
162 if (args && args[!staticp] && args[!staticp]->code != TYPE_CODE_VOID)
164 i = !staticp; /* skip the class variable */
167 type_print (args[i++], "", stream, 0);
170 fprintf_filtered (stream, " ...");
173 else if (args[i]->code != TYPE_CODE_VOID)
175 fprintf_filtered (stream, ", ");
180 fprintf_filtered (stream, ")");
183 /* If TYPE is a derived type, then print out derivation information.
184 Print only the actual base classes of this type, not the base classes
185 of the base classes. I.E. for the derivation hierarchy:
188 class B : public A {int b; };
189 class C : public B {int c; };
191 Print the type of class C as:
197 Not as the following (like gdb used to), which is not legal C++ syntax for
198 derived types and may be confused with the multiple inheritance form:
200 class C : public B : public A {
204 In general, gdb should try to print the types as closely as possible to
205 the form that they appear in the source code. */
208 cp_type_print_derivation_info (stream, type)
215 for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
217 fputs_filtered (i == 0 ? ": " : ", ", stream);
218 fprintf_filtered (stream, "%s%s ",
219 BASETYPE_VIA_PUBLIC (type, i) ? "public" : "private",
220 BASETYPE_VIA_VIRTUAL(type, i) ? " virtual" : "");
221 name = type_name_no_tag (TYPE_BASECLASS (type, i));
222 fprintf_filtered (stream, "%s", name ? name : "(null)");
226 fputs_filtered (" ", stream);
230 /* Print any asterisks or open-parentheses needed before the
231 variable name (to describe its type).
233 On outermost call, pass 0 for PASSED_A_PTR.
234 On outermost call, SHOW > 0 means should ignore
235 any typename for TYPE and show its details.
236 SHOW is always zero on recursive calls. */
239 c_type_print_varspec_prefix (type, stream, show, passed_a_ptr)
249 if (TYPE_NAME (type) && show <= 0)
254 switch (TYPE_CODE (type))
257 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1);
258 fprintf_filtered (stream, "*");
261 case TYPE_CODE_MEMBER:
263 fprintf_filtered (stream, "(");
264 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
265 fprintf_filtered (stream, " ");
266 name = type_name_no_tag (TYPE_DOMAIN_TYPE (type));
268 fputs_filtered (name, stream);
270 c_type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0, passed_a_ptr);
271 fprintf_filtered (stream, "::");
274 case TYPE_CODE_METHOD:
276 fprintf_unfiltered (stream, "(");
277 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
280 fprintf_filtered (stream, " ");
281 c_type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0, passed_a_ptr);
282 fprintf_filtered (stream, "::");
287 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1);
288 fprintf_filtered (stream, "&");
292 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
294 fprintf_filtered (stream, "(");
297 case TYPE_CODE_ARRAY:
298 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
300 fprintf_filtered (stream, "(");
303 case TYPE_CODE_UNDEF:
304 case TYPE_CODE_STRUCT:
305 case TYPE_CODE_UNION:
310 case TYPE_CODE_ERROR:
314 case TYPE_CODE_RANGE:
315 case TYPE_CODE_STRING:
316 case TYPE_CODE_BITSTRING:
317 case TYPE_CODE_COMPLEX:
318 /* These types need no prefix. They are listed here so that
319 gcc -Wall will reveal any types that haven't been handled. */
325 c_type_print_args (type, stream)
332 fprintf_filtered (stream, "(");
333 args = TYPE_ARG_TYPES (type);
338 fprintf_filtered (stream, "...");
343 args[i] != NULL && args[i]->code != TYPE_CODE_VOID;
346 c_print_type (args[i], "", stream, -1, 0);
347 if (args[i+1] == NULL)
349 fprintf_filtered (stream, "...");
351 else if (args[i+1]->code != TYPE_CODE_VOID)
353 fprintf_filtered (stream, ",");
359 fprintf_filtered (stream, ")");
362 /* Print any array sizes, function arguments or close parentheses
363 needed after the variable name (to describe its type).
364 Args work like c_type_print_varspec_prefix. */
367 c_type_print_varspec_suffix (type, stream, show, passed_a_ptr, demangled_args)
377 if (TYPE_NAME (type) && show <= 0)
382 switch (TYPE_CODE (type))
384 case TYPE_CODE_ARRAY:
386 fprintf_filtered (stream, ")");
388 fprintf_filtered (stream, "[");
389 if (TYPE_LENGTH (type) >= 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
390 && TYPE_ARRAY_UPPER_BOUND_TYPE(type) != BOUND_CANNOT_BE_DETERMINED)
391 fprintf_filtered (stream, "%d",
393 / TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
394 fprintf_filtered (stream, "]");
396 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
399 case TYPE_CODE_MEMBER:
401 fprintf_filtered (stream, ")");
402 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
405 case TYPE_CODE_METHOD:
407 fprintf_filtered (stream, ")");
408 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
411 c_type_print_args (type, stream);
417 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0);
422 fprintf_filtered (stream, ")");
424 { int i, len = TYPE_NFIELDS (type);
425 fprintf_filtered (stream, "(");
426 for (i = 0; i < len; i++)
430 fputs_filtered (", ", stream);
433 c_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0);
435 fprintf_filtered (stream, ")");
437 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
441 case TYPE_CODE_UNDEF:
442 case TYPE_CODE_STRUCT:
443 case TYPE_CODE_UNION:
448 case TYPE_CODE_ERROR:
452 case TYPE_CODE_RANGE:
453 case TYPE_CODE_STRING:
454 case TYPE_CODE_BITSTRING:
455 case TYPE_CODE_COMPLEX:
456 /* These types do not need a suffix. They are listed so that
457 gcc -Wall will report types that may not have been considered. */
462 /* Print the name of the type (or the ultimate pointer target,
463 function value or array element), or the description of a
466 SHOW positive means print details about the type (e.g. enum values),
467 and print structure elements passing SHOW - 1 for show.
468 SHOW negative means just print the type name or struct tag if there is one.
469 If there is no name, print something sensible but concise like
471 SHOW zero means just print the type name or struct tag if there is one.
472 If there is no name, print something sensible but not as concise like
473 "struct {int x; int y;}".
475 LEVEL is the number of spaces to indent by.
476 We increase it for some recursive calls. */
479 c_type_print_base (type, stream, show, level)
487 register int lastval;
489 char *demangled_name;
490 enum {s_none, s_public, s_private, s_protected} section_type;
496 fputs_filtered ("<type unknown>", stream);
500 /* When SHOW is zero or less, and there is a valid type name, then always
501 just print the type name directly from the type. */
502 /* If we have "typedef struct foo {. . .} bar;" do we want to print it
503 as "struct foo" or as "bar"? Pick the latter, because C++ folk tend
504 to expect things like "class5 *foo" rather than "struct class5 *foo". */
507 && TYPE_NAME (type) != NULL)
509 fputs_filtered (TYPE_NAME (type), stream);
513 check_stub_type (type);
515 switch (TYPE_CODE (type))
517 case TYPE_CODE_ARRAY:
519 case TYPE_CODE_MEMBER:
522 case TYPE_CODE_METHOD:
523 c_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
526 case TYPE_CODE_STRUCT:
527 if (HAVE_CPLUS_STRUCT (type))
529 fprintf_filtered (stream, "class ");
533 fprintf_filtered (stream, "struct ");
537 case TYPE_CODE_UNION:
538 fprintf_filtered (stream, "union ");
541 if (TYPE_TAG_NAME (type) != NULL)
543 fputs_filtered (TYPE_TAG_NAME (type), stream);
545 fputs_filtered (" ", stream);
550 /* If we just printed a tag name, no need to print anything else. */
551 if (TYPE_TAG_NAME (type) == NULL)
552 fprintf_filtered (stream, "{...}");
554 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
556 cp_type_print_derivation_info (stream, type);
558 fprintf_filtered (stream, "{\n");
559 if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0))
561 if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
562 fprintfi_filtered (level + 4, stream, "<incomplete type>\n");
564 fprintfi_filtered (level + 4, stream, "<no data fields>\n");
567 /* Start off with no specific section type, so we can print
568 one for the first field we find, and use that section type
569 thereafter until we find another type. */
571 section_type = s_none;
573 /* If there is a base class for this type,
574 do not print the field that it occupies. */
576 len = TYPE_NFIELDS (type);
577 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
580 /* Don't print out virtual function table. */
581 if ((TYPE_FIELD_NAME (type, i))[5] == CPLUS_MARKER &&
582 !strncmp (TYPE_FIELD_NAME (type, i), "_vptr", 5))
585 /* If this is a C++ class we can print the various C++ section
588 if (HAVE_CPLUS_STRUCT (type))
590 if (TYPE_FIELD_PROTECTED (type, i))
592 if (section_type != s_protected)
594 section_type = s_protected;
595 fprintfi_filtered (level + 2, stream,
599 else if (TYPE_FIELD_PRIVATE (type, i))
601 if (section_type != s_private)
603 section_type = s_private;
604 fprintfi_filtered (level + 2, stream, "private:\n");
609 if (section_type != s_public)
611 section_type = s_public;
612 fprintfi_filtered (level + 2, stream, "public:\n");
617 print_spaces_filtered (level + 4, stream);
618 if (TYPE_FIELD_STATIC (type, i))
620 fprintf_filtered (stream, "static ");
622 c_print_type (TYPE_FIELD_TYPE (type, i),
623 TYPE_FIELD_NAME (type, i),
624 stream, show - 1, level + 4);
625 if (!TYPE_FIELD_STATIC (type, i)
626 && TYPE_FIELD_PACKED (type, i))
628 /* It is a bitfield. This code does not attempt
629 to look at the bitpos and reconstruct filler,
630 unnamed fields. This would lead to misleading
631 results if the compiler does not put out fields
632 for such things (I don't know what it does). */
633 fprintf_filtered (stream, " : %d",
634 TYPE_FIELD_BITSIZE (type, i));
636 fprintf_filtered (stream, ";\n");
639 /* If there are both fields and methods, put a space between. */
640 len = TYPE_NFN_FIELDS (type);
641 if (len && section_type != s_none)
642 fprintf_filtered (stream, "\n");
644 /* C++: print out the methods */
646 for (i = 0; i < len; i++)
648 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
649 int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
650 char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
651 char *name = type_name_no_tag (type);
652 int is_constructor = name && STREQ(method_name, name);
653 for (j = 0; j < len2; j++)
655 char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
656 int is_full_physname_constructor =
657 ((physname[0]=='_' && physname[1]=='_' &&
658 (isdigit(physname[2])
660 || physname[2]=='t'))
661 || (strncmp(physname, "__ct__", 6) == 0));
664 if (TYPE_FN_FIELD_PROTECTED (f, j))
666 if (section_type != s_protected)
668 section_type = s_protected;
669 fprintfi_filtered (level + 2, stream,
673 else if (TYPE_FN_FIELD_PRIVATE (f, j))
675 if (section_type != s_private)
677 section_type = s_private;
678 fprintfi_filtered (level + 2, stream, "private:\n");
683 if (section_type != s_public)
685 section_type = s_public;
686 fprintfi_filtered (level + 2, stream, "public:\n");
690 print_spaces_filtered (level + 4, stream);
691 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
692 fprintf_filtered (stream, "virtual ");
693 else if (TYPE_FN_FIELD_STATIC_P (f, j))
694 fprintf_filtered (stream, "static ");
695 if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
697 /* Keep GDB from crashing here. */
698 fprintf_unfiltered (stream, "<undefined type> %s;\n",
699 TYPE_FN_FIELD_PHYSNAME (f, j));
702 else if (!is_constructor && !is_full_physname_constructor)
704 type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
706 fputs_filtered (" ", stream);
708 if (TYPE_FN_FIELD_STUB (f, j))
710 /* Build something we can demangle. */
711 mangled_name = gdb_mangle_name (type, i, j);
713 cplus_demangle (mangled_name,
714 DMGL_ANSI | DMGL_PARAMS);
715 if (demangled_name == NULL)
716 fprintf_filtered (stream, "<badly mangled name %s>",
720 char *demangled_no_class =
721 strchr (demangled_name, ':');
723 if (demangled_no_class == NULL)
724 demangled_no_class = demangled_name;
727 if (*++demangled_no_class == ':')
728 ++demangled_no_class;
730 fputs_filtered (demangled_no_class, stream);
731 free (demangled_name);
735 else if (TYPE_FN_FIELD_PHYSNAME (f, j)[0] == '_'
736 && TYPE_FN_FIELD_PHYSNAME (f, j)[1] == CPLUS_MARKER)
737 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f, j) + 1,
738 "~", method_name, 0, stream);
740 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f, j), "",
742 TYPE_FN_FIELD_STATIC_P (f, j),
745 fprintf_filtered (stream, ";\n");
749 fprintfi_filtered (level, stream, "}");
754 fprintf_filtered (stream, "enum ");
755 if (TYPE_TAG_NAME (type) != NULL)
757 fputs_filtered (TYPE_TAG_NAME (type), stream);
759 fputs_filtered (" ", stream);
765 /* If we just printed a tag name, no need to print anything else. */
766 if (TYPE_TAG_NAME (type) == NULL)
767 fprintf_filtered (stream, "{...}");
769 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
771 fprintf_filtered (stream, "{");
772 len = TYPE_NFIELDS (type);
774 for (i = 0; i < len; i++)
777 if (i) fprintf_filtered (stream, ", ");
779 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
780 if (lastval != TYPE_FIELD_BITPOS (type, i))
782 fprintf_filtered (stream, " = %d", TYPE_FIELD_BITPOS (type, i));
783 lastval = TYPE_FIELD_BITPOS (type, i);
787 fprintf_filtered (stream, "}");
792 fprintf_filtered (stream, "void");
795 case TYPE_CODE_UNDEF:
796 fprintf_filtered (stream, "struct <unknown>");
799 case TYPE_CODE_ERROR:
800 fprintf_filtered (stream, "<unknown type>");
803 case TYPE_CODE_RANGE:
804 /* This should not occur */
805 fprintf_filtered (stream, "<range type>");
809 /* Handle types not explicitly handled by the other cases,
810 such as fundamental types. For these, just print whatever
811 the type name is, as recorded in the type itself. If there
812 is no type name, then complain. */
813 if (TYPE_NAME (type) != NULL)
815 fputs_filtered (TYPE_NAME (type), stream);
819 /* At least for dump_symtab, it is important that this not be
821 fprintf_filtered (stream, "<invalid type code %d>",