Remove Java support
[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-2016 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
18
19 #include "defs.h"
20 #include "gdb_obstack.h"
21 #include "bfd.h" /* Binary File Description. */
22 #include "symtab.h"
23 #include "gdbtypes.h"
24 #include "expression.h"
25 #include "value.h"
26 #include "gdbcore.h"
27 #include "target.h"
28 #include "language.h"
29 #include "demangle.h"
30 #include "c-lang.h"
31 #include "typeprint.h"
32 #include "cp-abi.h"
33 #include "cp-support.h"
34
35 static void c_type_print_varspec_prefix (struct type *,
36 struct ui_file *,
37 int, int, int,
38 const struct type_print_options *);
39
40 /* Print "const", "volatile", or address space modifiers. */
41 static void c_type_print_modifier (struct type *,
42 struct ui_file *,
43 int, int);
44 \f
45
46 /* A callback function for cp_canonicalize_string_full that uses
47 find_typedef_in_hash. */
48
49 static const char *
50 find_typedef_for_canonicalize (struct type *t, void *data)
51 {
52 return find_typedef_in_hash ((const struct type_print_options *) data, t);
53 }
54
55 /* Print NAME on STREAM. If the 'raw' field of FLAGS is not set,
56 canonicalize NAME using the local typedefs first. */
57
58 static void
59 print_name_maybe_canonical (const char *name,
60 const struct type_print_options *flags,
61 struct ui_file *stream)
62 {
63 char *s = NULL;
64
65 if (!flags->raw)
66 s = cp_canonicalize_string_full (name,
67 find_typedef_for_canonicalize,
68 (void *) flags);
69
70 fputs_filtered (s ? s : name, stream);
71 xfree (s);
72 }
73
74 \f
75
76 /* LEVEL is the depth to indent lines by. */
77
78 void
79 c_print_type (struct type *type,
80 const char *varstring,
81 struct ui_file *stream,
82 int show, int level,
83 const struct type_print_options *flags)
84 {
85 enum type_code code;
86 int demangled_args;
87 int need_post_space;
88 const char *local_name;
89
90 if (show > 0)
91 type = check_typedef (type);
92
93 local_name = find_typedef_in_hash (flags, type);
94 if (local_name != NULL)
95 {
96 fputs_filtered (local_name, stream);
97 if (varstring != NULL && *varstring != '\0')
98 fputs_filtered (" ", stream);
99 }
100 else
101 {
102 c_type_print_base (type, stream, show, level, flags);
103 code = TYPE_CODE (type);
104 if ((varstring != NULL && *varstring != '\0')
105 /* Need a space if going to print stars or brackets;
106 but not if we will print just a type name. */
107 || ((show > 0 || TYPE_NAME (type) == 0)
108 && (code == TYPE_CODE_PTR || code == TYPE_CODE_FUNC
109 || code == TYPE_CODE_METHOD
110 || (code == TYPE_CODE_ARRAY
111 && !TYPE_VECTOR (type))
112 || code == TYPE_CODE_MEMBERPTR
113 || code == TYPE_CODE_METHODPTR
114 || code == TYPE_CODE_REF)))
115 fputs_filtered (" ", stream);
116 need_post_space = (varstring != NULL && strcmp (varstring, "") != 0);
117 c_type_print_varspec_prefix (type, stream, show, 0, need_post_space,
118 flags);
119 }
120
121 if (varstring != NULL)
122 {
123 fputs_filtered (varstring, stream);
124
125 /* For demangled function names, we have the arglist as part of
126 the name, so don't print an additional pair of ()'s. */
127 if (local_name == NULL)
128 {
129 demangled_args = strchr (varstring, '(') != NULL;
130 c_type_print_varspec_suffix (type, stream, show,
131 0, demangled_args,
132 flags);
133 }
134 }
135 }
136
137 /* Print a typedef using C syntax. TYPE is the underlying type.
138 NEW_SYMBOL is the symbol naming the type. STREAM is the stream on
139 which to print. */
140
141 void
142 c_print_typedef (struct type *type,
143 struct symbol *new_symbol,
144 struct ui_file *stream)
145 {
146 type = check_typedef (type);
147 fprintf_filtered (stream, "typedef ");
148 type_print (type, "", stream, 0);
149 if (TYPE_NAME ((SYMBOL_TYPE (new_symbol))) == 0
150 || strcmp (TYPE_NAME ((SYMBOL_TYPE (new_symbol))),
151 SYMBOL_LINKAGE_NAME (new_symbol)) != 0
152 || TYPE_CODE (SYMBOL_TYPE (new_symbol)) == TYPE_CODE_TYPEDEF)
153 fprintf_filtered (stream, " %s", SYMBOL_PRINT_NAME (new_symbol));
154 fprintf_filtered (stream, ";\n");
155 }
156
157 /* If TYPE is a derived type, then print out derivation information.
158 Print only the actual base classes of this type, not the base
159 classes of the base classes. I.e. for the derivation hierarchy:
160
161 class A { int a; };
162 class B : public A {int b; };
163 class C : public B {int c; };
164
165 Print the type of class C as:
166
167 class C : public B {
168 int c;
169 }
170
171 Not as the following (like gdb used to), which is not legal C++
172 syntax for derived types and may be confused with the multiple
173 inheritance form:
174
175 class C : public B : public A {
176 int c;
177 }
178
179 In general, gdb should try to print the types as closely as
180 possible to the form that they appear in the source code. */
181
182 static void
183 cp_type_print_derivation_info (struct ui_file *stream,
184 struct type *type,
185 const struct type_print_options *flags)
186 {
187 const char *name;
188 int i;
189
190 for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
191 {
192 wrap_here (" ");
193 fputs_filtered (i == 0 ? ": " : ", ", stream);
194 fprintf_filtered (stream, "%s%s ",
195 BASETYPE_VIA_PUBLIC (type, i)
196 ? "public" : (TYPE_FIELD_PROTECTED (type, i)
197 ? "protected" : "private"),
198 BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
199 name = type_name_no_tag (TYPE_BASECLASS (type, i));
200 if (name)
201 print_name_maybe_canonical (name, flags, stream);
202 else
203 fprintf_filtered (stream, "(null)");
204 }
205 if (i > 0)
206 {
207 fputs_filtered (" ", stream);
208 }
209 }
210
211 /* Print the C++ method arguments ARGS to the file STREAM. */
212
213 static void
214 cp_type_print_method_args (struct type *mtype, const char *prefix,
215 const char *varstring, int staticp,
216 struct ui_file *stream,
217 const struct type_print_options *flags)
218 {
219 struct field *args = TYPE_FIELDS (mtype);
220 int nargs = TYPE_NFIELDS (mtype);
221 int varargs = TYPE_VARARGS (mtype);
222 int i;
223
224 fprintf_symbol_filtered (stream, prefix,
225 language_cplus, DMGL_ANSI);
226 fprintf_symbol_filtered (stream, varstring,
227 language_cplus, DMGL_ANSI);
228 fputs_filtered ("(", stream);
229
230 /* Skip the class variable. */
231 i = staticp ? 0 : 1;
232 if (nargs > i)
233 {
234 while (i < nargs)
235 {
236 c_print_type (args[i++].type, "", stream, 0, 0, flags);
237
238 if (i == nargs && varargs)
239 fprintf_filtered (stream, ", ...");
240 else if (i < nargs)
241 {
242 fprintf_filtered (stream, ", ");
243 wrap_here (" ");
244 }
245 }
246 }
247 else if (varargs)
248 fprintf_filtered (stream, "...");
249 else if (current_language->la_language == language_cplus)
250 fprintf_filtered (stream, "void");
251
252 fprintf_filtered (stream, ")");
253
254 /* For non-static methods, read qualifiers from the type of
255 THIS. */
256 if (!staticp)
257 {
258 struct type *domain;
259
260 gdb_assert (nargs > 0);
261 gdb_assert (TYPE_CODE (args[0].type) == TYPE_CODE_PTR);
262 domain = TYPE_TARGET_TYPE (args[0].type);
263
264 if (TYPE_CONST (domain))
265 fprintf_filtered (stream, " const");
266
267 if (TYPE_VOLATILE (domain))
268 fprintf_filtered (stream, " volatile");
269
270 if (TYPE_RESTRICT (domain))
271 fprintf_filtered (stream, " restrict");
272
273 if (TYPE_ATOMIC (domain))
274 fprintf_filtered (stream, " _Atomic");
275 }
276 }
277
278
279 /* Print any asterisks or open-parentheses needed before the
280 variable name (to describe its type).
281
282 On outermost call, pass 0 for PASSED_A_PTR.
283 On outermost call, SHOW > 0 means should ignore
284 any typename for TYPE and show its details.
285 SHOW is always zero on recursive calls.
286
287 NEED_POST_SPACE is non-zero when a space will be be needed
288 between a trailing qualifier and a field, variable, or function
289 name. */
290
291 static void
292 c_type_print_varspec_prefix (struct type *type,
293 struct ui_file *stream,
294 int show, int passed_a_ptr,
295 int need_post_space,
296 const struct type_print_options *flags)
297 {
298 const char *name;
299
300 if (type == 0)
301 return;
302
303 if (TYPE_NAME (type) && show <= 0)
304 return;
305
306 QUIT;
307
308 switch (TYPE_CODE (type))
309 {
310 case TYPE_CODE_PTR:
311 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
312 stream, show, 1, 1, flags);
313 fprintf_filtered (stream, "*");
314 c_type_print_modifier (type, stream, 1, need_post_space);
315 break;
316
317 case TYPE_CODE_MEMBERPTR:
318 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
319 stream, show, 0, 0, flags);
320 name = type_name_no_tag (TYPE_SELF_TYPE (type));
321 if (name)
322 print_name_maybe_canonical (name, flags, stream);
323 else
324 c_type_print_base (TYPE_SELF_TYPE (type),
325 stream, -1, passed_a_ptr, flags);
326 fprintf_filtered (stream, "::*");
327 break;
328
329 case TYPE_CODE_METHODPTR:
330 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
331 stream, show, 0, 0, flags);
332 fprintf_filtered (stream, "(");
333 name = type_name_no_tag (TYPE_SELF_TYPE (type));
334 if (name)
335 print_name_maybe_canonical (name, flags, stream);
336 else
337 c_type_print_base (TYPE_SELF_TYPE (type),
338 stream, -1, passed_a_ptr, flags);
339 fprintf_filtered (stream, "::*");
340 break;
341
342 case TYPE_CODE_REF:
343 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
344 stream, show, 1, 0, flags);
345 fprintf_filtered (stream, "&");
346 c_type_print_modifier (type, stream, 1, need_post_space);
347 break;
348
349 case TYPE_CODE_METHOD:
350 case TYPE_CODE_FUNC:
351 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
352 stream, show, 0, 0, flags);
353 if (passed_a_ptr)
354 fprintf_filtered (stream, "(");
355 break;
356
357 case TYPE_CODE_ARRAY:
358 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
359 stream, show, 0, 0, flags);
360 if (passed_a_ptr)
361 fprintf_filtered (stream, "(");
362 break;
363
364 case TYPE_CODE_TYPEDEF:
365 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
366 stream, show, passed_a_ptr, 0, flags);
367 break;
368
369 case TYPE_CODE_UNDEF:
370 case TYPE_CODE_STRUCT:
371 case TYPE_CODE_UNION:
372 case TYPE_CODE_ENUM:
373 case TYPE_CODE_FLAGS:
374 case TYPE_CODE_INT:
375 case TYPE_CODE_FLT:
376 case TYPE_CODE_VOID:
377 case TYPE_CODE_ERROR:
378 case TYPE_CODE_CHAR:
379 case TYPE_CODE_BOOL:
380 case TYPE_CODE_SET:
381 case TYPE_CODE_RANGE:
382 case TYPE_CODE_STRING:
383 case TYPE_CODE_COMPLEX:
384 case TYPE_CODE_NAMESPACE:
385 case TYPE_CODE_DECFLOAT:
386 /* These types need no prefix. They are listed here so that
387 gcc -Wall will reveal any types that haven't been handled. */
388 break;
389 default:
390 error (_("type not handled in c_type_print_varspec_prefix()"));
391 break;
392 }
393 }
394
395 /* Print out "const" and "volatile" attributes,
396 and address space id if present.
397 TYPE is a pointer to the type being printed out.
398 STREAM is the output destination.
399 NEED_PRE_SPACE = 1 indicates an initial white space is needed.
400 NEED_POST_SPACE = 1 indicates a final white space is needed. */
401
402 static void
403 c_type_print_modifier (struct type *type, struct ui_file *stream,
404 int need_pre_space, int need_post_space)
405 {
406 int did_print_modifier = 0;
407 const char *address_space_id;
408
409 /* We don't print `const' qualifiers for references --- since all
410 operators affect the thing referenced, not the reference itself,
411 every reference is `const'. */
412 if (TYPE_CONST (type)
413 && TYPE_CODE (type) != TYPE_CODE_REF)
414 {
415 if (need_pre_space)
416 fprintf_filtered (stream, " ");
417 fprintf_filtered (stream, "const");
418 did_print_modifier = 1;
419 }
420
421 if (TYPE_VOLATILE (type))
422 {
423 if (did_print_modifier || need_pre_space)
424 fprintf_filtered (stream, " ");
425 fprintf_filtered (stream, "volatile");
426 did_print_modifier = 1;
427 }
428
429 if (TYPE_RESTRICT (type))
430 {
431 if (did_print_modifier || need_pre_space)
432 fprintf_filtered (stream, " ");
433 fprintf_filtered (stream, "restrict");
434 did_print_modifier = 1;
435 }
436
437 if (TYPE_ATOMIC (type))
438 {
439 if (did_print_modifier || need_pre_space)
440 fprintf_filtered (stream, " ");
441 fprintf_filtered (stream, "_Atomic");
442 did_print_modifier = 1;
443 }
444
445 address_space_id = address_space_int_to_name (get_type_arch (type),
446 TYPE_INSTANCE_FLAGS (type));
447 if (address_space_id)
448 {
449 if (did_print_modifier || need_pre_space)
450 fprintf_filtered (stream, " ");
451 fprintf_filtered (stream, "@%s", address_space_id);
452 did_print_modifier = 1;
453 }
454
455 if (did_print_modifier && need_post_space)
456 fprintf_filtered (stream, " ");
457 }
458
459
460 /* Print out the arguments of TYPE, which should have TYPE_CODE_METHOD
461 or TYPE_CODE_FUNC, to STREAM. Artificial arguments, such as "this"
462 in non-static methods, are displayed if LINKAGE_NAME is zero. If
463 LINKAGE_NAME is non-zero and LANGUAGE is language_cplus the topmost
464 parameter types get removed their possible const and volatile qualifiers to
465 match demangled linkage name parameters part of such function type.
466 LANGUAGE is the language in which TYPE was defined. This is a necessary
467 evil since this code is used by the C and C++. */
468
469 void
470 c_type_print_args (struct type *type, struct ui_file *stream,
471 int linkage_name, enum language language,
472 const struct type_print_options *flags)
473 {
474 int i;
475 int printed_any = 0;
476
477 fprintf_filtered (stream, "(");
478
479 for (i = 0; i < TYPE_NFIELDS (type); i++)
480 {
481 struct type *param_type;
482
483 if (TYPE_FIELD_ARTIFICIAL (type, i) && linkage_name)
484 continue;
485
486 if (printed_any)
487 {
488 fprintf_filtered (stream, ", ");
489 wrap_here (" ");
490 }
491
492 param_type = TYPE_FIELD_TYPE (type, i);
493
494 if (language == language_cplus && linkage_name)
495 {
496 /* C++ standard, 13.1 Overloadable declarations, point 3, item:
497 - Parameter declarations that differ only in the presence or
498 absence of const and/or volatile are equivalent.
499
500 And the const/volatile qualifiers are not present in the mangled
501 names as produced by GCC. */
502
503 param_type = make_cv_type (0, 0, param_type, NULL);
504 }
505
506 c_print_type (param_type, "", stream, -1, 0, flags);
507 printed_any = 1;
508 }
509
510 if (printed_any && TYPE_VARARGS (type))
511 {
512 /* Print out a trailing ellipsis for varargs functions. Ignore
513 TYPE_VARARGS if the function has no named arguments; that
514 represents unprototyped (K&R style) C functions. */
515 if (printed_any && TYPE_VARARGS (type))
516 {
517 fprintf_filtered (stream, ", ");
518 wrap_here (" ");
519 fprintf_filtered (stream, "...");
520 }
521 }
522 else if (!printed_any
523 && (TYPE_PROTOTYPED (type) || language == language_cplus))
524 fprintf_filtered (stream, "void");
525
526 fprintf_filtered (stream, ")");
527 }
528
529 /* Return true iff the j'th overloading of the i'th method of TYPE
530 is a type conversion operator, like `operator int () { ... }'.
531 When listing a class's methods, we don't print the return type of
532 such operators. */
533
534 static int
535 is_type_conversion_operator (struct type *type, int i, int j)
536 {
537 /* I think the whole idea of recognizing type conversion operators
538 by their name is pretty terrible. But I don't think our present
539 data structure gives us any other way to tell. If you know of
540 some other way, feel free to rewrite this function. */
541 const char *name = TYPE_FN_FIELDLIST_NAME (type, i);
542
543 if (!startswith (name, "operator"))
544 return 0;
545
546 name += 8;
547 if (! strchr (" \t\f\n\r", *name))
548 return 0;
549
550 while (strchr (" \t\f\n\r", *name))
551 name++;
552
553 if (!('a' <= *name && *name <= 'z')
554 && !('A' <= *name && *name <= 'Z')
555 && *name != '_')
556 /* If this doesn't look like the start of an identifier, then it
557 isn't a type conversion operator. */
558 return 0;
559 else if (startswith (name, "new"))
560 name += 3;
561 else if (startswith (name, "delete"))
562 name += 6;
563 else
564 /* If it doesn't look like new or delete, it's a type conversion
565 operator. */
566 return 1;
567
568 /* Is that really the end of the name? */
569 if (('a' <= *name && *name <= 'z')
570 || ('A' <= *name && *name <= 'Z')
571 || ('0' <= *name && *name <= '9')
572 || *name == '_')
573 /* No, so the identifier following "operator" must be a type name,
574 and this is a type conversion operator. */
575 return 1;
576
577 /* That was indeed the end of the name, so it was `operator new' or
578 `operator delete', neither of which are type conversion
579 operators. */
580 return 0;
581 }
582
583 /* Given a C++ qualified identifier QID, strip off the qualifiers,
584 yielding the unqualified name. The return value is a pointer into
585 the original string.
586
587 It's a pity we don't have this information in some more structured
588 form. Even the author of this function feels that writing little
589 parsers like this everywhere is stupid. */
590
591 static char *
592 remove_qualifiers (char *qid)
593 {
594 int quoted = 0; /* Zero if we're not in quotes;
595 '"' if we're in a double-quoted string;
596 '\'' if we're in a single-quoted string. */
597 int depth = 0; /* Number of unclosed parens we've seen. */
598 char *parenstack = (char *) alloca (strlen (qid));
599 char *scan;
600 char *last = 0; /* The character after the rightmost
601 `::' token we've seen so far. */
602
603 for (scan = qid; *scan; scan++)
604 {
605 if (quoted)
606 {
607 if (*scan == quoted)
608 quoted = 0;
609 else if (*scan == '\\' && *(scan + 1))
610 scan++;
611 }
612 else if (scan[0] == ':' && scan[1] == ':')
613 {
614 /* If we're inside parenthesis (i.e., an argument list) or
615 angle brackets (i.e., a list of template arguments), then
616 we don't record the position of this :: token, since it's
617 not relevant to the top-level structure we're trying to
618 operate on. */
619 if (depth == 0)
620 {
621 last = scan + 2;
622 scan++;
623 }
624 }
625 else if (*scan == '"' || *scan == '\'')
626 quoted = *scan;
627 else if (*scan == '(')
628 parenstack[depth++] = ')';
629 else if (*scan == '[')
630 parenstack[depth++] = ']';
631 /* We're going to treat <> as a pair of matching characters,
632 since we're more likely to see those in template id's than
633 real less-than characters. What a crock. */
634 else if (*scan == '<')
635 parenstack[depth++] = '>';
636 else if (*scan == ')' || *scan == ']' || *scan == '>')
637 {
638 if (depth > 0 && parenstack[depth - 1] == *scan)
639 depth--;
640 else
641 {
642 /* We're going to do a little error recovery here. If
643 we don't find a match for *scan on the paren stack,
644 but there is something lower on the stack that does
645 match, we pop the stack to that point. */
646 int i;
647
648 for (i = depth - 1; i >= 0; i--)
649 if (parenstack[i] == *scan)
650 {
651 depth = i;
652 break;
653 }
654 }
655 }
656 }
657
658 if (last)
659 return last;
660 else
661 /* We didn't find any :: tokens at the top level, so declare the
662 whole thing an unqualified identifier. */
663 return qid;
664 }
665
666 /* Print any array sizes, function arguments or close parentheses
667 needed after the variable name (to describe its type).
668 Args work like c_type_print_varspec_prefix. */
669
670 void
671 c_type_print_varspec_suffix (struct type *type,
672 struct ui_file *stream,
673 int show, int passed_a_ptr,
674 int demangled_args,
675 const struct type_print_options *flags)
676 {
677 if (type == 0)
678 return;
679
680 if (TYPE_NAME (type) && show <= 0)
681 return;
682
683 QUIT;
684
685 switch (TYPE_CODE (type))
686 {
687 case TYPE_CODE_ARRAY:
688 {
689 LONGEST low_bound, high_bound;
690 int is_vector = TYPE_VECTOR (type);
691
692 if (passed_a_ptr)
693 fprintf_filtered (stream, ")");
694
695 fprintf_filtered (stream, (is_vector ?
696 " __attribute__ ((vector_size(" : "["));
697 /* Bounds are not yet resolved, print a bounds placeholder instead. */
698 if (TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (type)) == PROP_LOCEXPR
699 || TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (type)) == PROP_LOCLIST)
700 fprintf_filtered (stream, "variable length");
701 else if (get_array_bounds (type, &low_bound, &high_bound))
702 fprintf_filtered (stream, "%s",
703 plongest (high_bound - low_bound + 1));
704 fprintf_filtered (stream, (is_vector ? ")))" : "]"));
705
706 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
707 show, 0, 0, flags);
708 }
709 break;
710
711 case TYPE_CODE_MEMBERPTR:
712 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
713 show, 0, 0, flags);
714 break;
715
716 case TYPE_CODE_METHODPTR:
717 fprintf_filtered (stream, ")");
718 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
719 show, 0, 0, flags);
720 break;
721
722 case TYPE_CODE_PTR:
723 case TYPE_CODE_REF:
724 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
725 show, 1, 0, flags);
726 break;
727
728 case TYPE_CODE_METHOD:
729 case TYPE_CODE_FUNC:
730 if (passed_a_ptr)
731 fprintf_filtered (stream, ")");
732 if (!demangled_args)
733 c_type_print_args (type, stream, 0, current_language->la_language,
734 flags);
735 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
736 show, passed_a_ptr, 0, flags);
737 break;
738
739 case TYPE_CODE_TYPEDEF:
740 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
741 show, passed_a_ptr, 0, flags);
742 break;
743
744 case TYPE_CODE_UNDEF:
745 case TYPE_CODE_STRUCT:
746 case TYPE_CODE_UNION:
747 case TYPE_CODE_FLAGS:
748 case TYPE_CODE_ENUM:
749 case TYPE_CODE_INT:
750 case TYPE_CODE_FLT:
751 case TYPE_CODE_VOID:
752 case TYPE_CODE_ERROR:
753 case TYPE_CODE_CHAR:
754 case TYPE_CODE_BOOL:
755 case TYPE_CODE_SET:
756 case TYPE_CODE_RANGE:
757 case TYPE_CODE_STRING:
758 case TYPE_CODE_COMPLEX:
759 case TYPE_CODE_NAMESPACE:
760 case TYPE_CODE_DECFLOAT:
761 /* These types do not need a suffix. They are listed so that
762 gcc -Wall will report types that may not have been
763 considered. */
764 break;
765 default:
766 error (_("type not handled in c_type_print_varspec_suffix()"));
767 break;
768 }
769 }
770
771 /* A helper for c_type_print_base that displays template
772 parameters and their bindings, if needed.
773
774 TABLE is the local bindings table to use. If NULL, no printing is
775 done. Note that, at this point, TABLE won't have any useful
776 information in it -- but it is also used as a flag to
777 print_name_maybe_canonical to activate searching the global typedef
778 table.
779
780 TYPE is the type whose template arguments are being displayed.
781
782 STREAM is the stream on which to print. */
783
784 static void
785 c_type_print_template_args (const struct type_print_options *flags,
786 struct type *type, struct ui_file *stream)
787 {
788 int first = 1, i;
789
790 if (flags->raw)
791 return;
792
793 for (i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (type); ++i)
794 {
795 struct symbol *sym = TYPE_TEMPLATE_ARGUMENT (type, i);
796
797 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
798 continue;
799
800 if (first)
801 {
802 wrap_here (" ");
803 fprintf_filtered (stream, _("[with %s = "),
804 SYMBOL_LINKAGE_NAME (sym));
805 first = 0;
806 }
807 else
808 {
809 fputs_filtered (", ", stream);
810 wrap_here (" ");
811 fprintf_filtered (stream, "%s = ", SYMBOL_LINKAGE_NAME (sym));
812 }
813
814 c_print_type (SYMBOL_TYPE (sym), "", stream, -1, 0, flags);
815 }
816
817 if (!first)
818 fputs_filtered (_("] "), stream);
819 }
820
821 /* Print the name of the type (or the ultimate pointer target,
822 function value or array element), or the description of a structure
823 or union.
824
825 SHOW positive means print details about the type (e.g. enum
826 values), and print structure elements passing SHOW - 1 for show.
827
828 SHOW negative means just print the type name or struct tag if there
829 is one. If there is no name, print something sensible but concise
830 like "struct {...}".
831
832 SHOW zero means just print the type name or struct tag if there is
833 one. If there is no name, print something sensible but not as
834 concise like "struct {int x; int y;}".
835
836 LEVEL is the number of spaces to indent by.
837 We increase it for some recursive calls. */
838
839 void
840 c_type_print_base (struct type *type, struct ui_file *stream,
841 int show, int level, const struct type_print_options *flags)
842 {
843 int i;
844 int len, real_len;
845 enum
846 {
847 s_none, s_public, s_private, s_protected
848 }
849 section_type;
850 int need_access_label = 0;
851 int j, len2;
852
853 QUIT;
854
855 if (type == NULL)
856 {
857 fputs_filtered (_("<type unknown>"), stream);
858 return;
859 }
860
861 /* When SHOW is zero or less, and there is a valid type name, then
862 always just print the type name directly from the type. */
863 /* If we have "typedef struct foo {. . .} bar;" do we want to print
864 it as "struct foo" or as "bar"? Pick the latter, because C++
865 folk tend to expect things like "class5 *foo" rather than "struct
866 class5 *foo". */
867
868 if (show <= 0
869 && TYPE_NAME (type) != NULL)
870 {
871 c_type_print_modifier (type, stream, 0, 1);
872 print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
873 return;
874 }
875
876 type = check_typedef (type);
877
878 switch (TYPE_CODE (type))
879 {
880 case TYPE_CODE_TYPEDEF:
881 /* If we get here, the typedef doesn't have a name, and we
882 couldn't resolve TYPE_TARGET_TYPE. Not much we can do. */
883 gdb_assert (TYPE_NAME (type) == NULL);
884 gdb_assert (TYPE_TARGET_TYPE (type) == NULL);
885 fprintf_filtered (stream, _("<unnamed typedef>"));
886 break;
887
888 case TYPE_CODE_ARRAY:
889 case TYPE_CODE_PTR:
890 case TYPE_CODE_MEMBERPTR:
891 case TYPE_CODE_REF:
892 case TYPE_CODE_FUNC:
893 case TYPE_CODE_METHOD:
894 case TYPE_CODE_METHODPTR:
895 c_type_print_base (TYPE_TARGET_TYPE (type),
896 stream, show, level, flags);
897 break;
898
899 case TYPE_CODE_STRUCT:
900 case TYPE_CODE_UNION:
901 {
902 struct type_print_options local_flags = *flags;
903 struct type_print_options semi_local_flags = *flags;
904 struct cleanup *local_cleanups = make_cleanup (null_cleanup, NULL);
905
906 local_flags.local_typedefs = NULL;
907 semi_local_flags.local_typedefs = NULL;
908
909 if (!flags->raw)
910 {
911 if (flags->local_typedefs)
912 local_flags.local_typedefs
913 = copy_typedef_hash (flags->local_typedefs);
914 else
915 local_flags.local_typedefs = create_typedef_hash ();
916
917 make_cleanup_free_typedef_hash (local_flags.local_typedefs);
918 }
919
920 c_type_print_modifier (type, stream, 0, 1);
921 if (TYPE_CODE (type) == TYPE_CODE_UNION)
922 fprintf_filtered (stream, "union ");
923 else if (TYPE_DECLARED_CLASS (type))
924 fprintf_filtered (stream, "class ");
925 else
926 fprintf_filtered (stream, "struct ");
927
928 /* Print the tag if it exists. The HP aCC compiler emits a
929 spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed
930 enum}" tag for unnamed struct/union/enum's, which we don't
931 want to print. */
932 if (TYPE_TAG_NAME (type) != NULL
933 && !startswith (TYPE_TAG_NAME (type), "{unnamed"))
934 {
935 /* When printing the tag name, we are still effectively
936 printing in the outer context, hence the use of FLAGS
937 here. */
938 print_name_maybe_canonical (TYPE_TAG_NAME (type), flags, stream);
939 if (show > 0)
940 fputs_filtered (" ", stream);
941 }
942
943 if (show < 0)
944 {
945 /* If we just printed a tag name, no need to print anything
946 else. */
947 if (TYPE_TAG_NAME (type) == NULL)
948 fprintf_filtered (stream, "{...}");
949 }
950 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
951 {
952 struct type *basetype;
953 int vptr_fieldno;
954
955 c_type_print_template_args (&local_flags, type, stream);
956
957 /* Add in template parameters when printing derivation info. */
958 add_template_parameters (local_flags.local_typedefs, type);
959 cp_type_print_derivation_info (stream, type, &local_flags);
960
961 /* This holds just the global typedefs and the template
962 parameters. */
963 semi_local_flags.local_typedefs
964 = copy_typedef_hash (local_flags.local_typedefs);
965 if (semi_local_flags.local_typedefs)
966 make_cleanup_free_typedef_hash (semi_local_flags.local_typedefs);
967
968 /* Now add in the local typedefs. */
969 recursively_update_typedef_hash (local_flags.local_typedefs, type);
970
971 fprintf_filtered (stream, "{\n");
972 if (TYPE_NFIELDS (type) == 0 && TYPE_NFN_FIELDS (type) == 0
973 && TYPE_TYPEDEF_FIELD_COUNT (type) == 0)
974 {
975 if (TYPE_STUB (type))
976 fprintfi_filtered (level + 4, stream,
977 _("<incomplete type>\n"));
978 else
979 fprintfi_filtered (level + 4, stream,
980 _("<no data fields>\n"));
981 }
982
983 /* Start off with no specific section type, so we can print
984 one for the first field we find, and use that section type
985 thereafter until we find another type. */
986
987 section_type = s_none;
988
989 /* For a class, if all members are private, there's no need
990 for a "private:" label; similarly, for a struct or union
991 masquerading as a class, if all members are public, there's
992 no need for a "public:" label. */
993
994 if (TYPE_DECLARED_CLASS (type))
995 {
996 QUIT;
997 len = TYPE_NFIELDS (type);
998 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
999 if (!TYPE_FIELD_PRIVATE (type, i))
1000 {
1001 need_access_label = 1;
1002 break;
1003 }
1004 QUIT;
1005 if (!need_access_label)
1006 {
1007 len2 = TYPE_NFN_FIELDS (type);
1008 for (j = 0; j < len2; j++)
1009 {
1010 len = TYPE_FN_FIELDLIST_LENGTH (type, j);
1011 for (i = 0; i < len; i++)
1012 if (!TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type,
1013 j), i))
1014 {
1015 need_access_label = 1;
1016 break;
1017 }
1018 if (need_access_label)
1019 break;
1020 }
1021 }
1022 }
1023 else
1024 {
1025 QUIT;
1026 len = TYPE_NFIELDS (type);
1027 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
1028 if (TYPE_FIELD_PRIVATE (type, i)
1029 || TYPE_FIELD_PROTECTED (type, i))
1030 {
1031 need_access_label = 1;
1032 break;
1033 }
1034 QUIT;
1035 if (!need_access_label)
1036 {
1037 len2 = TYPE_NFN_FIELDS (type);
1038 for (j = 0; j < len2; j++)
1039 {
1040 QUIT;
1041 len = TYPE_FN_FIELDLIST_LENGTH (type, j);
1042 for (i = 0; i < len; i++)
1043 if (TYPE_FN_FIELD_PROTECTED (TYPE_FN_FIELDLIST1 (type,
1044 j), i)
1045 || TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type,
1046 j),
1047 i))
1048 {
1049 need_access_label = 1;
1050 break;
1051 }
1052 if (need_access_label)
1053 break;
1054 }
1055 }
1056 }
1057
1058 /* If there is a base class for this type,
1059 do not print the field that it occupies. */
1060
1061 len = TYPE_NFIELDS (type);
1062 vptr_fieldno = get_vptr_fieldno (type, &basetype);
1063 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
1064 {
1065 QUIT;
1066
1067 /* If we have a virtual table pointer, omit it. Even if
1068 virtual table pointers are not specifically marked in
1069 the debug info, they should be artificial. */
1070 if ((i == vptr_fieldno && type == basetype)
1071 || TYPE_FIELD_ARTIFICIAL (type, i))
1072 continue;
1073
1074 if (need_access_label)
1075 {
1076 if (TYPE_FIELD_PROTECTED (type, i))
1077 {
1078 if (section_type != s_protected)
1079 {
1080 section_type = s_protected;
1081 fprintfi_filtered (level + 2, stream,
1082 "protected:\n");
1083 }
1084 }
1085 else if (TYPE_FIELD_PRIVATE (type, i))
1086 {
1087 if (section_type != s_private)
1088 {
1089 section_type = s_private;
1090 fprintfi_filtered (level + 2, stream,
1091 "private:\n");
1092 }
1093 }
1094 else
1095 {
1096 if (section_type != s_public)
1097 {
1098 section_type = s_public;
1099 fprintfi_filtered (level + 2, stream,
1100 "public:\n");
1101 }
1102 }
1103 }
1104
1105 print_spaces_filtered (level + 4, stream);
1106 if (field_is_static (&TYPE_FIELD (type, i)))
1107 fprintf_filtered (stream, "static ");
1108 c_print_type (TYPE_FIELD_TYPE (type, i),
1109 TYPE_FIELD_NAME (type, i),
1110 stream, show - 1, level + 4,
1111 &local_flags);
1112 if (!field_is_static (&TYPE_FIELD (type, i))
1113 && TYPE_FIELD_PACKED (type, i))
1114 {
1115 /* It is a bitfield. This code does not attempt
1116 to look at the bitpos and reconstruct filler,
1117 unnamed fields. This would lead to misleading
1118 results if the compiler does not put out fields
1119 for such things (I don't know what it does). */
1120 fprintf_filtered (stream, " : %d",
1121 TYPE_FIELD_BITSIZE (type, i));
1122 }
1123 fprintf_filtered (stream, ";\n");
1124 }
1125
1126 /* If there are both fields and methods, put a blank line
1127 between them. Make sure to count only method that we
1128 will display; artificial methods will be hidden. */
1129 len = TYPE_NFN_FIELDS (type);
1130 if (!flags->print_methods)
1131 len = 0;
1132 real_len = 0;
1133 for (i = 0; i < len; i++)
1134 {
1135 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
1136 int len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
1137 int j;
1138
1139 for (j = 0; j < len2; j++)
1140 if (!TYPE_FN_FIELD_ARTIFICIAL (f, j))
1141 real_len++;
1142 }
1143 if (real_len > 0 && section_type != s_none)
1144 fprintf_filtered (stream, "\n");
1145
1146 /* C++: print out the methods. */
1147 for (i = 0; i < len; i++)
1148 {
1149 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
1150 int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
1151 const char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
1152 const char *name = type_name_no_tag (type);
1153 int is_constructor = name && strcmp (method_name,
1154 name) == 0;
1155
1156 for (j = 0; j < len2; j++)
1157 {
1158 const char *mangled_name;
1159 char *demangled_name;
1160 struct cleanup *inner_cleanup;
1161 const char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
1162 int is_full_physname_constructor =
1163 TYPE_FN_FIELD_CONSTRUCTOR (f, j)
1164 || is_constructor_name (physname)
1165 || is_destructor_name (physname)
1166 || method_name[0] == '~';
1167
1168 /* Do not print out artificial methods. */
1169 if (TYPE_FN_FIELD_ARTIFICIAL (f, j))
1170 continue;
1171
1172 inner_cleanup = make_cleanup (null_cleanup, NULL);
1173
1174 QUIT;
1175 if (TYPE_FN_FIELD_PROTECTED (f, j))
1176 {
1177 if (section_type != s_protected)
1178 {
1179 section_type = s_protected;
1180 fprintfi_filtered (level + 2, stream,
1181 "protected:\n");
1182 }
1183 }
1184 else if (TYPE_FN_FIELD_PRIVATE (f, j))
1185 {
1186 if (section_type != s_private)
1187 {
1188 section_type = s_private;
1189 fprintfi_filtered (level + 2, stream,
1190 "private:\n");
1191 }
1192 }
1193 else
1194 {
1195 if (section_type != s_public)
1196 {
1197 section_type = s_public;
1198 fprintfi_filtered (level + 2, stream,
1199 "public:\n");
1200 }
1201 }
1202
1203 print_spaces_filtered (level + 4, stream);
1204 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
1205 fprintf_filtered (stream, "virtual ");
1206 else if (TYPE_FN_FIELD_STATIC_P (f, j))
1207 fprintf_filtered (stream, "static ");
1208 if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
1209 {
1210 /* Keep GDB from crashing here. */
1211 fprintf_filtered (stream,
1212 _("<undefined type> %s;\n"),
1213 TYPE_FN_FIELD_PHYSNAME (f, j));
1214 break;
1215 }
1216 else if (!is_constructor /* Constructors don't
1217 have declared
1218 types. */
1219 && !is_full_physname_constructor /* " " */
1220 && !is_type_conversion_operator (type, i, j))
1221 {
1222 c_print_type (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
1223 "", stream, -1, 0,
1224 &local_flags);
1225 fputs_filtered (" ", stream);
1226 }
1227 if (TYPE_FN_FIELD_STUB (f, j))
1228 {
1229 char *tem;
1230
1231 /* Build something we can demangle. */
1232 tem = gdb_mangle_name (type, i, j);
1233 make_cleanup (xfree, tem);
1234 mangled_name = tem;
1235 }
1236 else
1237 mangled_name = TYPE_FN_FIELD_PHYSNAME (f, j);
1238
1239 demangled_name =
1240 gdb_demangle (mangled_name,
1241 DMGL_ANSI | DMGL_PARAMS);
1242 if (demangled_name == NULL)
1243 {
1244 /* In some cases (for instance with the HP
1245 demangling), if a function has more than 10
1246 arguments, the demangling will fail.
1247 Let's try to reconstruct the function
1248 signature from the symbol information. */
1249 if (!TYPE_FN_FIELD_STUB (f, j))
1250 {
1251 int staticp = TYPE_FN_FIELD_STATIC_P (f, j);
1252 struct type *mtype = TYPE_FN_FIELD_TYPE (f, j);
1253
1254 cp_type_print_method_args (mtype,
1255 "",
1256 method_name,
1257 staticp,
1258 stream, &local_flags);
1259 }
1260 else
1261 fprintf_filtered (stream,
1262 _("<badly mangled name '%s'>"),
1263 mangled_name);
1264 }
1265 else
1266 {
1267 char *p;
1268 char *demangled_no_class
1269 = remove_qualifiers (demangled_name);
1270
1271 /* Get rid of the `static' appended by the
1272 demangler. */
1273 p = strstr (demangled_no_class, " static");
1274 if (p != NULL)
1275 {
1276 int length = p - demangled_no_class;
1277 char *demangled_no_static;
1278
1279 demangled_no_static
1280 = (char *) xmalloc (length + 1);
1281 strncpy (demangled_no_static,
1282 demangled_no_class, length);
1283 *(demangled_no_static + length) = '\0';
1284 fputs_filtered (demangled_no_static, stream);
1285 xfree (demangled_no_static);
1286 }
1287 else
1288 fputs_filtered (demangled_no_class, stream);
1289 xfree (demangled_name);
1290 }
1291
1292 do_cleanups (inner_cleanup);
1293
1294 fprintf_filtered (stream, ";\n");
1295 }
1296 }
1297
1298 /* Print typedefs defined in this class. */
1299
1300 if (TYPE_TYPEDEF_FIELD_COUNT (type) != 0 && flags->print_typedefs)
1301 {
1302 if (TYPE_NFIELDS (type) != 0 || TYPE_NFN_FIELDS (type) != 0)
1303 fprintf_filtered (stream, "\n");
1304
1305 for (i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); i++)
1306 {
1307 struct type *target = TYPE_TYPEDEF_FIELD_TYPE (type, i);
1308
1309 /* Dereference the typedef declaration itself. */
1310 gdb_assert (TYPE_CODE (target) == TYPE_CODE_TYPEDEF);
1311 target = TYPE_TARGET_TYPE (target);
1312
1313 print_spaces_filtered (level + 4, stream);
1314 fprintf_filtered (stream, "typedef ");
1315
1316 /* We want to print typedefs with substitutions
1317 from the template parameters or globally-known
1318 typedefs but not local typedefs. */
1319 c_print_type (target,
1320 TYPE_TYPEDEF_FIELD_NAME (type, i),
1321 stream, show - 1, level + 4,
1322 &semi_local_flags);
1323 fprintf_filtered (stream, ";\n");
1324 }
1325 }
1326
1327 fprintfi_filtered (level, stream, "}");
1328 }
1329
1330 do_cleanups (local_cleanups);
1331 }
1332 break;
1333
1334 case TYPE_CODE_ENUM:
1335 c_type_print_modifier (type, stream, 0, 1);
1336 fprintf_filtered (stream, "enum ");
1337 if (TYPE_DECLARED_CLASS (type))
1338 fprintf_filtered (stream, "class ");
1339 /* Print the tag name if it exists.
1340 The aCC compiler emits a spurious
1341 "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
1342 tag for unnamed struct/union/enum's, which we don't
1343 want to print. */
1344 if (TYPE_TAG_NAME (type) != NULL
1345 && !startswith (TYPE_TAG_NAME (type), "{unnamed"))
1346 {
1347 print_name_maybe_canonical (TYPE_TAG_NAME (type), flags, stream);
1348 if (show > 0)
1349 fputs_filtered (" ", stream);
1350 }
1351
1352 wrap_here (" ");
1353 if (show < 0)
1354 {
1355 /* If we just printed a tag name, no need to print anything
1356 else. */
1357 if (TYPE_TAG_NAME (type) == NULL)
1358 fprintf_filtered (stream, "{...}");
1359 }
1360 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
1361 {
1362 LONGEST lastval = 0;
1363
1364 /* We can't handle this case perfectly, as DWARF does not
1365 tell us whether or not the underlying type was specified
1366 in the source (and other debug formats don't provide this
1367 at all). We choose to print the underlying type, if it
1368 has a name, when in C++ on the theory that it's better to
1369 print too much than too little; but conversely not to
1370 print something egregiously outside the current
1371 language's syntax. */
1372 if (current_language->la_language == language_cplus
1373 && TYPE_TARGET_TYPE (type) != NULL)
1374 {
1375 struct type *underlying = check_typedef (TYPE_TARGET_TYPE (type));
1376
1377 if (TYPE_NAME (underlying) != NULL)
1378 fprintf_filtered (stream, ": %s ", TYPE_NAME (underlying));
1379 }
1380
1381 fprintf_filtered (stream, "{");
1382 len = TYPE_NFIELDS (type);
1383 for (i = 0; i < len; i++)
1384 {
1385 QUIT;
1386 if (i)
1387 fprintf_filtered (stream, ", ");
1388 wrap_here (" ");
1389 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
1390 if (lastval != TYPE_FIELD_ENUMVAL (type, i))
1391 {
1392 fprintf_filtered (stream, " = %s",
1393 plongest (TYPE_FIELD_ENUMVAL (type, i)));
1394 lastval = TYPE_FIELD_ENUMVAL (type, i);
1395 }
1396 lastval++;
1397 }
1398 fprintf_filtered (stream, "}");
1399 }
1400 break;
1401
1402 case TYPE_CODE_FLAGS:
1403 {
1404 struct type_print_options local_flags = *flags;
1405
1406 local_flags.local_typedefs = NULL;
1407
1408 c_type_print_modifier (type, stream, 0, 1);
1409 fprintf_filtered (stream, "flag ");
1410 print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
1411 if (show > 0)
1412 {
1413 fputs_filtered (" ", stream);
1414 fprintf_filtered (stream, "{\n");
1415 if (TYPE_NFIELDS (type) == 0)
1416 {
1417 if (TYPE_STUB (type))
1418 fprintfi_filtered (level + 4, stream,
1419 _("<incomplete type>\n"));
1420 else
1421 fprintfi_filtered (level + 4, stream,
1422 _("<no data fields>\n"));
1423 }
1424 len = TYPE_NFIELDS (type);
1425 for (i = 0; i < len; i++)
1426 {
1427 QUIT;
1428 print_spaces_filtered (level + 4, stream);
1429 /* We pass "show" here and not "show - 1" to get enum types
1430 printed. There's no other way to see them. */
1431 c_print_type (TYPE_FIELD_TYPE (type, i),
1432 TYPE_FIELD_NAME (type, i),
1433 stream, show, level + 4,
1434 &local_flags);
1435 fprintf_filtered (stream, " @%s",
1436 plongest (TYPE_FIELD_BITPOS (type, i)));
1437 if (TYPE_FIELD_BITSIZE (type, i) > 1)
1438 {
1439 fprintf_filtered (stream, "-%s",
1440 plongest (TYPE_FIELD_BITPOS (type, i)
1441 + TYPE_FIELD_BITSIZE (type, i)
1442 - 1));
1443 }
1444 fprintf_filtered (stream, ";\n");
1445 }
1446 fprintfi_filtered (level, stream, "}");
1447 }
1448 }
1449 break;
1450
1451 case TYPE_CODE_VOID:
1452 fprintf_filtered (stream, "void");
1453 break;
1454
1455 case TYPE_CODE_UNDEF:
1456 fprintf_filtered (stream, _("struct <unknown>"));
1457 break;
1458
1459 case TYPE_CODE_ERROR:
1460 fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
1461 break;
1462
1463 case TYPE_CODE_RANGE:
1464 /* This should not occur. */
1465 fprintf_filtered (stream, _("<range type>"));
1466 break;
1467
1468 case TYPE_CODE_NAMESPACE:
1469 fputs_filtered ("namespace ", stream);
1470 fputs_filtered (TYPE_TAG_NAME (type), stream);
1471 break;
1472
1473 default:
1474 /* Handle types not explicitly handled by the other cases, such
1475 as fundamental types. For these, just print whatever the
1476 type name is, as recorded in the type itself. If there is no
1477 type name, then complain. */
1478 if (TYPE_NAME (type) != NULL)
1479 {
1480 c_type_print_modifier (type, stream, 0, 1);
1481 print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
1482 }
1483 else
1484 {
1485 /* At least for dump_symtab, it is important that this not
1486 be an error (). */
1487 fprintf_filtered (stream, _("<invalid type code %d>"),
1488 TYPE_CODE (type));
1489 }
1490 break;
1491 }
1492 }
This page took 0.062244 seconds and 5 git commands to generate.