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 *, 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 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_unfiltered (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 case TYPE_CODE_BITSTRING:
310 /* These types need no prefix. They are listed here so that
311 gcc -Wall will reveal any types that haven't been handled. */
317 c_type_print_args (type, stream)
324 fprintf_filtered (stream, "(");
325 args = TYPE_ARG_TYPES (type);
330 fprintf_filtered (stream, "...");
335 args[i] != NULL && args[i]->code != TYPE_CODE_VOID;
338 c_print_type (args[i], "", stream, -1, 0);
339 if (args[i+1] == NULL)
341 fprintf_filtered (stream, "...");
343 else if (args[i+1]->code != TYPE_CODE_VOID)
345 fprintf_filtered (stream, ",");
351 fprintf_filtered (stream, ")");
354 /* Print any array sizes, function arguments or close parentheses
355 needed after the variable name (to describe its type).
356 Args work like c_type_print_varspec_prefix. */
359 c_type_print_varspec_suffix (type, stream, show, passed_a_ptr, demangled_args)
369 if (TYPE_NAME (type) && show <= 0)
374 switch (TYPE_CODE (type))
376 case TYPE_CODE_ARRAY:
378 fprintf_filtered (stream, ")");
380 fprintf_filtered (stream, "[");
381 if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0)
382 fprintf_filtered (stream, "%d",
384 / TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
385 fprintf_filtered (stream, "]");
387 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
390 case TYPE_CODE_MEMBER:
392 fprintf_filtered (stream, ")");
393 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
396 case TYPE_CODE_METHOD:
398 fprintf_filtered (stream, ")");
399 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
402 c_type_print_args (type, stream);
408 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0);
413 fprintf_filtered (stream, ")");
415 fprintf_filtered (stream, "()");
416 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
420 case TYPE_CODE_UNDEF:
421 case TYPE_CODE_STRUCT:
422 case TYPE_CODE_UNION:
427 case TYPE_CODE_ERROR:
431 case TYPE_CODE_RANGE:
432 case TYPE_CODE_STRING:
433 case TYPE_CODE_BITSTRING:
434 /* These types do not need a suffix. They are listed so that
435 gcc -Wall will report types that may not have been considered. */
440 /* Print the name of the type (or the ultimate pointer target,
441 function value or array element), or the description of a
444 SHOW positive means print details about the type (e.g. enum values),
445 and print structure elements passing SHOW - 1 for show.
446 SHOW negative means just print the type name or struct tag if there is one.
447 If there is no name, print something sensible but concise like
449 SHOW zero means just print the type name or struct tag if there is one.
450 If there is no name, print something sensible but not as concise like
451 "struct {int x; int y;}".
453 LEVEL is the number of spaces to indent by.
454 We increase it for some recursive calls. */
457 c_type_print_base (type, stream, show, level)
465 register int lastval;
467 char *demangled_name;
468 enum {s_none, s_public, s_private, s_protected} section_type;
474 fputs_filtered ("<type unknown>", stream);
478 /* When SHOW is zero or less, and there is a valid type name, then always
479 just print the type name directly from the type. */
480 /* If we have "typedef struct foo {. . .} bar;" do we want to print it
481 as "struct foo" or as "bar"? Pick the latter, because C++ folk tend
482 to expect things like "class5 *foo" rather than "struct class5 *foo". */
485 && TYPE_NAME (type) != NULL)
487 fputs_filtered (TYPE_NAME (type), stream);
491 check_stub_type (type);
493 switch (TYPE_CODE (type))
495 case TYPE_CODE_ARRAY:
497 case TYPE_CODE_MEMBER:
500 case TYPE_CODE_METHOD:
501 c_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
504 case TYPE_CODE_STRUCT:
505 if (HAVE_CPLUS_STRUCT (type))
507 fprintf_filtered (stream, "class ");
511 fprintf_filtered (stream, "struct ");
515 case TYPE_CODE_UNION:
516 fprintf_filtered (stream, "union ");
519 if (TYPE_TAG_NAME (type) != NULL)
521 fputs_filtered (TYPE_TAG_NAME (type), stream);
523 fputs_filtered (" ", stream);
528 /* If we just printed a tag name, no need to print anything else. */
529 if (TYPE_TAG_NAME (type) == NULL)
530 fprintf_filtered (stream, "{...}");
532 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
534 cp_type_print_derivation_info (stream, type);
536 fprintf_filtered (stream, "{\n");
537 if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0))
539 if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
540 fprintfi_filtered (level + 4, stream, "<incomplete type>\n");
542 fprintfi_filtered (level + 4, stream, "<no data fields>\n");
545 /* Start off with no specific section type, so we can print
546 one for the first field we find, and use that section type
547 thereafter until we find another type. */
549 section_type = s_none;
551 /* If there is a base class for this type,
552 do not print the field that it occupies. */
554 len = TYPE_NFIELDS (type);
555 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
558 /* Don't print out virtual function table. */
559 if ((TYPE_FIELD_NAME (type, i))[5] == CPLUS_MARKER &&
560 !strncmp (TYPE_FIELD_NAME (type, i), "_vptr", 5))
563 /* If this is a C++ class we can print the various C++ section
566 if (HAVE_CPLUS_STRUCT (type))
568 if (TYPE_FIELD_PROTECTED (type, i))
570 if (section_type != s_protected)
572 section_type = s_protected;
573 fprintfi_filtered (level + 2, stream,
577 else if (TYPE_FIELD_PRIVATE (type, i))
579 if (section_type != s_private)
581 section_type = s_private;
582 fprintfi_filtered (level + 2, stream, "private:\n");
587 if (section_type != s_public)
589 section_type = s_public;
590 fprintfi_filtered (level + 2, stream, "public:\n");
595 print_spaces_filtered (level + 4, stream);
596 if (TYPE_FIELD_STATIC (type, i))
598 fprintf_filtered (stream, "static ");
600 c_print_type (TYPE_FIELD_TYPE (type, i),
601 TYPE_FIELD_NAME (type, i),
602 stream, show - 1, level + 4);
603 if (!TYPE_FIELD_STATIC (type, i)
604 && TYPE_FIELD_PACKED (type, i))
606 /* It is a bitfield. This code does not attempt
607 to look at the bitpos and reconstruct filler,
608 unnamed fields. This would lead to misleading
609 results if the compiler does not put out fields
610 for such things (I don't know what it does). */
611 fprintf_filtered (stream, " : %d",
612 TYPE_FIELD_BITSIZE (type, i));
614 fprintf_filtered (stream, ";\n");
617 /* If there are both fields and methods, put a space between. */
618 len = TYPE_NFN_FIELDS (type);
619 if (len && section_type != s_none)
620 fprintf_filtered (stream, "\n");
622 /* C++: print out the methods */
624 for (i = 0; i < len; i++)
626 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
627 int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
628 char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
629 char *name = type_name_no_tag (type);
630 int is_constructor = name && STREQ(method_name, name);
631 for (j = 0; j < len2; j++)
634 if (TYPE_FN_FIELD_PROTECTED (f, j))
636 if (section_type != s_protected)
638 section_type = s_protected;
639 fprintfi_filtered (level + 2, stream,
643 else if (TYPE_FN_FIELD_PRIVATE (f, j))
645 if (section_type != s_private)
647 section_type = s_private;
648 fprintfi_filtered (level + 2, stream, "private:\n");
653 if (section_type != s_public)
655 section_type = s_public;
656 fprintfi_filtered (level + 2, stream, "public:\n");
660 print_spaces_filtered (level + 4, stream);
661 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
662 fprintf_filtered (stream, "virtual ");
663 else if (TYPE_FN_FIELD_STATIC_P (f, j))
664 fprintf_filtered (stream, "static ");
665 if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
667 /* Keep GDB from crashing here. */
668 fprintf_unfiltered (stream, "<undefined type> %s;\n",
669 TYPE_FN_FIELD_PHYSNAME (f, j));
672 else if (!is_constructor)
674 type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
676 fputs_filtered (" ", stream);
678 if (TYPE_FN_FIELD_STUB (f, j))
680 /* Build something we can demangle. */
681 mangled_name = gdb_mangle_name (type, i, j);
683 cplus_demangle (mangled_name,
684 DMGL_ANSI | DMGL_PARAMS);
685 if (demangled_name == NULL)
686 fprintf_filtered (stream, "<badly mangled name %s>",
690 char *demangled_no_class =
691 strchr (demangled_name, ':');
693 if (demangled_no_class == NULL)
694 demangled_no_class = demangled_name;
697 if (*++demangled_no_class == ':')
698 ++demangled_no_class;
700 fputs_filtered (demangled_no_class, stream);
701 free (demangled_name);
705 else if (TYPE_FN_FIELD_PHYSNAME (f, j)[0] == '_'
706 && TYPE_FN_FIELD_PHYSNAME (f, j)[1] == CPLUS_MARKER)
707 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f, j) + 1,
708 "~", method_name, 0, stream);
710 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f, j), "",
712 TYPE_FN_FIELD_STATIC_P (f, j),
715 fprintf_filtered (stream, ";\n");
719 fprintfi_filtered (level, stream, "}");
724 fprintf_filtered (stream, "enum ");
725 if (TYPE_TAG_NAME (type) != NULL)
727 fputs_filtered (TYPE_TAG_NAME (type), stream);
729 fputs_filtered (" ", stream);
735 /* If we just printed a tag name, no need to print anything else. */
736 if (TYPE_TAG_NAME (type) == NULL)
737 fprintf_filtered (stream, "{...}");
739 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
741 fprintf_filtered (stream, "{");
742 len = TYPE_NFIELDS (type);
744 for (i = 0; i < len; i++)
747 if (i) fprintf_filtered (stream, ", ");
749 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
750 if (lastval != TYPE_FIELD_BITPOS (type, i))
752 fprintf_filtered (stream, " = %d", TYPE_FIELD_BITPOS (type, i));
753 lastval = TYPE_FIELD_BITPOS (type, i);
757 fprintf_filtered (stream, "}");
762 fprintf_filtered (stream, "void");
765 case TYPE_CODE_UNDEF:
766 fprintf_filtered (stream, "struct <unknown>");
769 case TYPE_CODE_ERROR:
770 fprintf_filtered (stream, "<unknown type>");
773 case TYPE_CODE_RANGE:
774 /* This should not occur */
775 fprintf_filtered (stream, "<range type>");
779 /* Handle types not explicitly handled by the other cases,
780 such as fundamental types. For these, just print whatever
781 the type name is, as recorded in the type itself. If there
782 is no type name, then complain. */
783 if (TYPE_NAME (type) != NULL)
785 fputs_filtered (TYPE_NAME (type), stream);
789 /* At least for dump_symtab, it is important that this not be
791 fprintf_filtered (stream, "<invalid type code %d>",