2001-04-26 Michael Snyder <msnyder@redhat.com>
[deliverable/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"
36
37#include "gdb_string.h"
38#include <errno.h>
c906108c
SS
39
40/* Flag indicating target was compiled by HP compiler */
41extern int hp_som_som_object_present;
42
d9fcf2fb
JM
43static void cp_type_print_method_args (struct type ** args, char *prefix,
44 char *varstring, int staticp,
45 struct ui_file *stream);
392a587b 46
d9fcf2fb 47static void c_type_print_args (struct type *, struct ui_file *);
c906108c 48
d9fcf2fb 49static void cp_type_print_derivation_info (struct ui_file *, struct type *);
c906108c 50
d9fcf2fb
JM
51void c_type_print_varspec_prefix (struct type *, struct ui_file *, int,
52 int);
c906108c 53
d9fcf2fb
JM
54static void c_type_print_cv_qualifier (struct type *, struct ui_file *,
55 int, int);
c5aa993b 56\f
c906108c
SS
57
58
c906108c
SS
59
60/* LEVEL is the depth to indent lines by. */
61
62void
fba45db2
KB
63c_print_type (struct type *type, char *varstring, struct ui_file *stream,
64 int show, int level)
c906108c
SS
65{
66 register enum type_code code;
67 int demangled_args;
68
69 if (show > 0)
70 CHECK_TYPEDEF (type);
71
72 c_type_print_base (type, stream, show, level);
73 code = TYPE_CODE (type);
74 if ((varstring != NULL && *varstring != '\0')
75 ||
c5aa993b
JM
76 /* Need a space if going to print stars or brackets;
77 but not if we will print just a type name. */
c906108c
SS
78 ((show > 0 || TYPE_NAME (type) == 0)
79 &&
80 (code == TYPE_CODE_PTR || code == TYPE_CODE_FUNC
81 || code == TYPE_CODE_METHOD
82 || code == TYPE_CODE_ARRAY
83 || code == TYPE_CODE_MEMBER
84 || code == TYPE_CODE_REF)))
85 fputs_filtered (" ", stream);
86 c_type_print_varspec_prefix (type, stream, show, 0);
87
88 if (varstring != NULL)
89 {
90 fputs_filtered (varstring, stream);
91
92 /* For demangled function names, we have the arglist as part of the name,
c5aa993b 93 so don't print an additional pair of ()'s */
c906108c 94
c5aa993b 95 demangled_args = strchr (varstring, '(') != NULL;
c906108c
SS
96 c_type_print_varspec_suffix (type, stream, show, 0, demangled_args);
97 }
98}
c5aa993b 99
c906108c
SS
100/* If TYPE is a derived type, then print out derivation information.
101 Print only the actual base classes of this type, not the base classes
102 of the base classes. I.E. for the derivation hierarchy:
103
c5aa993b
JM
104 class A { int a; };
105 class B : public A {int b; };
106 class C : public B {int c; };
c906108c
SS
107
108 Print the type of class C as:
109
c5aa993b
JM
110 class C : public B {
111 int c;
112 }
c906108c
SS
113
114 Not as the following (like gdb used to), which is not legal C++ syntax for
115 derived types and may be confused with the multiple inheritance form:
116
c5aa993b
JM
117 class C : public B : public A {
118 int c;
119 }
c906108c
SS
120
121 In general, gdb should try to print the types as closely as possible to
122 the form that they appear in the source code.
123 Note that in case of protected derivation gcc will not say 'protected'
124 but 'private'. The HP's aCC compiler emits specific information for
125 derivation via protected inheritance, so gdb can print it out */
126
127static void
fba45db2 128cp_type_print_derivation_info (struct ui_file *stream, struct type *type)
c906108c
SS
129{
130 char *name;
131 int i;
132
133 for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
134 {
135 fputs_filtered (i == 0 ? ": " : ", ", stream);
136 fprintf_filtered (stream, "%s%s ",
c5aa993b
JM
137 BASETYPE_VIA_PUBLIC (type, i) ? "public"
138 : (TYPE_FIELD_PROTECTED (type, i) ? "protected" : "private"),
139 BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
c906108c
SS
140 name = type_name_no_tag (TYPE_BASECLASS (type, i));
141 fprintf_filtered (stream, "%s", name ? name : "(null)");
142 }
143 if (i > 0)
144 {
145 fputs_filtered (" ", stream);
146 }
147}
148/* Print the C++ method arguments ARGS to the file STREAM. */
c5aa993b 149
392a587b 150static void
fba45db2
KB
151cp_type_print_method_args (struct type **args, char *prefix, char *varstring,
152 int staticp, struct ui_file *stream)
c906108c
SS
153{
154 int i;
c5aa993b 155
c906108c
SS
156 fprintf_symbol_filtered (stream, prefix, language_cplus, DMGL_ANSI);
157 fprintf_symbol_filtered (stream, varstring, language_cplus, DMGL_ANSI);
158 fputs_filtered ("(", stream);
159 if (args && args[!staticp] && args[!staticp]->code != TYPE_CODE_VOID)
160 {
c5aa993b 161 i = !staticp; /* skip the class variable */
c906108c 162 while (1)
c5aa993b
JM
163 {
164 type_print (args[i++], "", stream, 0);
165 if (!args[i])
166 {
167 fprintf_filtered (stream, " ...");
168 break;
169 }
170 else if (args[i]->code != TYPE_CODE_VOID)
171 {
172 fprintf_filtered (stream, ", ");
173 }
174 else
175 break;
176 }
c906108c
SS
177 }
178 else if (current_language->la_language == language_cplus)
179 {
180 fprintf_filtered (stream, "void");
181 }
c5aa993b 182
c906108c
SS
183 fprintf_filtered (stream, ")");
184}
185
186
187/* Print any asterisks or open-parentheses needed before the
188 variable name (to describe its type).
189
190 On outermost call, pass 0 for PASSED_A_PTR.
191 On outermost call, SHOW > 0 means should ignore
192 any typename for TYPE and show its details.
193 SHOW is always zero on recursive calls. */
194
195void
fba45db2
KB
196c_type_print_varspec_prefix (struct type *type, struct ui_file *stream,
197 int show, int passed_a_ptr)
c906108c
SS
198{
199 char *name;
200 if (type == 0)
201 return;
202
203 if (TYPE_NAME (type) && show <= 0)
204 return;
205
206 QUIT;
207
208 switch (TYPE_CODE (type))
209 {
210 case TYPE_CODE_PTR:
211 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1);
212 fprintf_filtered (stream, "*");
213 c_type_print_cv_qualifier (type, stream, 1, 0);
214 break;
215
216 case TYPE_CODE_MEMBER:
217 if (passed_a_ptr)
218 fprintf_filtered (stream, "(");
219 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
220 fprintf_filtered (stream, " ");
221 name = type_name_no_tag (TYPE_DOMAIN_TYPE (type));
222 if (name)
223 fputs_filtered (name, stream);
224 else
c5aa993b 225 c_type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0, passed_a_ptr);
c906108c
SS
226 fprintf_filtered (stream, "::");
227 break;
228
229 case TYPE_CODE_METHOD:
230 if (passed_a_ptr)
231 fprintf_filtered (stream, "(");
232 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
233 if (passed_a_ptr)
234 {
235 fprintf_filtered (stream, " ");
236 c_type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0, passed_a_ptr);
237 fprintf_filtered (stream, "::");
238 }
239 break;
240
241 case TYPE_CODE_REF:
242 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1);
243 fprintf_filtered (stream, "&");
244 c_type_print_cv_qualifier (type, stream, 1, 0);
245 break;
246
247 case TYPE_CODE_FUNC:
248 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
249 if (passed_a_ptr)
250 fprintf_filtered (stream, "(");
251 break;
252
253 case TYPE_CODE_ARRAY:
254 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
255 if (passed_a_ptr)
256 fprintf_filtered (stream, "(");
257 break;
258
259 case TYPE_CODE_UNDEF:
260 case TYPE_CODE_STRUCT:
261 case TYPE_CODE_UNION:
262 case TYPE_CODE_ENUM:
263 case TYPE_CODE_INT:
264 case TYPE_CODE_FLT:
265 case TYPE_CODE_VOID:
266 case TYPE_CODE_ERROR:
267 case TYPE_CODE_CHAR:
268 case TYPE_CODE_BOOL:
269 case TYPE_CODE_SET:
270 case TYPE_CODE_RANGE:
271 case TYPE_CODE_STRING:
272 case TYPE_CODE_BITSTRING:
273 case TYPE_CODE_COMPLEX:
274 case TYPE_CODE_TYPEDEF:
c4093a6a 275 case TYPE_CODE_TEMPLATE:
c906108c 276 /* These types need no prefix. They are listed here so that
c5aa993b 277 gcc -Wall will reveal any types that haven't been handled. */
c906108c 278 break;
c4093a6a
JM
279 default:
280 error ("type not handled in c_type_print_varspec_prefix()");
281 break;
c906108c
SS
282 }
283}
284
285/* Print out "const" and "volatile" attributes.
286 TYPE is a pointer to the type being printed out.
287 STREAM is the output destination.
288 NEED_SPACE = 1 indicates an initial white space is needed */
289
290static void
fba45db2
KB
291c_type_print_cv_qualifier (struct type *type, struct ui_file *stream,
292 int need_pre_space, int need_post_space)
c906108c
SS
293{
294 int flag = 0;
c5aa993b 295
7f0b5c30
JB
296 /* We don't print `const' qualifiers for references --- since all
297 operators affect the thing referenced, not the reference itself,
298 every reference is `const'. */
299 if (TYPE_CONST (type)
300 && TYPE_CODE (type) != TYPE_CODE_REF)
c906108c
SS
301 {
302 if (need_pre_space)
c5aa993b 303 fprintf_filtered (stream, " ");
c906108c
SS
304 fprintf_filtered (stream, "const");
305 flag = 1;
306 }
c5aa993b 307
c906108c
SS
308 if (TYPE_VOLATILE (type))
309 {
310 if (flag || need_pre_space)
c5aa993b 311 fprintf_filtered (stream, " ");
c906108c
SS
312 fprintf_filtered (stream, "volatile");
313 flag = 1;
314 }
315
316 if (flag && need_post_space)
317 fprintf_filtered (stream, " ");
318}
319
320
321
322
323static void
fba45db2 324c_type_print_args (struct type *type, struct ui_file *stream)
c906108c
SS
325{
326 int i;
327 struct type **args;
328
329 fprintf_filtered (stream, "(");
330 args = TYPE_ARG_TYPES (type);
331 if (args != NULL)
332 {
333 if (args[1] == NULL)
334 {
335 fprintf_filtered (stream, "...");
336 }
337 else if ((args[1]->code == TYPE_CODE_VOID) &&
c5aa993b
JM
338 (current_language->la_language == language_cplus))
339 {
340 fprintf_filtered (stream, "void");
341 }
c906108c
SS
342 else
343 {
344 for (i = 1;
345 args[i] != NULL && args[i]->code != TYPE_CODE_VOID;
346 i++)
347 {
348 c_print_type (args[i], "", stream, -1, 0);
c5aa993b 349 if (args[i + 1] == NULL)
c906108c
SS
350 {
351 fprintf_filtered (stream, "...");
352 }
c5aa993b 353 else if (args[i + 1]->code != TYPE_CODE_VOID)
c906108c
SS
354 {
355 fprintf_filtered (stream, ",");
356 wrap_here (" ");
357 }
358 }
359 }
360 }
361 else if (current_language->la_language == language_cplus)
362 {
363 fprintf_filtered (stream, "void");
364 }
c5aa993b 365
c906108c
SS
366 fprintf_filtered (stream, ")");
367}
368
dfcd3bfb
JM
369
370/* Return true iff the j'th overloading of the i'th method of TYPE
371 is a type conversion operator, like `operator int () { ... }'.
372 When listing a class's methods, we don't print the return type of
373 such operators. */
374static int
375is_type_conversion_operator (struct type *type, int i, int j)
376{
377 /* I think the whole idea of recognizing type conversion operators
378 by their name is pretty terrible. But I don't think our present
379 data structure gives us any other way to tell. If you know of
380 some other way, feel free to rewrite this function. */
381 char *name = TYPE_FN_FIELDLIST_NAME (type, i);
382
383 if (strncmp (name, "operator", 8) != 0)
384 return 0;
385
386 name += 8;
387 if (! strchr (" \t\f\n\r", *name))
388 return 0;
389
390 while (strchr (" \t\f\n\r", *name))
391 name++;
392
393 if (strncmp (name, "new", 3) == 0)
394 name += 3;
395 else if (strncmp (name, "delete", 6) == 0)
396 name += 6;
397 else
398 return 0;
399
400 /* Is that really the end of the name? */
401 if (('a' <= *name && *name <= 'z')
402 || ('A' <= *name && *name <= 'Z')
403 || ('0' <= *name && *name <= '9')
404 || *name == '_')
405 /* No, so the identifier following "operator" must be a type name,
406 and this is a type conversion operator. */
407 return 1;
408
409 /* That was indeed the end of the name, so it was `operator new' or
410 `operator delete', neither of which are type conversion operators. */
411 return 0;
412}
413
414
415/* Given a C++ qualified identifier QID, strip off the qualifiers,
416 yielding the unqualified name. The return value is a pointer into
417 the original string.
418
419 It's a pity we don't have this information in some more structured
420 form. Even the author of this function feels that writing little
421 parsers like this everywhere is stupid. */
422static char *
423remove_qualifiers (char *qid)
424{
425 int quoted = 0; /* zero if we're not in quotes;
426 '"' if we're in a double-quoted string;
427 '\'' if we're in a single-quoted string. */
428 int depth = 0; /* number of unclosed parens we've seen */
429 char *parenstack = (char *) alloca (strlen (qid));
430 char *scan;
431 char *last = 0; /* The character after the rightmost
432 `::' token we've seen so far. */
433
434 for (scan = qid; *scan; scan++)
435 {
436 if (quoted)
437 {
438 if (*scan == quoted)
439 quoted = 0;
440 else if (*scan == '\\' && *(scan + 1))
441 scan++;
442 }
443 else if (scan[0] == ':' && scan[1] == ':')
444 {
445 /* If we're inside parenthesis (i.e., an argument list) or
446 angle brackets (i.e., a list of template arguments), then
447 we don't record the position of this :: token, since it's
448 not relevant to the top-level structure we're trying
449 to operate on. */
450 if (depth == 0)
451 {
452 last = scan + 2;
453 scan++;
454 }
455 }
456 else if (*scan == '"' || *scan == '\'')
457 quoted = *scan;
458 else if (*scan == '(')
459 parenstack[depth++] = ')';
460 else if (*scan == '[')
461 parenstack[depth++] = ']';
462 /* We're going to treat <> as a pair of matching characters,
463 since we're more likely to see those in template id's than
464 real less-than characters. What a crock. */
465 else if (*scan == '<')
466 parenstack[depth++] = '>';
467 else if (*scan == ')' || *scan == ']' || *scan == '>')
468 {
469 if (depth > 0 && parenstack[depth - 1] == *scan)
470 depth--;
471 else
472 {
473 /* We're going to do a little error recovery here. If we
474 don't find a match for *scan on the paren stack, but
475 there is something lower on the stack that does match, we
476 pop the stack to that point. */
477 int i;
478
479 for (i = depth - 1; i >= 0; i--)
480 if (parenstack[i] == *scan)
481 {
482 depth = i;
483 break;
484 }
485 }
486 }
487 }
488
489 if (last)
490 return last;
491 else
492 /* We didn't find any :: tokens at the top level, so declare the
493 whole thing an unqualified identifier. */
494 return qid;
495}
496
497
c906108c
SS
498/* Print any array sizes, function arguments or close parentheses
499 needed after the variable name (to describe its type).
500 Args work like c_type_print_varspec_prefix. */
501
502void
fba45db2
KB
503c_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
504 int show, int passed_a_ptr, int demangled_args)
c906108c
SS
505{
506 if (type == 0)
507 return;
508
509 if (TYPE_NAME (type) && show <= 0)
510 return;
511
512 QUIT;
513
514 switch (TYPE_CODE (type))
515 {
516 case TYPE_CODE_ARRAY:
517 if (passed_a_ptr)
518 fprintf_filtered (stream, ")");
c5aa993b 519
c906108c
SS
520 fprintf_filtered (stream, "[");
521 if (TYPE_LENGTH (type) >= 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
c5aa993b 522 && TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
c906108c
SS
523 fprintf_filtered (stream, "%d",
524 (TYPE_LENGTH (type)
525 / TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
526 fprintf_filtered (stream, "]");
c5aa993b 527
c906108c
SS
528 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
529 break;
530
531 case TYPE_CODE_MEMBER:
532 if (passed_a_ptr)
533 fprintf_filtered (stream, ")");
534 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
535 break;
536
537 case TYPE_CODE_METHOD:
538 if (passed_a_ptr)
539 fprintf_filtered (stream, ")");
540 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
541 if (passed_a_ptr)
542 {
543 c_type_print_args (type, stream);
544 }
545 break;
546
547 case TYPE_CODE_PTR:
548 case TYPE_CODE_REF:
549 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0);
550 break;
551
552 case TYPE_CODE_FUNC:
553 if (passed_a_ptr)
554 fprintf_filtered (stream, ")");
555 if (!demangled_args)
c5aa993b
JM
556 {
557 int i, len = TYPE_NFIELDS (type);
c906108c 558 fprintf_filtered (stream, "(");
c5aa993b
JM
559 if ((len == 0) && (current_language->la_language == language_cplus))
560 {
561 fprintf_filtered (stream, "void");
562 }
563 else
564 for (i = 0; i < len; i++)
565 {
566 if (i > 0)
567 {
568 fputs_filtered (", ", stream);
569 wrap_here (" ");
570 }
571 c_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0);
572 }
c906108c
SS
573 fprintf_filtered (stream, ")");
574 }
575 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
576 passed_a_ptr, 0);
577 break;
578
579 case TYPE_CODE_UNDEF:
580 case TYPE_CODE_STRUCT:
581 case TYPE_CODE_UNION:
582 case TYPE_CODE_ENUM:
583 case TYPE_CODE_INT:
584 case TYPE_CODE_FLT:
585 case TYPE_CODE_VOID:
586 case TYPE_CODE_ERROR:
587 case TYPE_CODE_CHAR:
588 case TYPE_CODE_BOOL:
589 case TYPE_CODE_SET:
590 case TYPE_CODE_RANGE:
591 case TYPE_CODE_STRING:
592 case TYPE_CODE_BITSTRING:
593 case TYPE_CODE_COMPLEX:
594 case TYPE_CODE_TYPEDEF:
c4093a6a 595 case TYPE_CODE_TEMPLATE:
c906108c 596 /* These types do not need a suffix. They are listed so that
c5aa993b 597 gcc -Wall will report types that may not have been considered. */
c906108c 598 break;
c4093a6a
JM
599 default:
600 error ("type not handled in c_type_print_varspec_suffix()");
601 break;
c906108c
SS
602 }
603}
604
605/* Print the name of the type (or the ultimate pointer target,
606 function value or array element), or the description of a
607 structure or union.
608
609 SHOW positive means print details about the type (e.g. enum values),
610 and print structure elements passing SHOW - 1 for show.
611 SHOW negative means just print the type name or struct tag if there is one.
612 If there is no name, print something sensible but concise like
613 "struct {...}".
614 SHOW zero means just print the type name or struct tag if there is one.
615 If there is no name, print something sensible but not as concise like
616 "struct {int x; int y;}".
617
618 LEVEL is the number of spaces to indent by.
619 We increase it for some recursive calls. */
620
621void
fba45db2
KB
622c_type_print_base (struct type *type, struct ui_file *stream, int show,
623 int level)
c906108c
SS
624{
625 register int i;
626 register int len;
627 register int lastval;
628 char *mangled_name;
629 char *demangled_name;
630 char *demangled_no_static;
c5aa993b
JM
631 enum
632 {
633 s_none, s_public, s_private, s_protected
634 }
635 section_type;
c906108c
SS
636 int need_access_label = 0;
637 int j, len2;
638
639 QUIT;
640
641 wrap_here (" ");
642 if (type == NULL)
643 {
644 fputs_filtered ("<type unknown>", stream);
645 return;
646 }
647
648 /* When SHOW is zero or less, and there is a valid type name, then always
649 just print the type name directly from the type. */
650 /* If we have "typedef struct foo {. . .} bar;" do we want to print it
651 as "struct foo" or as "bar"? Pick the latter, because C++ folk tend
652 to expect things like "class5 *foo" rather than "struct class5 *foo". */
653
654 if (show <= 0
655 && TYPE_NAME (type) != NULL)
656 {
657 c_type_print_cv_qualifier (type, stream, 0, 1);
658 fputs_filtered (TYPE_NAME (type), stream);
659 return;
660 }
661
662 CHECK_TYPEDEF (type);
c5aa993b 663
c906108c
SS
664 switch (TYPE_CODE (type))
665 {
666 case TYPE_CODE_TYPEDEF:
667 case TYPE_CODE_ARRAY:
668 case TYPE_CODE_PTR:
669 case TYPE_CODE_MEMBER:
670 case TYPE_CODE_REF:
671 case TYPE_CODE_FUNC:
672 case TYPE_CODE_METHOD:
673 c_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
674 break;
675
676 case TYPE_CODE_STRUCT:
677 c_type_print_cv_qualifier (type, stream, 0, 1);
678 /* Note TYPE_CODE_STRUCT and TYPE_CODE_CLASS have the same value,
679 * so we use another means for distinguishing them.
680 */
c5aa993b
JM
681 if (HAVE_CPLUS_STRUCT (type))
682 {
683 switch (TYPE_DECLARED_TYPE (type))
684 {
685 case DECLARED_TYPE_CLASS:
686 fprintf_filtered (stream, "class ");
687 break;
688 case DECLARED_TYPE_UNION:
689 fprintf_filtered (stream, "union ");
690 break;
691 case DECLARED_TYPE_STRUCT:
692 fprintf_filtered (stream, "struct ");
693 break;
694 default:
695 /* If there is a CPLUS_STRUCT, assume class if not
696 * otherwise specified in the declared_type field.
697 */
698 fprintf_filtered (stream, "class ");
699 break;
700 } /* switch */
701 }
702 else
703 {
704 /* If not CPLUS_STRUCT, then assume it's a C struct */
705 fprintf_filtered (stream, "struct ");
706 }
c906108c
SS
707 goto struct_union;
708
709 case TYPE_CODE_UNION:
710 c_type_print_cv_qualifier (type, stream, 0, 1);
711 fprintf_filtered (stream, "union ");
712
713 struct_union:
714
715 /* Print the tag if it exists.
716 * The HP aCC compiler emits
717 * a spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
718 * tag for unnamed struct/union/enum's, which we don't
719 * want to print.
720 */
721 if (TYPE_TAG_NAME (type) != NULL &&
c5aa993b 722 strncmp (TYPE_TAG_NAME (type), "{unnamed", 8))
c906108c
SS
723 {
724 fputs_filtered (TYPE_TAG_NAME (type), stream);
725 if (show > 0)
726 fputs_filtered (" ", stream);
727 }
728 wrap_here (" ");
729 if (show < 0)
730 {
731 /* If we just printed a tag name, no need to print anything else. */
732 if (TYPE_TAG_NAME (type) == NULL)
733 fprintf_filtered (stream, "{...}");
734 }
735 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
736 {
737 cp_type_print_derivation_info (stream, type);
c5aa993b 738
c906108c
SS
739 fprintf_filtered (stream, "{\n");
740 if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0))
741 {
742 if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
743 fprintfi_filtered (level + 4, stream, "<incomplete type>\n");
744 else
745 fprintfi_filtered (level + 4, stream, "<no data fields>\n");
746 }
747
748 /* Start off with no specific section type, so we can print
749 one for the first field we find, and use that section type
750 thereafter until we find another type. */
751
752 section_type = s_none;
753
c5aa993b
JM
754 /* For a class, if all members are private, there's no need
755 for a "private:" label; similarly, for a struct or union
756 masquerading as a class, if all members are public, there's
757 no need for a "public:" label. */
758
759 if ((TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_CLASS) ||
760 (TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_TEMPLATE))
761 {
762 QUIT;
763 len = TYPE_NFIELDS (type);
764 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
765 if (!TYPE_FIELD_PRIVATE (type, i))
766 {
767 need_access_label = 1;
768 break;
769 }
770 QUIT;
771 if (!need_access_label)
772 {
773 len2 = TYPE_NFN_FIELDS (type);
774 for (j = 0; j < len2; j++)
775 {
776 len = TYPE_FN_FIELDLIST_LENGTH (type, j);
777 for (i = 0; i < len; i++)
778 if (!TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type, j), i))
779 {
780 need_access_label = 1;
781 break;
782 }
783 if (need_access_label)
784 break;
785 }
786 }
787 }
788 else if ((TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_STRUCT) ||
789 (TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_UNION))
790 {
791 QUIT;
792 len = TYPE_NFIELDS (type);
793 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
794 if (TYPE_FIELD_PRIVATE (type, i) || TYPE_FIELD_PROTECTED (type, i))
795 {
796 need_access_label = 1;
797 break;
798 }
799 QUIT;
800 if (!need_access_label)
801 {
802 len2 = TYPE_NFN_FIELDS (type);
803 for (j = 0; j < len2; j++)
804 {
805 QUIT;
806 len = TYPE_FN_FIELDLIST_LENGTH (type, j);
807 for (i = 0; i < len; i++)
808 if (TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type, j), i) ||
809 TYPE_FN_FIELD_PROTECTED (TYPE_FN_FIELDLIST1 (type, j), i))
810 {
811 need_access_label = 1;
812 break;
813 }
814 if (need_access_label)
815 break;
816 }
817 }
818 }
c906108c
SS
819
820 /* If there is a base class for this type,
821 do not print the field that it occupies. */
822
823 len = TYPE_NFIELDS (type);
824 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
825 {
826 QUIT;
827 /* Don't print out virtual function table. */
c5aa993b
JM
828 /* HP ANSI C++ case */
829 if (TYPE_HAS_VTABLE (type) && (STREQN (TYPE_FIELD_NAME (type, i), "__vfp", 5)))
830 continue;
831 /* Other compilers */
c906108c
SS
832 if (STREQN (TYPE_FIELD_NAME (type, i), "_vptr", 5)
833 && is_cplus_marker ((TYPE_FIELD_NAME (type, i))[5]))
834 continue;
835
836 /* If this is a C++ class we can print the various C++ section
c5aa993b 837 labels. */
c906108c
SS
838
839 if (HAVE_CPLUS_STRUCT (type) && need_access_label)
840 {
841 if (TYPE_FIELD_PROTECTED (type, i))
842 {
843 if (section_type != s_protected)
844 {
845 section_type = s_protected;
846 fprintfi_filtered (level + 2, stream,
847 "protected:\n");
848 }
849 }
850 else if (TYPE_FIELD_PRIVATE (type, i))
851 {
852 if (section_type != s_private)
853 {
854 section_type = s_private;
855 fprintfi_filtered (level + 2, stream, "private:\n");
856 }
857 }
858 else
859 {
860 if (section_type != s_public)
861 {
862 section_type = s_public;
863 fprintfi_filtered (level + 2, stream, "public:\n");
864 }
865 }
866 }
867
868 print_spaces_filtered (level + 4, stream);
869 if (TYPE_FIELD_STATIC (type, i))
870 {
871 fprintf_filtered (stream, "static ");
872 }
873 c_print_type (TYPE_FIELD_TYPE (type, i),
874 TYPE_FIELD_NAME (type, i),
875 stream, show - 1, level + 4);
876 if (!TYPE_FIELD_STATIC (type, i)
877 && TYPE_FIELD_PACKED (type, i))
878 {
879 /* It is a bitfield. This code does not attempt
880 to look at the bitpos and reconstruct filler,
881 unnamed fields. This would lead to misleading
882 results if the compiler does not put out fields
883 for such things (I don't know what it does). */
884 fprintf_filtered (stream, " : %d",
885 TYPE_FIELD_BITSIZE (type, i));
886 }
887 fprintf_filtered (stream, ";\n");
888 }
889
890 /* If there are both fields and methods, put a space between. */
891 len = TYPE_NFN_FIELDS (type);
892 if (len && section_type != s_none)
c5aa993b 893 fprintf_filtered (stream, "\n");
c906108c
SS
894
895 /* C++: print out the methods */
896 for (i = 0; i < len; i++)
897 {
898 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
899 int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
900 char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
901 char *name = type_name_no_tag (type);
c5aa993b 902 int is_constructor = name && STREQ (method_name, name);
c906108c
SS
903 for (j = 0; j < len2; j++)
904 {
905 char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
c5aa993b 906 int is_full_physname_constructor =
2adab5d0
JB
907 ((physname[0] == '_' && physname[1] == '_'
908 && strchr ("0123456789Qt", physname[2]))
909 || STREQN (physname, "__ct__", 6)
910 || DESTRUCTOR_PREFIX_P (physname)
911 || STREQN (physname, "__dt__", 6));
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}
This page took 0.134232 seconds and 4 git commands to generate.