* sparc.h: Fix typo.
[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
c906108c
SS
296 if (TYPE_CONST (type))
297 {
298 if (need_pre_space)
c5aa993b 299 fprintf_filtered (stream, " ");
c906108c
SS
300 fprintf_filtered (stream, "const");
301 flag = 1;
302 }
c5aa993b 303
c906108c
SS
304 if (TYPE_VOLATILE (type))
305 {
306 if (flag || need_pre_space)
c5aa993b 307 fprintf_filtered (stream, " ");
c906108c
SS
308 fprintf_filtered (stream, "volatile");
309 flag = 1;
310 }
311
312 if (flag && need_post_space)
313 fprintf_filtered (stream, " ");
314}
315
316
317
318
319static void
fba45db2 320c_type_print_args (struct type *type, struct ui_file *stream)
c906108c
SS
321{
322 int i;
323 struct type **args;
324
325 fprintf_filtered (stream, "(");
326 args = TYPE_ARG_TYPES (type);
327 if (args != NULL)
328 {
329 if (args[1] == NULL)
330 {
331 fprintf_filtered (stream, "...");
332 }
333 else if ((args[1]->code == TYPE_CODE_VOID) &&
c5aa993b
JM
334 (current_language->la_language == language_cplus))
335 {
336 fprintf_filtered (stream, "void");
337 }
c906108c
SS
338 else
339 {
340 for (i = 1;
341 args[i] != NULL && args[i]->code != TYPE_CODE_VOID;
342 i++)
343 {
344 c_print_type (args[i], "", stream, -1, 0);
c5aa993b 345 if (args[i + 1] == NULL)
c906108c
SS
346 {
347 fprintf_filtered (stream, "...");
348 }
c5aa993b 349 else if (args[i + 1]->code != TYPE_CODE_VOID)
c906108c
SS
350 {
351 fprintf_filtered (stream, ",");
352 wrap_here (" ");
353 }
354 }
355 }
356 }
357 else if (current_language->la_language == language_cplus)
358 {
359 fprintf_filtered (stream, "void");
360 }
c5aa993b 361
c906108c
SS
362 fprintf_filtered (stream, ")");
363}
364
dfcd3bfb
JM
365
366/* Return true iff the j'th overloading of the i'th method of TYPE
367 is a type conversion operator, like `operator int () { ... }'.
368 When listing a class's methods, we don't print the return type of
369 such operators. */
370static int
371is_type_conversion_operator (struct type *type, int i, int j)
372{
373 /* I think the whole idea of recognizing type conversion operators
374 by their name is pretty terrible. But I don't think our present
375 data structure gives us any other way to tell. If you know of
376 some other way, feel free to rewrite this function. */
377 char *name = TYPE_FN_FIELDLIST_NAME (type, i);
378
379 if (strncmp (name, "operator", 8) != 0)
380 return 0;
381
382 name += 8;
383 if (! strchr (" \t\f\n\r", *name))
384 return 0;
385
386 while (strchr (" \t\f\n\r", *name))
387 name++;
388
389 if (strncmp (name, "new", 3) == 0)
390 name += 3;
391 else if (strncmp (name, "delete", 6) == 0)
392 name += 6;
393 else
394 return 0;
395
396 /* Is that really the end of the name? */
397 if (('a' <= *name && *name <= 'z')
398 || ('A' <= *name && *name <= 'Z')
399 || ('0' <= *name && *name <= '9')
400 || *name == '_')
401 /* No, so the identifier following "operator" must be a type name,
402 and this is a type conversion operator. */
403 return 1;
404
405 /* That was indeed the end of the name, so it was `operator new' or
406 `operator delete', neither of which are type conversion operators. */
407 return 0;
408}
409
410
411/* Given a C++ qualified identifier QID, strip off the qualifiers,
412 yielding the unqualified name. The return value is a pointer into
413 the original string.
414
415 It's a pity we don't have this information in some more structured
416 form. Even the author of this function feels that writing little
417 parsers like this everywhere is stupid. */
418static char *
419remove_qualifiers (char *qid)
420{
421 int quoted = 0; /* zero if we're not in quotes;
422 '"' if we're in a double-quoted string;
423 '\'' if we're in a single-quoted string. */
424 int depth = 0; /* number of unclosed parens we've seen */
425 char *parenstack = (char *) alloca (strlen (qid));
426 char *scan;
427 char *last = 0; /* The character after the rightmost
428 `::' token we've seen so far. */
429
430 for (scan = qid; *scan; scan++)
431 {
432 if (quoted)
433 {
434 if (*scan == quoted)
435 quoted = 0;
436 else if (*scan == '\\' && *(scan + 1))
437 scan++;
438 }
439 else if (scan[0] == ':' && scan[1] == ':')
440 {
441 /* If we're inside parenthesis (i.e., an argument list) or
442 angle brackets (i.e., a list of template arguments), then
443 we don't record the position of this :: token, since it's
444 not relevant to the top-level structure we're trying
445 to operate on. */
446 if (depth == 0)
447 {
448 last = scan + 2;
449 scan++;
450 }
451 }
452 else if (*scan == '"' || *scan == '\'')
453 quoted = *scan;
454 else if (*scan == '(')
455 parenstack[depth++] = ')';
456 else if (*scan == '[')
457 parenstack[depth++] = ']';
458 /* We're going to treat <> as a pair of matching characters,
459 since we're more likely to see those in template id's than
460 real less-than characters. What a crock. */
461 else if (*scan == '<')
462 parenstack[depth++] = '>';
463 else if (*scan == ')' || *scan == ']' || *scan == '>')
464 {
465 if (depth > 0 && parenstack[depth - 1] == *scan)
466 depth--;
467 else
468 {
469 /* We're going to do a little error recovery here. If we
470 don't find a match for *scan on the paren stack, but
471 there is something lower on the stack that does match, we
472 pop the stack to that point. */
473 int i;
474
475 for (i = depth - 1; i >= 0; i--)
476 if (parenstack[i] == *scan)
477 {
478 depth = i;
479 break;
480 }
481 }
482 }
483 }
484
485 if (last)
486 return last;
487 else
488 /* We didn't find any :: tokens at the top level, so declare the
489 whole thing an unqualified identifier. */
490 return qid;
491}
492
493
c906108c
SS
494/* Print any array sizes, function arguments or close parentheses
495 needed after the variable name (to describe its type).
496 Args work like c_type_print_varspec_prefix. */
497
498void
fba45db2
KB
499c_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
500 int show, int passed_a_ptr, int demangled_args)
c906108c
SS
501{
502 if (type == 0)
503 return;
504
505 if (TYPE_NAME (type) && show <= 0)
506 return;
507
508 QUIT;
509
510 switch (TYPE_CODE (type))
511 {
512 case TYPE_CODE_ARRAY:
513 if (passed_a_ptr)
514 fprintf_filtered (stream, ")");
c5aa993b 515
c906108c
SS
516 fprintf_filtered (stream, "[");
517 if (TYPE_LENGTH (type) >= 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
c5aa993b 518 && TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
c906108c
SS
519 fprintf_filtered (stream, "%d",
520 (TYPE_LENGTH (type)
521 / TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
522 fprintf_filtered (stream, "]");
c5aa993b 523
c906108c
SS
524 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
525 break;
526
527 case TYPE_CODE_MEMBER:
528 if (passed_a_ptr)
529 fprintf_filtered (stream, ")");
530 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
531 break;
532
533 case TYPE_CODE_METHOD:
534 if (passed_a_ptr)
535 fprintf_filtered (stream, ")");
536 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
537 if (passed_a_ptr)
538 {
539 c_type_print_args (type, stream);
540 }
541 break;
542
543 case TYPE_CODE_PTR:
544 case TYPE_CODE_REF:
545 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0);
546 break;
547
548 case TYPE_CODE_FUNC:
549 if (passed_a_ptr)
550 fprintf_filtered (stream, ")");
551 if (!demangled_args)
c5aa993b
JM
552 {
553 int i, len = TYPE_NFIELDS (type);
c906108c 554 fprintf_filtered (stream, "(");
c5aa993b
JM
555 if ((len == 0) && (current_language->la_language == language_cplus))
556 {
557 fprintf_filtered (stream, "void");
558 }
559 else
560 for (i = 0; i < len; i++)
561 {
562 if (i > 0)
563 {
564 fputs_filtered (", ", stream);
565 wrap_here (" ");
566 }
567 c_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0);
568 }
c906108c
SS
569 fprintf_filtered (stream, ")");
570 }
571 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
572 passed_a_ptr, 0);
573 break;
574
575 case TYPE_CODE_UNDEF:
576 case TYPE_CODE_STRUCT:
577 case TYPE_CODE_UNION:
578 case TYPE_CODE_ENUM:
579 case TYPE_CODE_INT:
580 case TYPE_CODE_FLT:
581 case TYPE_CODE_VOID:
582 case TYPE_CODE_ERROR:
583 case TYPE_CODE_CHAR:
584 case TYPE_CODE_BOOL:
585 case TYPE_CODE_SET:
586 case TYPE_CODE_RANGE:
587 case TYPE_CODE_STRING:
588 case TYPE_CODE_BITSTRING:
589 case TYPE_CODE_COMPLEX:
590 case TYPE_CODE_TYPEDEF:
c4093a6a 591 case TYPE_CODE_TEMPLATE:
c906108c 592 /* These types do not need a suffix. They are listed so that
c5aa993b 593 gcc -Wall will report types that may not have been considered. */
c906108c 594 break;
c4093a6a
JM
595 default:
596 error ("type not handled in c_type_print_varspec_suffix()");
597 break;
c906108c
SS
598 }
599}
600
601/* Print the name of the type (or the ultimate pointer target,
602 function value or array element), or the description of a
603 structure or union.
604
605 SHOW positive means print details about the type (e.g. enum values),
606 and print structure elements passing SHOW - 1 for show.
607 SHOW negative means just print the type name or struct tag if there is one.
608 If there is no name, print something sensible but concise like
609 "struct {...}".
610 SHOW zero means just print the type name or struct tag if there is one.
611 If there is no name, print something sensible but not as concise like
612 "struct {int x; int y;}".
613
614 LEVEL is the number of spaces to indent by.
615 We increase it for some recursive calls. */
616
617void
fba45db2
KB
618c_type_print_base (struct type *type, struct ui_file *stream, int show,
619 int level)
c906108c
SS
620{
621 register int i;
622 register int len;
623 register int lastval;
624 char *mangled_name;
625 char *demangled_name;
626 char *demangled_no_static;
c5aa993b
JM
627 enum
628 {
629 s_none, s_public, s_private, s_protected
630 }
631 section_type;
c906108c
SS
632 int need_access_label = 0;
633 int j, len2;
634
635 QUIT;
636
637 wrap_here (" ");
638 if (type == NULL)
639 {
640 fputs_filtered ("<type unknown>", stream);
641 return;
642 }
643
644 /* When SHOW is zero or less, and there is a valid type name, then always
645 just print the type name directly from the type. */
646 /* If we have "typedef struct foo {. . .} bar;" do we want to print it
647 as "struct foo" or as "bar"? Pick the latter, because C++ folk tend
648 to expect things like "class5 *foo" rather than "struct class5 *foo". */
649
650 if (show <= 0
651 && TYPE_NAME (type) != NULL)
652 {
653 c_type_print_cv_qualifier (type, stream, 0, 1);
654 fputs_filtered (TYPE_NAME (type), stream);
655 return;
656 }
657
658 CHECK_TYPEDEF (type);
c5aa993b 659
c906108c
SS
660 switch (TYPE_CODE (type))
661 {
662 case TYPE_CODE_TYPEDEF:
663 case TYPE_CODE_ARRAY:
664 case TYPE_CODE_PTR:
665 case TYPE_CODE_MEMBER:
666 case TYPE_CODE_REF:
667 case TYPE_CODE_FUNC:
668 case TYPE_CODE_METHOD:
669 c_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
670 break;
671
672 case TYPE_CODE_STRUCT:
673 c_type_print_cv_qualifier (type, stream, 0, 1);
674 /* Note TYPE_CODE_STRUCT and TYPE_CODE_CLASS have the same value,
675 * so we use another means for distinguishing them.
676 */
c5aa993b
JM
677 if (HAVE_CPLUS_STRUCT (type))
678 {
679 switch (TYPE_DECLARED_TYPE (type))
680 {
681 case DECLARED_TYPE_CLASS:
682 fprintf_filtered (stream, "class ");
683 break;
684 case DECLARED_TYPE_UNION:
685 fprintf_filtered (stream, "union ");
686 break;
687 case DECLARED_TYPE_STRUCT:
688 fprintf_filtered (stream, "struct ");
689 break;
690 default:
691 /* If there is a CPLUS_STRUCT, assume class if not
692 * otherwise specified in the declared_type field.
693 */
694 fprintf_filtered (stream, "class ");
695 break;
696 } /* switch */
697 }
698 else
699 {
700 /* If not CPLUS_STRUCT, then assume it's a C struct */
701 fprintf_filtered (stream, "struct ");
702 }
c906108c
SS
703 goto struct_union;
704
705 case TYPE_CODE_UNION:
706 c_type_print_cv_qualifier (type, stream, 0, 1);
707 fprintf_filtered (stream, "union ");
708
709 struct_union:
710
711 /* Print the tag if it exists.
712 * The HP aCC compiler emits
713 * a spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
714 * tag for unnamed struct/union/enum's, which we don't
715 * want to print.
716 */
717 if (TYPE_TAG_NAME (type) != NULL &&
c5aa993b 718 strncmp (TYPE_TAG_NAME (type), "{unnamed", 8))
c906108c
SS
719 {
720 fputs_filtered (TYPE_TAG_NAME (type), stream);
721 if (show > 0)
722 fputs_filtered (" ", stream);
723 }
724 wrap_here (" ");
725 if (show < 0)
726 {
727 /* If we just printed a tag name, no need to print anything else. */
728 if (TYPE_TAG_NAME (type) == NULL)
729 fprintf_filtered (stream, "{...}");
730 }
731 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
732 {
733 cp_type_print_derivation_info (stream, type);
c5aa993b 734
c906108c
SS
735 fprintf_filtered (stream, "{\n");
736 if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0))
737 {
738 if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
739 fprintfi_filtered (level + 4, stream, "<incomplete type>\n");
740 else
741 fprintfi_filtered (level + 4, stream, "<no data fields>\n");
742 }
743
744 /* Start off with no specific section type, so we can print
745 one for the first field we find, and use that section type
746 thereafter until we find another type. */
747
748 section_type = s_none;
749
c5aa993b
JM
750 /* For a class, if all members are private, there's no need
751 for a "private:" label; similarly, for a struct or union
752 masquerading as a class, if all members are public, there's
753 no need for a "public:" label. */
754
755 if ((TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_CLASS) ||
756 (TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_TEMPLATE))
757 {
758 QUIT;
759 len = TYPE_NFIELDS (type);
760 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
761 if (!TYPE_FIELD_PRIVATE (type, i))
762 {
763 need_access_label = 1;
764 break;
765 }
766 QUIT;
767 if (!need_access_label)
768 {
769 len2 = TYPE_NFN_FIELDS (type);
770 for (j = 0; j < len2; j++)
771 {
772 len = TYPE_FN_FIELDLIST_LENGTH (type, j);
773 for (i = 0; i < len; i++)
774 if (!TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type, j), i))
775 {
776 need_access_label = 1;
777 break;
778 }
779 if (need_access_label)
780 break;
781 }
782 }
783 }
784 else if ((TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_STRUCT) ||
785 (TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_UNION))
786 {
787 QUIT;
788 len = TYPE_NFIELDS (type);
789 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
790 if (TYPE_FIELD_PRIVATE (type, i) || TYPE_FIELD_PROTECTED (type, i))
791 {
792 need_access_label = 1;
793 break;
794 }
795 QUIT;
796 if (!need_access_label)
797 {
798 len2 = TYPE_NFN_FIELDS (type);
799 for (j = 0; j < len2; j++)
800 {
801 QUIT;
802 len = TYPE_FN_FIELDLIST_LENGTH (type, j);
803 for (i = 0; i < len; i++)
804 if (TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type, j), i) ||
805 TYPE_FN_FIELD_PROTECTED (TYPE_FN_FIELDLIST1 (type, j), i))
806 {
807 need_access_label = 1;
808 break;
809 }
810 if (need_access_label)
811 break;
812 }
813 }
814 }
c906108c
SS
815
816 /* If there is a base class for this type,
817 do not print the field that it occupies. */
818
819 len = TYPE_NFIELDS (type);
820 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
821 {
822 QUIT;
823 /* Don't print out virtual function table. */
c5aa993b
JM
824 /* HP ANSI C++ case */
825 if (TYPE_HAS_VTABLE (type) && (STREQN (TYPE_FIELD_NAME (type, i), "__vfp", 5)))
826 continue;
827 /* Other compilers */
c906108c
SS
828 if (STREQN (TYPE_FIELD_NAME (type, i), "_vptr", 5)
829 && is_cplus_marker ((TYPE_FIELD_NAME (type, i))[5]))
830 continue;
831
832 /* If this is a C++ class we can print the various C++ section
c5aa993b 833 labels. */
c906108c
SS
834
835 if (HAVE_CPLUS_STRUCT (type) && need_access_label)
836 {
837 if (TYPE_FIELD_PROTECTED (type, i))
838 {
839 if (section_type != s_protected)
840 {
841 section_type = s_protected;
842 fprintfi_filtered (level + 2, stream,
843 "protected:\n");
844 }
845 }
846 else if (TYPE_FIELD_PRIVATE (type, i))
847 {
848 if (section_type != s_private)
849 {
850 section_type = s_private;
851 fprintfi_filtered (level + 2, stream, "private:\n");
852 }
853 }
854 else
855 {
856 if (section_type != s_public)
857 {
858 section_type = s_public;
859 fprintfi_filtered (level + 2, stream, "public:\n");
860 }
861 }
862 }
863
864 print_spaces_filtered (level + 4, stream);
865 if (TYPE_FIELD_STATIC (type, i))
866 {
867 fprintf_filtered (stream, "static ");
868 }
869 c_print_type (TYPE_FIELD_TYPE (type, i),
870 TYPE_FIELD_NAME (type, i),
871 stream, show - 1, level + 4);
872 if (!TYPE_FIELD_STATIC (type, i)
873 && TYPE_FIELD_PACKED (type, i))
874 {
875 /* It is a bitfield. This code does not attempt
876 to look at the bitpos and reconstruct filler,
877 unnamed fields. This would lead to misleading
878 results if the compiler does not put out fields
879 for such things (I don't know what it does). */
880 fprintf_filtered (stream, " : %d",
881 TYPE_FIELD_BITSIZE (type, i));
882 }
883 fprintf_filtered (stream, ";\n");
884 }
885
886 /* If there are both fields and methods, put a space between. */
887 len = TYPE_NFN_FIELDS (type);
888 if (len && section_type != s_none)
c5aa993b 889 fprintf_filtered (stream, "\n");
c906108c
SS
890
891 /* C++: print out the methods */
892 for (i = 0; i < len; i++)
893 {
894 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
895 int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
896 char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
897 char *name = type_name_no_tag (type);
c5aa993b 898 int is_constructor = name && STREQ (method_name, name);
c906108c
SS
899 for (j = 0; j < len2; j++)
900 {
901 char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
c5aa993b 902 int is_full_physname_constructor =
2adab5d0
JB
903 ((physname[0] == '_' && physname[1] == '_'
904 && strchr ("0123456789Qt", physname[2]))
905 || STREQN (physname, "__ct__", 6)
906 || DESTRUCTOR_PREFIX_P (physname)
907 || STREQN (physname, "__dt__", 6));
c906108c
SS
908
909 QUIT;
910 if (TYPE_FN_FIELD_PROTECTED (f, j))
911 {
912 if (section_type != s_protected)
913 {
914 section_type = s_protected;
915 fprintfi_filtered (level + 2, stream,
916 "protected:\n");
917 }
918 }
919 else if (TYPE_FN_FIELD_PRIVATE (f, j))
920 {
921 if (section_type != s_private)
922 {
923 section_type = s_private;
924 fprintfi_filtered (level + 2, stream, "private:\n");
925 }
926 }
927 else
928 {
929 if (section_type != s_public)
930 {
931 section_type = s_public;
932 fprintfi_filtered (level + 2, stream, "public:\n");
933 }
934 }
935
936 print_spaces_filtered (level + 4, stream);
937 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
938 fprintf_filtered (stream, "virtual ");
939 else if (TYPE_FN_FIELD_STATIC_P (f, j))
940 fprintf_filtered (stream, "static ");
941 if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
942 {
943 /* Keep GDB from crashing here. */
944 fprintf_filtered (stream, "<undefined type> %s;\n",
c5aa993b 945 TYPE_FN_FIELD_PHYSNAME (f, j));
c906108c
SS
946 break;
947 }
c5aa993b
JM
948 else if (!is_constructor && /* constructors don't have declared types */
949 !is_full_physname_constructor && /* " " */
dfcd3bfb 950 !is_type_conversion_operator (type, i, j))
c906108c
SS
951 {
952 type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
953 "", stream, -1);
954 fputs_filtered (" ", stream);
955 }
956 if (TYPE_FN_FIELD_STUB (f, j))
957 /* Build something we can demangle. */
958 mangled_name = gdb_mangle_name (type, i, j);
959 else
960 mangled_name = TYPE_FN_FIELD_PHYSNAME (f, j);
961
962 demangled_name =
963 cplus_demangle (mangled_name,
964 DMGL_ANSI | DMGL_PARAMS);
965 if (demangled_name == NULL)
966 {
967 /* in some cases (for instance with the HP demangling),
c5aa993b
JM
968 if a function has more than 10 arguments,
969 the demangling will fail.
970 Let's try to reconstruct the function signature from
971 the symbol information */
c906108c
SS
972 if (!TYPE_FN_FIELD_STUB (f, j))
973 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f, j), "",
974 method_name,
c5aa993b 975 TYPE_FN_FIELD_STATIC_P (f, j),
c906108c
SS
976 stream);
977 else
978 fprintf_filtered (stream, "<badly mangled name '%s'>",
979 mangled_name);
980 }
981 else
982 {
983 char *p;
dfcd3bfb
JM
984 char *demangled_no_class
985 = remove_qualifiers (demangled_name);
c5aa993b 986
dfcd3bfb 987 /* get rid of the `static' appended by the demangler */
c906108c
SS
988 p = strstr (demangled_no_class, " static");
989 if (p != NULL)
990 {
991 int length = p - demangled_no_class;
992 demangled_no_static = (char *) xmalloc (length + 1);
993 strncpy (demangled_no_static, demangled_no_class, length);
c5aa993b 994 *(demangled_no_static + length) = '\0';
c906108c 995 fputs_filtered (demangled_no_static, stream);
b8c9b27d 996 xfree (demangled_no_static);
c906108c
SS
997 }
998 else
999 fputs_filtered (demangled_no_class, stream);
b8c9b27d 1000 xfree (demangled_name);
c906108c
SS
1001 }
1002
1003 if (TYPE_FN_FIELD_STUB (f, j))
b8c9b27d 1004 xfree (mangled_name);
c906108c
SS
1005
1006 fprintf_filtered (stream, ";\n");
1007 }
1008 }
1009
c4093a6a
JM
1010 fprintfi_filtered (level, stream, "}");
1011
c5aa993b
JM
1012 if (TYPE_LOCALTYPE_PTR (type) && show >= 0)
1013 fprintfi_filtered (level, stream, " (Local at %s:%d)\n",
1014 TYPE_LOCALTYPE_FILE (type),
1015 TYPE_LOCALTYPE_LINE (type));
c906108c 1016 }
c5aa993b
JM
1017 if (TYPE_CODE (type) == TYPE_CODE_TEMPLATE)
1018 goto go_back;
c906108c
SS
1019 break;
1020
1021 case TYPE_CODE_ENUM:
1022 c_type_print_cv_qualifier (type, stream, 0, 1);
1023 /* HP C supports sized enums */
1024 if (hp_som_som_object_present)
c5aa993b
JM
1025 switch (TYPE_LENGTH (type))
1026 {
1027 case 1:
1028 fputs_filtered ("char ", stream);
1029 break;
1030 case 2:
1031 fputs_filtered ("short ", stream);
1032 break;
1033 default:
1034 break;
1035 }
1036 fprintf_filtered (stream, "enum ");
c906108c
SS
1037 /* Print the tag name if it exists.
1038 The aCC compiler emits a spurious
1039 "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
1040 tag for unnamed struct/union/enum's, which we don't
1041 want to print. */
1042 if (TYPE_TAG_NAME (type) != NULL &&
c5aa993b 1043 strncmp (TYPE_TAG_NAME (type), "{unnamed", 8))
c906108c
SS
1044 {
1045 fputs_filtered (TYPE_TAG_NAME (type), stream);
1046 if (show > 0)
1047 fputs_filtered (" ", stream);
1048 }
1049
1050 wrap_here (" ");
1051 if (show < 0)
1052 {
1053 /* If we just printed a tag name, no need to print anything else. */
1054 if (TYPE_TAG_NAME (type) == NULL)
1055 fprintf_filtered (stream, "{...}");
1056 }
1057 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
1058 {
1059 fprintf_filtered (stream, "{");
1060 len = TYPE_NFIELDS (type);
1061 lastval = 0;
1062 for (i = 0; i < len; i++)
1063 {
1064 QUIT;
c5aa993b
JM
1065 if (i)
1066 fprintf_filtered (stream, ", ");
c906108c
SS
1067 wrap_here (" ");
1068 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
1069 if (lastval != TYPE_FIELD_BITPOS (type, i))
1070 {
1071 fprintf_filtered (stream, " = %d", TYPE_FIELD_BITPOS (type, i));
1072 lastval = TYPE_FIELD_BITPOS (type, i);
1073 }
1074 lastval++;
1075 }
1076 fprintf_filtered (stream, "}");
1077 }
1078 break;
1079
1080 case TYPE_CODE_VOID:
1081 fprintf_filtered (stream, "void");
1082 break;
1083
1084 case TYPE_CODE_UNDEF:
1085 fprintf_filtered (stream, "struct <unknown>");
1086 break;
1087
1088 case TYPE_CODE_ERROR:
1089 fprintf_filtered (stream, "<unknown type>");
1090 break;
1091
1092 case TYPE_CODE_RANGE:
1093 /* This should not occur */
1094 fprintf_filtered (stream, "<range type>");
1095 break;
1096
1097 case TYPE_CODE_TEMPLATE:
1098 /* Called on "ptype t" where "t" is a template.
1099 Prints the template header (with args), e.g.:
c5aa993b 1100 template <class T1, class T2> class "
c906108c
SS
1101 and then merges with the struct/union/class code to
1102 print the rest of the definition. */
1103 c_type_print_cv_qualifier (type, stream, 0, 1);
1104 fprintf_filtered (stream, "template <");
c5aa993b
JM
1105 for (i = 0; i < TYPE_NTEMPLATE_ARGS (type); i++)
1106 {
1107 struct template_arg templ_arg;
1108 templ_arg = TYPE_TEMPLATE_ARG (type, i);
1109 fprintf_filtered (stream, "class %s", templ_arg.name);
1110 if (i < TYPE_NTEMPLATE_ARGS (type) - 1)
1111 fprintf_filtered (stream, ", ");
1112 }
c906108c
SS
1113 fprintf_filtered (stream, "> class ");
1114 /* Yuck, factor this out to a subroutine so we can call
1115 it and return to the point marked with the "goback:" label... - RT */
c5aa993b
JM
1116 goto struct_union;
1117 go_back:
1118 if (TYPE_NINSTANTIATIONS (type) > 0)
1119 {
1120 fprintf_filtered (stream, "\ntemplate instantiations:\n");
1121 for (i = 0; i < TYPE_NINSTANTIATIONS (type); i++)
1122 {
1123 fprintf_filtered (stream, " ");
1124 c_type_print_base (TYPE_INSTANTIATION (type, i), stream, 0, level);
1125 if (i < TYPE_NINSTANTIATIONS (type) - 1)
1126 fprintf_filtered (stream, "\n");
1127 }
1128 }
c906108c 1129 break;
c5aa993b 1130
c906108c
SS
1131 default:
1132 /* Handle types not explicitly handled by the other cases,
c5aa993b
JM
1133 such as fundamental types. For these, just print whatever
1134 the type name is, as recorded in the type itself. If there
1135 is no type name, then complain. */
c906108c
SS
1136 if (TYPE_NAME (type) != NULL)
1137 {
c5aa993b 1138 c_type_print_cv_qualifier (type, stream, 0, 1);
c906108c
SS
1139 fputs_filtered (TYPE_NAME (type), stream);
1140 }
1141 else
1142 {
1143 /* At least for dump_symtab, it is important that this not be
1144 an error (). */
1145 fprintf_filtered (stream, "<invalid type code %d>",
1146 TYPE_CODE (type));
1147 }
1148 break;
1149 }
1150}
This page took 0.135948 seconds and 4 git commands to generate.