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