]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/c-typeprint.c
2001-11-11 Daniel Jacobowitz <drow@mvista.com>
[thirdparty/binutils-gdb.git] / gdb / c-typeprint.c
CommitLineData
c906108c 1/* Support for printing C and C++ types for GDB, the GNU debugger.
b6ba6518
KB
2 Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1998,
3 1999, 2000
c906108c
SS
4 Free Software Foundation, Inc.
5
c5aa993b 6 This file is part of GDB.
c906108c 7
c5aa993b
JM
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
c906108c 12
c5aa993b
JM
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
c906108c 17
c5aa993b
JM
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
c906108c
SS
22
23#include "defs.h"
24#include "obstack.h"
25#include "bfd.h" /* Binary File Description */
26#include "symtab.h"
27#include "gdbtypes.h"
28#include "expression.h"
29#include "value.h"
30#include "gdbcore.h"
31#include "target.h"
c906108c
SS
32#include "language.h"
33#include "demangle.h"
34#include "c-lang.h"
35#include "typeprint.h"
015a42b4 36#include "cp-abi.h"
c906108c
SS
37
38#include "gdb_string.h"
39#include <errno.h>
c906108c
SS
40
41/* Flag indicating target was compiled by HP compiler */
42extern int hp_som_som_object_present;
43
d9fcf2fb
JM
44static void cp_type_print_method_args (struct type ** args, char *prefix,
45 char *varstring, int staticp,
46 struct ui_file *stream);
392a587b 47
d9fcf2fb 48static void c_type_print_args (struct type *, struct ui_file *);
c906108c 49
d9fcf2fb 50static void cp_type_print_derivation_info (struct ui_file *, struct type *);
c906108c 51
d9fcf2fb
JM
52void c_type_print_varspec_prefix (struct type *, struct ui_file *, int,
53 int);
c906108c 54
d9fcf2fb
JM
55static void c_type_print_cv_qualifier (struct type *, struct ui_file *,
56 int, int);
c5aa993b 57\f
c906108c
SS
58
59
c906108c
SS
60
61/* LEVEL is the depth to indent lines by. */
62
63void
fba45db2
KB
64c_print_type (struct type *type, char *varstring, struct ui_file *stream,
65 int show, int level)
c906108c
SS
66{
67 register enum type_code code;
68 int demangled_args;
69
70 if (show > 0)
71 CHECK_TYPEDEF (type);
72
73 c_type_print_base (type, stream, show, level);
74 code = TYPE_CODE (type);
75 if ((varstring != NULL && *varstring != '\0')
76 ||
c5aa993b
JM
77 /* Need a space if going to print stars or brackets;
78 but not if we will print just a type name. */
c906108c
SS
79 ((show > 0 || TYPE_NAME (type) == 0)
80 &&
81 (code == TYPE_CODE_PTR || code == TYPE_CODE_FUNC
82 || code == TYPE_CODE_METHOD
83 || code == TYPE_CODE_ARRAY
84 || code == TYPE_CODE_MEMBER
85 || code == TYPE_CODE_REF)))
86 fputs_filtered (" ", stream);
87 c_type_print_varspec_prefix (type, stream, show, 0);
88
89 if (varstring != NULL)
90 {
91 fputs_filtered (varstring, stream);
92
93 /* For demangled function names, we have the arglist as part of the name,
c5aa993b 94 so don't print an additional pair of ()'s */
c906108c 95
c5aa993b 96 demangled_args = strchr (varstring, '(') != NULL;
c906108c
SS
97 c_type_print_varspec_suffix (type, stream, show, 0, demangled_args);
98 }
99}
c5aa993b 100
c906108c
SS
101/* If TYPE is a derived type, then print out derivation information.
102 Print only the actual base classes of this type, not the base classes
103 of the base classes. I.E. for the derivation hierarchy:
104
c5aa993b
JM
105 class A { int a; };
106 class B : public A {int b; };
107 class C : public B {int c; };
c906108c
SS
108
109 Print the type of class C as:
110
c5aa993b
JM
111 class C : public B {
112 int c;
113 }
c906108c
SS
114
115 Not as the following (like gdb used to), which is not legal C++ syntax for
116 derived types and may be confused with the multiple inheritance form:
117
c5aa993b
JM
118 class C : public B : public A {
119 int c;
120 }
c906108c
SS
121
122 In general, gdb should try to print the types as closely as possible to
123 the form that they appear in the source code.
124 Note that in case of protected derivation gcc will not say 'protected'
125 but 'private'. The HP's aCC compiler emits specific information for
126 derivation via protected inheritance, so gdb can print it out */
127
128static void
fba45db2 129cp_type_print_derivation_info (struct ui_file *stream, struct type *type)
c906108c
SS
130{
131 char *name;
132 int i;
133
134 for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
135 {
136 fputs_filtered (i == 0 ? ": " : ", ", stream);
137 fprintf_filtered (stream, "%s%s ",
c5aa993b
JM
138 BASETYPE_VIA_PUBLIC (type, i) ? "public"
139 : (TYPE_FIELD_PROTECTED (type, i) ? "protected" : "private"),
140 BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
c906108c
SS
141 name = type_name_no_tag (TYPE_BASECLASS (type, i));
142 fprintf_filtered (stream, "%s", name ? name : "(null)");
143 }
144 if (i > 0)
145 {
146 fputs_filtered (" ", stream);
147 }
148}
149/* Print the C++ method arguments ARGS to the file STREAM. */
c5aa993b 150
392a587b 151static void
fba45db2
KB
152cp_type_print_method_args (struct type **args, char *prefix, char *varstring,
153 int staticp, struct ui_file *stream)
c906108c
SS
154{
155 int i;
c5aa993b 156
c906108c
SS
157 fprintf_symbol_filtered (stream, prefix, language_cplus, DMGL_ANSI);
158 fprintf_symbol_filtered (stream, varstring, language_cplus, DMGL_ANSI);
159 fputs_filtered ("(", stream);
160 if (args && args[!staticp] && args[!staticp]->code != TYPE_CODE_VOID)
161 {
c5aa993b 162 i = !staticp; /* skip the class variable */
c906108c 163 while (1)
c5aa993b
JM
164 {
165 type_print (args[i++], "", stream, 0);
166 if (!args[i])
167 {
168 fprintf_filtered (stream, " ...");
169 break;
170 }
171 else if (args[i]->code != TYPE_CODE_VOID)
172 {
173 fprintf_filtered (stream, ", ");
174 }
175 else
176 break;
177 }
c906108c
SS
178 }
179 else if (current_language->la_language == language_cplus)
180 {
181 fprintf_filtered (stream, "void");
182 }
c5aa993b 183
c906108c
SS
184 fprintf_filtered (stream, ")");
185}
186
187
188/* Print any asterisks or open-parentheses needed before the
189 variable name (to describe its type).
190
191 On outermost call, pass 0 for PASSED_A_PTR.
192 On outermost call, SHOW > 0 means should ignore
193 any typename for TYPE and show its details.
194 SHOW is always zero on recursive calls. */
195
196void
fba45db2
KB
197c_type_print_varspec_prefix (struct type *type, struct ui_file *stream,
198 int show, int passed_a_ptr)
c906108c
SS
199{
200 char *name;
201 if (type == 0)
202 return;
203
204 if (TYPE_NAME (type) && show <= 0)
205 return;
206
207 QUIT;
208
209 switch (TYPE_CODE (type))
210 {
211 case TYPE_CODE_PTR:
212 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1);
213 fprintf_filtered (stream, "*");
214 c_type_print_cv_qualifier (type, stream, 1, 0);
215 break;
216
217 case TYPE_CODE_MEMBER:
218 if (passed_a_ptr)
219 fprintf_filtered (stream, "(");
220 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
221 fprintf_filtered (stream, " ");
222 name = type_name_no_tag (TYPE_DOMAIN_TYPE (type));
223 if (name)
224 fputs_filtered (name, stream);
225 else
c5aa993b 226 c_type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0, passed_a_ptr);
c906108c
SS
227 fprintf_filtered (stream, "::");
228 break;
229
230 case TYPE_CODE_METHOD:
231 if (passed_a_ptr)
232 fprintf_filtered (stream, "(");
233 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
234 if (passed_a_ptr)
235 {
236 fprintf_filtered (stream, " ");
237 c_type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0, passed_a_ptr);
238 fprintf_filtered (stream, "::");
239 }
240 break;
241
242 case TYPE_CODE_REF:
243 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1);
244 fprintf_filtered (stream, "&");
245 c_type_print_cv_qualifier (type, stream, 1, 0);
246 break;
247
248 case TYPE_CODE_FUNC:
249 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
250 if (passed_a_ptr)
251 fprintf_filtered (stream, "(");
252 break;
253
254 case TYPE_CODE_ARRAY:
255 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
256 if (passed_a_ptr)
257 fprintf_filtered (stream, "(");
258 break;
259
260 case TYPE_CODE_UNDEF:
261 case TYPE_CODE_STRUCT:
262 case TYPE_CODE_UNION:
263 case TYPE_CODE_ENUM:
264 case TYPE_CODE_INT:
265 case TYPE_CODE_FLT:
266 case TYPE_CODE_VOID:
267 case TYPE_CODE_ERROR:
268 case TYPE_CODE_CHAR:
269 case TYPE_CODE_BOOL:
270 case TYPE_CODE_SET:
271 case TYPE_CODE_RANGE:
272 case TYPE_CODE_STRING:
273 case TYPE_CODE_BITSTRING:
274 case TYPE_CODE_COMPLEX:
275 case TYPE_CODE_TYPEDEF:
c4093a6a 276 case TYPE_CODE_TEMPLATE:
c906108c 277 /* These types need no prefix. They are listed here so that
c5aa993b 278 gcc -Wall will reveal any types that haven't been handled. */
c906108c 279 break;
c4093a6a
JM
280 default:
281 error ("type not handled in c_type_print_varspec_prefix()");
282 break;
c906108c
SS
283 }
284}
285
286/* Print out "const" and "volatile" attributes.
287 TYPE is a pointer to the type being printed out.
288 STREAM is the output destination.
289 NEED_SPACE = 1 indicates an initial white space is needed */
290
291static void
fba45db2
KB
292c_type_print_cv_qualifier (struct type *type, struct ui_file *stream,
293 int need_pre_space, int need_post_space)
c906108c
SS
294{
295 int flag = 0;
c5aa993b 296
7f0b5c30
JB
297 /* We don't print `const' qualifiers for references --- since all
298 operators affect the thing referenced, not the reference itself,
299 every reference is `const'. */
300 if (TYPE_CONST (type)
301 && TYPE_CODE (type) != TYPE_CODE_REF)
c906108c
SS
302 {
303 if (need_pre_space)
c5aa993b 304 fprintf_filtered (stream, " ");
c906108c
SS
305 fprintf_filtered (stream, "const");
306 flag = 1;
307 }
c5aa993b 308
c906108c
SS
309 if (TYPE_VOLATILE (type))
310 {
311 if (flag || need_pre_space)
c5aa993b 312 fprintf_filtered (stream, " ");
c906108c
SS
313 fprintf_filtered (stream, "volatile");
314 flag = 1;
315 }
316
317 if (flag && need_post_space)
318 fprintf_filtered (stream, " ");
319}
320
321
322
323
324static void
fba45db2 325c_type_print_args (struct type *type, struct ui_file *stream)
c906108c
SS
326{
327 int i;
328 struct type **args;
329
330 fprintf_filtered (stream, "(");
331 args = TYPE_ARG_TYPES (type);
332 if (args != NULL)
333 {
334 if (args[1] == NULL)
335 {
336 fprintf_filtered (stream, "...");
337 }
338 else if ((args[1]->code == TYPE_CODE_VOID) &&
c5aa993b
JM
339 (current_language->la_language == language_cplus))
340 {
341 fprintf_filtered (stream, "void");
342 }
c906108c
SS
343 else
344 {
345 for (i = 1;
346 args[i] != NULL && args[i]->code != TYPE_CODE_VOID;
347 i++)
348 {
349 c_print_type (args[i], "", stream, -1, 0);
c5aa993b 350 if (args[i + 1] == NULL)
c906108c
SS
351 {
352 fprintf_filtered (stream, "...");
353 }
c5aa993b 354 else if (args[i + 1]->code != TYPE_CODE_VOID)
c906108c
SS
355 {
356 fprintf_filtered (stream, ",");
357 wrap_here (" ");
358 }
359 }
360 }
361 }
362 else if (current_language->la_language == language_cplus)
363 {
364 fprintf_filtered (stream, "void");
365 }
c5aa993b 366
c906108c
SS
367 fprintf_filtered (stream, ")");
368}
369
dfcd3bfb
JM
370
371/* Return true iff the j'th overloading of the i'th method of TYPE
372 is a type conversion operator, like `operator int () { ... }'.
373 When listing a class's methods, we don't print the return type of
374 such operators. */
375static int
376is_type_conversion_operator (struct type *type, int i, int j)
377{
378 /* I think the whole idea of recognizing type conversion operators
379 by their name is pretty terrible. But I don't think our present
380 data structure gives us any other way to tell. If you know of
381 some other way, feel free to rewrite this function. */
382 char *name = TYPE_FN_FIELDLIST_NAME (type, i);
383
384 if (strncmp (name, "operator", 8) != 0)
385 return 0;
386
387 name += 8;
388 if (! strchr (" \t\f\n\r", *name))
389 return 0;
390
391 while (strchr (" \t\f\n\r", *name))
392 name++;
393
394 if (strncmp (name, "new", 3) == 0)
395 name += 3;
396 else if (strncmp (name, "delete", 6) == 0)
397 name += 6;
398 else
399 return 0;
400
401 /* Is that really the end of the name? */
402 if (('a' <= *name && *name <= 'z')
403 || ('A' <= *name && *name <= 'Z')
404 || ('0' <= *name && *name <= '9')
405 || *name == '_')
406 /* No, so the identifier following "operator" must be a type name,
407 and this is a type conversion operator. */
408 return 1;
409
410 /* That was indeed the end of the name, so it was `operator new' or
411 `operator delete', neither of which are type conversion operators. */
412 return 0;
413}
414
415
416/* Given a C++ qualified identifier QID, strip off the qualifiers,
417 yielding the unqualified name. The return value is a pointer into
418 the original string.
419
420 It's a pity we don't have this information in some more structured
421 form. Even the author of this function feels that writing little
422 parsers like this everywhere is stupid. */
423static char *
424remove_qualifiers (char *qid)
425{
426 int quoted = 0; /* zero if we're not in quotes;
427 '"' if we're in a double-quoted string;
428 '\'' if we're in a single-quoted string. */
429 int depth = 0; /* number of unclosed parens we've seen */
430 char *parenstack = (char *) alloca (strlen (qid));
431 char *scan;
432 char *last = 0; /* The character after the rightmost
433 `::' token we've seen so far. */
434
435 for (scan = qid; *scan; scan++)
436 {
437 if (quoted)
438 {
439 if (*scan == quoted)
440 quoted = 0;
441 else if (*scan == '\\' && *(scan + 1))
442 scan++;
443 }
444 else if (scan[0] == ':' && scan[1] == ':')
445 {
446 /* If we're inside parenthesis (i.e., an argument list) or
447 angle brackets (i.e., a list of template arguments), then
448 we don't record the position of this :: token, since it's
449 not relevant to the top-level structure we're trying
450 to operate on. */
451 if (depth == 0)
452 {
453 last = scan + 2;
454 scan++;
455 }
456 }
457 else if (*scan == '"' || *scan == '\'')
458 quoted = *scan;
459 else if (*scan == '(')
460 parenstack[depth++] = ')';
461 else if (*scan == '[')
462 parenstack[depth++] = ']';
463 /* We're going to treat <> as a pair of matching characters,
464 since we're more likely to see those in template id's than
465 real less-than characters. What a crock. */
466 else if (*scan == '<')
467 parenstack[depth++] = '>';
468 else if (*scan == ')' || *scan == ']' || *scan == '>')
469 {
470 if (depth > 0 && parenstack[depth - 1] == *scan)
471 depth--;
472 else
473 {
474 /* We're going to do a little error recovery here. If we
475 don't find a match for *scan on the paren stack, but
476 there is something lower on the stack that does match, we
477 pop the stack to that point. */
478 int i;
479
480 for (i = depth - 1; i >= 0; i--)
481 if (parenstack[i] == *scan)
482 {
483 depth = i;
484 break;
485 }
486 }
487 }
488 }
489
490 if (last)
491 return last;
492 else
493 /* We didn't find any :: tokens at the top level, so declare the
494 whole thing an unqualified identifier. */
495 return qid;
496}
497
498
c906108c
SS
499/* Print any array sizes, function arguments or close parentheses
500 needed after the variable name (to describe its type).
501 Args work like c_type_print_varspec_prefix. */
502
503void
fba45db2
KB
504c_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
505 int show, int passed_a_ptr, int demangled_args)
c906108c
SS
506{
507 if (type == 0)
508 return;
509
510 if (TYPE_NAME (type) && show <= 0)
511 return;
512
513 QUIT;
514
515 switch (TYPE_CODE (type))
516 {
517 case TYPE_CODE_ARRAY:
518 if (passed_a_ptr)
519 fprintf_filtered (stream, ")");
c5aa993b 520
c906108c
SS
521 fprintf_filtered (stream, "[");
522 if (TYPE_LENGTH (type) >= 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
c5aa993b 523 && TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
c906108c
SS
524 fprintf_filtered (stream, "%d",
525 (TYPE_LENGTH (type)
526 / TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
527 fprintf_filtered (stream, "]");
c5aa993b 528
c906108c
SS
529 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
530 break;
531
532 case TYPE_CODE_MEMBER:
533 if (passed_a_ptr)
534 fprintf_filtered (stream, ")");
535 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
536 break;
537
538 case TYPE_CODE_METHOD:
539 if (passed_a_ptr)
540 fprintf_filtered (stream, ")");
541 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
542 if (passed_a_ptr)
543 {
544 c_type_print_args (type, stream);
545 }
546 break;
547
548 case TYPE_CODE_PTR:
549 case TYPE_CODE_REF:
550 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0);
551 break;
552
553 case TYPE_CODE_FUNC:
554 if (passed_a_ptr)
555 fprintf_filtered (stream, ")");
556 if (!demangled_args)
c5aa993b
JM
557 {
558 int i, len = TYPE_NFIELDS (type);
c906108c 559 fprintf_filtered (stream, "(");
c5aa993b
JM
560 if ((len == 0) && (current_language->la_language == language_cplus))
561 {
562 fprintf_filtered (stream, "void");
563 }
564 else
565 for (i = 0; i < len; i++)
566 {
567 if (i > 0)
568 {
569 fputs_filtered (", ", stream);
570 wrap_here (" ");
571 }
572 c_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0);
573 }
c906108c
SS
574 fprintf_filtered (stream, ")");
575 }
576 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
577 passed_a_ptr, 0);
578 break;
579
580 case TYPE_CODE_UNDEF:
581 case TYPE_CODE_STRUCT:
582 case TYPE_CODE_UNION:
583 case TYPE_CODE_ENUM:
584 case TYPE_CODE_INT:
585 case TYPE_CODE_FLT:
586 case TYPE_CODE_VOID:
587 case TYPE_CODE_ERROR:
588 case TYPE_CODE_CHAR:
589 case TYPE_CODE_BOOL:
590 case TYPE_CODE_SET:
591 case TYPE_CODE_RANGE:
592 case TYPE_CODE_STRING:
593 case TYPE_CODE_BITSTRING:
594 case TYPE_CODE_COMPLEX:
595 case TYPE_CODE_TYPEDEF:
c4093a6a 596 case TYPE_CODE_TEMPLATE:
c906108c 597 /* These types do not need a suffix. They are listed so that
c5aa993b 598 gcc -Wall will report types that may not have been considered. */
c906108c 599 break;
c4093a6a
JM
600 default:
601 error ("type not handled in c_type_print_varspec_suffix()");
602 break;
c906108c
SS
603 }
604}
605
606/* Print the name of the type (or the ultimate pointer target,
607 function value or array element), or the description of a
608 structure or union.
609
610 SHOW positive means print details about the type (e.g. enum values),
611 and print structure elements passing SHOW - 1 for show.
612 SHOW negative means just print the type name or struct tag if there is one.
613 If there is no name, print something sensible but concise like
614 "struct {...}".
615 SHOW zero means just print the type name or struct tag if there is one.
616 If there is no name, print something sensible but not as concise like
617 "struct {int x; int y;}".
618
619 LEVEL is the number of spaces to indent by.
620 We increase it for some recursive calls. */
621
622void
fba45db2
KB
623c_type_print_base (struct type *type, struct ui_file *stream, int show,
624 int level)
c906108c
SS
625{
626 register int i;
627 register int len;
628 register int lastval;
629 char *mangled_name;
630 char *demangled_name;
631 char *demangled_no_static;
c5aa993b
JM
632 enum
633 {
634 s_none, s_public, s_private, s_protected
635 }
636 section_type;
c906108c
SS
637 int need_access_label = 0;
638 int j, len2;
639
640 QUIT;
641
642 wrap_here (" ");
643 if (type == NULL)
644 {
645 fputs_filtered ("<type unknown>", stream);
646 return;
647 }
648
649 /* When SHOW is zero or less, and there is a valid type name, then always
650 just print the type name directly from the type. */
651 /* If we have "typedef struct foo {. . .} bar;" do we want to print it
652 as "struct foo" or as "bar"? Pick the latter, because C++ folk tend
653 to expect things like "class5 *foo" rather than "struct class5 *foo". */
654
655 if (show <= 0
656 && TYPE_NAME (type) != NULL)
657 {
658 c_type_print_cv_qualifier (type, stream, 0, 1);
659 fputs_filtered (TYPE_NAME (type), stream);
660 return;
661 }
662
663 CHECK_TYPEDEF (type);
c5aa993b 664
c906108c
SS
665 switch (TYPE_CODE (type))
666 {
667 case TYPE_CODE_TYPEDEF:
668 case TYPE_CODE_ARRAY:
669 case TYPE_CODE_PTR:
670 case TYPE_CODE_MEMBER:
671 case TYPE_CODE_REF:
672 case TYPE_CODE_FUNC:
673 case TYPE_CODE_METHOD:
674 c_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
675 break;
676
677 case TYPE_CODE_STRUCT:
678 c_type_print_cv_qualifier (type, stream, 0, 1);
679 /* Note TYPE_CODE_STRUCT and TYPE_CODE_CLASS have the same value,
680 * so we use another means for distinguishing them.
681 */
c5aa993b
JM
682 if (HAVE_CPLUS_STRUCT (type))
683 {
684 switch (TYPE_DECLARED_TYPE (type))
685 {
686 case DECLARED_TYPE_CLASS:
687 fprintf_filtered (stream, "class ");
688 break;
689 case DECLARED_TYPE_UNION:
690 fprintf_filtered (stream, "union ");
691 break;
692 case DECLARED_TYPE_STRUCT:
693 fprintf_filtered (stream, "struct ");
694 break;
695 default:
696 /* If there is a CPLUS_STRUCT, assume class if not
697 * otherwise specified in the declared_type field.
698 */
699 fprintf_filtered (stream, "class ");
700 break;
701 } /* switch */
702 }
703 else
704 {
705 /* If not CPLUS_STRUCT, then assume it's a C struct */
706 fprintf_filtered (stream, "struct ");
707 }
c906108c
SS
708 goto struct_union;
709
710 case TYPE_CODE_UNION:
711 c_type_print_cv_qualifier (type, stream, 0, 1);
712 fprintf_filtered (stream, "union ");
713
714 struct_union:
715
716 /* Print the tag if it exists.
717 * The HP aCC compiler emits
718 * a spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
719 * tag for unnamed struct/union/enum's, which we don't
720 * want to print.
721 */
722 if (TYPE_TAG_NAME (type) != NULL &&
c5aa993b 723 strncmp (TYPE_TAG_NAME (type), "{unnamed", 8))
c906108c
SS
724 {
725 fputs_filtered (TYPE_TAG_NAME (type), stream);
726 if (show > 0)
727 fputs_filtered (" ", stream);
728 }
729 wrap_here (" ");
730 if (show < 0)
731 {
732 /* If we just printed a tag name, no need to print anything else. */
733 if (TYPE_TAG_NAME (type) == NULL)
734 fprintf_filtered (stream, "{...}");
735 }
736 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
737 {
738 cp_type_print_derivation_info (stream, type);
c5aa993b 739
c906108c
SS
740 fprintf_filtered (stream, "{\n");
741 if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0))
742 {
743 if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
744 fprintfi_filtered (level + 4, stream, "<incomplete type>\n");
745 else
746 fprintfi_filtered (level + 4, stream, "<no data fields>\n");
747 }
748
749 /* Start off with no specific section type, so we can print
750 one for the first field we find, and use that section type
751 thereafter until we find another type. */
752
753 section_type = s_none;
754
c5aa993b
JM
755 /* For a class, if all members are private, there's no need
756 for a "private:" label; similarly, for a struct or union
757 masquerading as a class, if all members are public, there's
758 no need for a "public:" label. */
759
760 if ((TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_CLASS) ||
761 (TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_TEMPLATE))
762 {
763 QUIT;
764 len = TYPE_NFIELDS (type);
765 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
766 if (!TYPE_FIELD_PRIVATE (type, i))
767 {
768 need_access_label = 1;
769 break;
770 }
771 QUIT;
772 if (!need_access_label)
773 {
774 len2 = TYPE_NFN_FIELDS (type);
775 for (j = 0; j < len2; j++)
776 {
777 len = TYPE_FN_FIELDLIST_LENGTH (type, j);
778 for (i = 0; i < len; i++)
779 if (!TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type, j), i))
780 {
781 need_access_label = 1;
782 break;
783 }
784 if (need_access_label)
785 break;
786 }
787 }
788 }
789 else if ((TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_STRUCT) ||
790 (TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_UNION))
791 {
792 QUIT;
793 len = TYPE_NFIELDS (type);
794 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
795 if (TYPE_FIELD_PRIVATE (type, i) || TYPE_FIELD_PROTECTED (type, i))
796 {
797 need_access_label = 1;
798 break;
799 }
800 QUIT;
801 if (!need_access_label)
802 {
803 len2 = TYPE_NFN_FIELDS (type);
804 for (j = 0; j < len2; j++)
805 {
806 QUIT;
807 len = TYPE_FN_FIELDLIST_LENGTH (type, j);
808 for (i = 0; i < len; i++)
809 if (TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type, j), i) ||
810 TYPE_FN_FIELD_PROTECTED (TYPE_FN_FIELDLIST1 (type, j), i))
811 {
812 need_access_label = 1;
813 break;
814 }
815 if (need_access_label)
816 break;
817 }
818 }
819 }
c906108c
SS
820
821 /* If there is a base class for this type,
822 do not print the field that it occupies. */
823
824 len = TYPE_NFIELDS (type);
825 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
826 {
827 QUIT;
828 /* Don't print out virtual function table. */
c5aa993b
JM
829 /* HP ANSI C++ case */
830 if (TYPE_HAS_VTABLE (type) && (STREQN (TYPE_FIELD_NAME (type, i), "__vfp", 5)))
831 continue;
832 /* Other compilers */
c906108c
SS
833 if (STREQN (TYPE_FIELD_NAME (type, i), "_vptr", 5)
834 && is_cplus_marker ((TYPE_FIELD_NAME (type, i))[5]))
835 continue;
836
837 /* If this is a C++ class we can print the various C++ section
c5aa993b 838 labels. */
c906108c
SS
839
840 if (HAVE_CPLUS_STRUCT (type) && need_access_label)
841 {
842 if (TYPE_FIELD_PROTECTED (type, i))
843 {
844 if (section_type != s_protected)
845 {
846 section_type = s_protected;
847 fprintfi_filtered (level + 2, stream,
848 "protected:\n");
849 }
850 }
851 else if (TYPE_FIELD_PRIVATE (type, i))
852 {
853 if (section_type != s_private)
854 {
855 section_type = s_private;
856 fprintfi_filtered (level + 2, stream, "private:\n");
857 }
858 }
859 else
860 {
861 if (section_type != s_public)
862 {
863 section_type = s_public;
864 fprintfi_filtered (level + 2, stream, "public:\n");
865 }
866 }
867 }
868
869 print_spaces_filtered (level + 4, stream);
870 if (TYPE_FIELD_STATIC (type, i))
871 {
872 fprintf_filtered (stream, "static ");
873 }
874 c_print_type (TYPE_FIELD_TYPE (type, i),
875 TYPE_FIELD_NAME (type, i),
876 stream, show - 1, level + 4);
877 if (!TYPE_FIELD_STATIC (type, i)
878 && TYPE_FIELD_PACKED (type, i))
879 {
880 /* It is a bitfield. This code does not attempt
881 to look at the bitpos and reconstruct filler,
882 unnamed fields. This would lead to misleading
883 results if the compiler does not put out fields
884 for such things (I don't know what it does). */
885 fprintf_filtered (stream, " : %d",
886 TYPE_FIELD_BITSIZE (type, i));
887 }
888 fprintf_filtered (stream, ";\n");
889 }
890
891 /* If there are both fields and methods, put a space between. */
892 len = TYPE_NFN_FIELDS (type);
893 if (len && section_type != s_none)
c5aa993b 894 fprintf_filtered (stream, "\n");
c906108c
SS
895
896 /* C++: print out the methods */
897 for (i = 0; i < len; i++)
898 {
899 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
900 int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
901 char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
902 char *name = type_name_no_tag (type);
c5aa993b 903 int is_constructor = name && STREQ (method_name, name);
c906108c
SS
904 for (j = 0; j < len2; j++)
905 {
906 char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
c5aa993b 907 int is_full_physname_constructor =
015a42b4
JB
908 is_constructor_name (physname)
909 || is_destructor_name (physname)
910 || method_name[0] == '~';
911
c906108c
SS
912
913 QUIT;
914 if (TYPE_FN_FIELD_PROTECTED (f, j))
915 {
916 if (section_type != s_protected)
917 {
918 section_type = s_protected;
919 fprintfi_filtered (level + 2, stream,
920 "protected:\n");
921 }
922 }
923 else if (TYPE_FN_FIELD_PRIVATE (f, j))
924 {
925 if (section_type != s_private)
926 {
927 section_type = s_private;
928 fprintfi_filtered (level + 2, stream, "private:\n");
929 }
930 }
931 else
932 {
933 if (section_type != s_public)
934 {
935 section_type = s_public;
936 fprintfi_filtered (level + 2, stream, "public:\n");
937 }
938 }
939
940 print_spaces_filtered (level + 4, stream);
941 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
942 fprintf_filtered (stream, "virtual ");
943 else if (TYPE_FN_FIELD_STATIC_P (f, j))
944 fprintf_filtered (stream, "static ");
945 if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
946 {
947 /* Keep GDB from crashing here. */
948 fprintf_filtered (stream, "<undefined type> %s;\n",
c5aa993b 949 TYPE_FN_FIELD_PHYSNAME (f, j));
c906108c
SS
950 break;
951 }
c5aa993b
JM
952 else if (!is_constructor && /* constructors don't have declared types */
953 !is_full_physname_constructor && /* " " */
dfcd3bfb 954 !is_type_conversion_operator (type, i, j))
c906108c
SS
955 {
956 type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
957 "", stream, -1);
958 fputs_filtered (" ", stream);
959 }
960 if (TYPE_FN_FIELD_STUB (f, j))
961 /* Build something we can demangle. */
962 mangled_name = gdb_mangle_name (type, i, j);
963 else
964 mangled_name = TYPE_FN_FIELD_PHYSNAME (f, j);
965
966 demangled_name =
967 cplus_demangle (mangled_name,
968 DMGL_ANSI | DMGL_PARAMS);
969 if (demangled_name == NULL)
970 {
971 /* in some cases (for instance with the HP demangling),
c5aa993b
JM
972 if a function has more than 10 arguments,
973 the demangling will fail.
974 Let's try to reconstruct the function signature from
975 the symbol information */
c906108c
SS
976 if (!TYPE_FN_FIELD_STUB (f, j))
977 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f, j), "",
978 method_name,
c5aa993b 979 TYPE_FN_FIELD_STATIC_P (f, j),
c906108c
SS
980 stream);
981 else
982 fprintf_filtered (stream, "<badly mangled name '%s'>",
983 mangled_name);
984 }
985 else
986 {
987 char *p;
dfcd3bfb
JM
988 char *demangled_no_class
989 = remove_qualifiers (demangled_name);
c5aa993b 990
dfcd3bfb 991 /* get rid of the `static' appended by the demangler */
c906108c
SS
992 p = strstr (demangled_no_class, " static");
993 if (p != NULL)
994 {
995 int length = p - demangled_no_class;
996 demangled_no_static = (char *) xmalloc (length + 1);
997 strncpy (demangled_no_static, demangled_no_class, length);
c5aa993b 998 *(demangled_no_static + length) = '\0';
c906108c 999 fputs_filtered (demangled_no_static, stream);
b8c9b27d 1000 xfree (demangled_no_static);
c906108c
SS
1001 }
1002 else
1003 fputs_filtered (demangled_no_class, stream);
b8c9b27d 1004 xfree (demangled_name);
c906108c
SS
1005 }
1006
1007 if (TYPE_FN_FIELD_STUB (f, j))
b8c9b27d 1008 xfree (mangled_name);
c906108c
SS
1009
1010 fprintf_filtered (stream, ";\n");
1011 }
1012 }
1013
c4093a6a
JM
1014 fprintfi_filtered (level, stream, "}");
1015
c5aa993b
JM
1016 if (TYPE_LOCALTYPE_PTR (type) && show >= 0)
1017 fprintfi_filtered (level, stream, " (Local at %s:%d)\n",
1018 TYPE_LOCALTYPE_FILE (type),
1019 TYPE_LOCALTYPE_LINE (type));
c906108c 1020 }
c5aa993b
JM
1021 if (TYPE_CODE (type) == TYPE_CODE_TEMPLATE)
1022 goto go_back;
c906108c
SS
1023 break;
1024
1025 case TYPE_CODE_ENUM:
1026 c_type_print_cv_qualifier (type, stream, 0, 1);
1027 /* HP C supports sized enums */
1028 if (hp_som_som_object_present)
c5aa993b
JM
1029 switch (TYPE_LENGTH (type))
1030 {
1031 case 1:
1032 fputs_filtered ("char ", stream);
1033 break;
1034 case 2:
1035 fputs_filtered ("short ", stream);
1036 break;
1037 default:
1038 break;
1039 }
1040 fprintf_filtered (stream, "enum ");
c906108c
SS
1041 /* Print the tag name if it exists.
1042 The aCC compiler emits a spurious
1043 "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
1044 tag for unnamed struct/union/enum's, which we don't
1045 want to print. */
1046 if (TYPE_TAG_NAME (type) != NULL &&
c5aa993b 1047 strncmp (TYPE_TAG_NAME (type), "{unnamed", 8))
c906108c
SS
1048 {
1049 fputs_filtered (TYPE_TAG_NAME (type), stream);
1050 if (show > 0)
1051 fputs_filtered (" ", stream);
1052 }
1053
1054 wrap_here (" ");
1055 if (show < 0)
1056 {
1057 /* If we just printed a tag name, no need to print anything else. */
1058 if (TYPE_TAG_NAME (type) == NULL)
1059 fprintf_filtered (stream, "{...}");
1060 }
1061 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
1062 {
1063 fprintf_filtered (stream, "{");
1064 len = TYPE_NFIELDS (type);
1065 lastval = 0;
1066 for (i = 0; i < len; i++)
1067 {
1068 QUIT;
c5aa993b
JM
1069 if (i)
1070 fprintf_filtered (stream, ", ");
c906108c
SS
1071 wrap_here (" ");
1072 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
1073 if (lastval != TYPE_FIELD_BITPOS (type, i))
1074 {
1075 fprintf_filtered (stream, " = %d", TYPE_FIELD_BITPOS (type, i));
1076 lastval = TYPE_FIELD_BITPOS (type, i);
1077 }
1078 lastval++;
1079 }
1080 fprintf_filtered (stream, "}");
1081 }
1082 break;
1083
1084 case TYPE_CODE_VOID:
1085 fprintf_filtered (stream, "void");
1086 break;
1087
1088 case TYPE_CODE_UNDEF:
1089 fprintf_filtered (stream, "struct <unknown>");
1090 break;
1091
1092 case TYPE_CODE_ERROR:
1093 fprintf_filtered (stream, "<unknown type>");
1094 break;
1095
1096 case TYPE_CODE_RANGE:
1097 /* This should not occur */
1098 fprintf_filtered (stream, "<range type>");
1099 break;
1100
1101 case TYPE_CODE_TEMPLATE:
1102 /* Called on "ptype t" where "t" is a template.
1103 Prints the template header (with args), e.g.:
c5aa993b 1104 template <class T1, class T2> class "
c906108c
SS
1105 and then merges with the struct/union/class code to
1106 print the rest of the definition. */
1107 c_type_print_cv_qualifier (type, stream, 0, 1);
1108 fprintf_filtered (stream, "template <");
c5aa993b
JM
1109 for (i = 0; i < TYPE_NTEMPLATE_ARGS (type); i++)
1110 {
1111 struct template_arg templ_arg;
1112 templ_arg = TYPE_TEMPLATE_ARG (type, i);
1113 fprintf_filtered (stream, "class %s", templ_arg.name);
1114 if (i < TYPE_NTEMPLATE_ARGS (type) - 1)
1115 fprintf_filtered (stream, ", ");
1116 }
c906108c
SS
1117 fprintf_filtered (stream, "> class ");
1118 /* Yuck, factor this out to a subroutine so we can call
1119 it and return to the point marked with the "goback:" label... - RT */
c5aa993b
JM
1120 goto struct_union;
1121 go_back:
1122 if (TYPE_NINSTANTIATIONS (type) > 0)
1123 {
1124 fprintf_filtered (stream, "\ntemplate instantiations:\n");
1125 for (i = 0; i < TYPE_NINSTANTIATIONS (type); i++)
1126 {
1127 fprintf_filtered (stream, " ");
1128 c_type_print_base (TYPE_INSTANTIATION (type, i), stream, 0, level);
1129 if (i < TYPE_NINSTANTIATIONS (type) - 1)
1130 fprintf_filtered (stream, "\n");
1131 }
1132 }
c906108c 1133 break;
c5aa993b 1134
c906108c
SS
1135 default:
1136 /* Handle types not explicitly handled by the other cases,
c5aa993b
JM
1137 such as fundamental types. For these, just print whatever
1138 the type name is, as recorded in the type itself. If there
1139 is no type name, then complain. */
c906108c
SS
1140 if (TYPE_NAME (type) != NULL)
1141 {
c5aa993b 1142 c_type_print_cv_qualifier (type, stream, 0, 1);
c906108c
SS
1143 fputs_filtered (TYPE_NAME (type), stream);
1144 }
1145 else
1146 {
1147 /* At least for dump_symtab, it is important that this not be
1148 an error (). */
1149 fprintf_filtered (stream, "<invalid type code %d>",
1150 TYPE_CODE (type));
1151 }
1152 break;
1153 }
1154}