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