Back out change to signals.exp (test_handle_all_print): Add setup_xfail for "alpha...
[deliverable/binutils-gdb.git] / gdb / c-typeprint.c
CommitLineData
a8a69e63 1/* Support for printing C and C++ types for GDB, the GNU debugger.
81afee37 2 Copyright 1986, 1988, 1989, 1991, 1993, 1994, 1995, 1996
84bdfea6 3 Free Software Foundation, Inc.
a8a69e63
FF
4
5This file is part of GDB.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program; if not, write to the Free Software
6c9638b4 19Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
a8a69e63
FF
20
21#include "defs.h"
22#include "obstack.h"
23#include "bfd.h" /* Binary File Description */
24#include "symtab.h"
25#include "gdbtypes.h"
26#include "expression.h"
27#include "value.h"
28#include "gdbcore.h"
29#include "target.h"
30#include "command.h"
31#include "gdbcmd.h"
32#include "language.h"
33#include "demangle.h"
34#include "c-lang.h"
35#include "typeprint.h"
36
2b576293 37#include "gdb_string.h"
a8a69e63 38#include <errno.h>
4c664b8d 39#include <ctype.h>
a8a69e63 40
a8a69e63 41static void
199b2450 42c_type_print_args PARAMS ((struct type *, GDB_FILE *));
a8a69e63
FF
43
44static void
199b2450 45c_type_print_varspec_suffix PARAMS ((struct type *, GDB_FILE *, int, int, int));
a8a69e63
FF
46
47static void
199b2450 48cp_type_print_derivation_info PARAMS ((GDB_FILE *, struct type *));
a8a69e63
FF
49
50void
199b2450 51c_type_print_varspec_prefix PARAMS ((struct type *, GDB_FILE *, int, int));
a8a69e63 52
a8a69e63
FF
53\f
54/* Print a description of a type in the format of a
55 typedef for the current language.
56 NEW is the new name for a type TYPE. */
57
58void
59c_typedef_print (type, new, stream)
60 struct type *type;
61 struct symbol *new;
199b2450 62 GDB_FILE *stream;
a8a69e63 63{
5e548861 64 CHECK_TYPEDEF (type);
a8a69e63
FF
65 switch (current_language->la_language)
66 {
67#ifdef _LANG_c
68 case language_c:
69 case language_cplus:
70 fprintf_filtered(stream, "typedef ");
71 type_print(type,"",stream,0);
72 if(TYPE_NAME ((SYMBOL_TYPE (new))) == 0
2e4964ad
FF
73 || !STREQ (TYPE_NAME ((SYMBOL_TYPE (new))), SYMBOL_NAME (new)))
74 fprintf_filtered(stream, " %s", SYMBOL_SOURCE_NAME(new));
a8a69e63
FF
75 break;
76#endif
77#ifdef _LANG_m2
78 case language_m2:
79 fprintf_filtered(stream, "TYPE ");
80 if(!TYPE_NAME(SYMBOL_TYPE(new)) ||
2e4964ad
FF
81 !STREQ (TYPE_NAME(SYMBOL_TYPE(new)), SYMBOL_NAME(new)))
82 fprintf_filtered(stream, "%s = ", SYMBOL_SOURCE_NAME(new));
a8a69e63
FF
83 else
84 fprintf_filtered(stream, "<builtin> = ");
85 type_print(type,"",stream,0);
86 break;
87#endif
a8a69e63
FF
88#ifdef _LANG_chill
89 case language_chill:
6a2eecac
PB
90 fprintf_filtered(stream, "SYNMODE ");
91 if(!TYPE_NAME(SYMBOL_TYPE(new)) ||
92 !STREQ (TYPE_NAME(SYMBOL_TYPE(new)), SYMBOL_NAME(new)))
93 fprintf_filtered(stream, "%s = ", SYMBOL_SOURCE_NAME(new));
94 else
95 fprintf_filtered(stream, "<builtin> = ");
96 type_print(type,"",stream,0);
97 break;
a8a69e63 98#endif
a8a69e63
FF
99 default:
100 error("Language not supported.");
101 }
102 fprintf_filtered(stream, ";\n");
103}
104
105
106/* LEVEL is the depth to indent lines by. */
107
108void
109c_print_type (type, varstring, stream, show, level)
110 struct type *type;
111 char *varstring;
199b2450 112 GDB_FILE *stream;
a8a69e63
FF
113 int show;
114 int level;
115{
116 register enum type_code code;
a8a69e63
FF
117 int demangled_args;
118
5e548861
PB
119 if (show > 0)
120 CHECK_TYPEDEF (type);
121
a8a69e63
FF
122 c_type_print_base (type, stream, show, level);
123 code = TYPE_CODE (type);
124 if ((varstring != NULL && *varstring != '\0')
125 ||
126 /* Need a space if going to print stars or brackets;
127 but not if we will print just a type name. */
128 ((show > 0 || TYPE_NAME (type) == 0)
129 &&
130 (code == TYPE_CODE_PTR || code == TYPE_CODE_FUNC
131 || code == TYPE_CODE_METHOD
132 || code == TYPE_CODE_ARRAY
133 || code == TYPE_CODE_MEMBER
134 || code == TYPE_CODE_REF)))
135 fputs_filtered (" ", stream);
136 c_type_print_varspec_prefix (type, stream, show, 0);
137
2e4964ad 138 fputs_filtered (varstring, stream);
a8a69e63
FF
139
140 /* For demangled function names, we have the arglist as part of the name,
141 so don't print an additional pair of ()'s */
142
f3806e3b 143 demangled_args = strchr(varstring, '(') != NULL;
a8a69e63
FF
144 c_type_print_varspec_suffix (type, stream, show, 0, demangled_args);
145
a8a69e63
FF
146}
147
148/* Print the C++ method arguments ARGS to the file STREAM. */
149
150void
151cp_type_print_method_args (args, prefix, varstring, staticp, stream)
152 struct type **args;
153 char *prefix;
154 char *varstring;
155 int staticp;
199b2450 156 GDB_FILE *stream;
a8a69e63
FF
157{
158 int i;
159
5e81259d
FF
160 fprintf_symbol_filtered (stream, prefix, language_cplus, DMGL_ANSI);
161 fprintf_symbol_filtered (stream, varstring, language_cplus, DMGL_ANSI);
a8a69e63
FF
162 fputs_filtered (" (", stream);
163 if (args && args[!staticp] && args[!staticp]->code != TYPE_CODE_VOID)
164 {
165 i = !staticp; /* skip the class variable */
166 while (1)
167 {
168 type_print (args[i++], "", stream, 0);
169 if (!args[i])
170 {
171 fprintf_filtered (stream, " ...");
172 break;
173 }
174 else if (args[i]->code != TYPE_CODE_VOID)
175 {
176 fprintf_filtered (stream, ", ");
177 }
178 else break;
179 }
180 }
181 fprintf_filtered (stream, ")");
182}
183
184/* If TYPE is a derived type, then print out derivation information.
185 Print only the actual base classes of this type, not the base classes
186 of the base classes. I.E. for the derivation hierarchy:
187
188 class A { int a; };
189 class B : public A {int b; };
190 class C : public B {int c; };
191
192 Print the type of class C as:
193
194 class C : public B {
195 int c;
196 }
197
198 Not as the following (like gdb used to), which is not legal C++ syntax for
199 derived types and may be confused with the multiple inheritance form:
200
201 class C : public B : public A {
202 int c;
203 }
204
205 In general, gdb should try to print the types as closely as possible to
206 the form that they appear in the source code. */
207
208static void
209cp_type_print_derivation_info (stream, type)
199b2450 210 GDB_FILE *stream;
a8a69e63
FF
211 struct type *type;
212{
213 char *name;
214 int i;
215
216 for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
217 {
218 fputs_filtered (i == 0 ? ": " : ", ", stream);
219 fprintf_filtered (stream, "%s%s ",
220 BASETYPE_VIA_PUBLIC (type, i) ? "public" : "private",
221 BASETYPE_VIA_VIRTUAL(type, i) ? " virtual" : "");
222 name = type_name_no_tag (TYPE_BASECLASS (type, i));
223 fprintf_filtered (stream, "%s", name ? name : "(null)");
224 }
225 if (i > 0)
226 {
227 fputs_filtered (" ", stream);
228 }
229}
230
231/* Print any asterisks or open-parentheses needed before the
232 variable name (to describe its type).
233
234 On outermost call, pass 0 for PASSED_A_PTR.
235 On outermost call, SHOW > 0 means should ignore
236 any typename for TYPE and show its details.
237 SHOW is always zero on recursive calls. */
238
239void
240c_type_print_varspec_prefix (type, stream, show, passed_a_ptr)
241 struct type *type;
199b2450 242 GDB_FILE *stream;
a8a69e63
FF
243 int show;
244 int passed_a_ptr;
245{
246 char *name;
247 if (type == 0)
248 return;
249
250 if (TYPE_NAME (type) && show <= 0)
251 return;
252
253 QUIT;
254
255 switch (TYPE_CODE (type))
256 {
257 case TYPE_CODE_PTR:
258 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1);
259 fprintf_filtered (stream, "*");
260 break;
261
262 case TYPE_CODE_MEMBER:
263 if (passed_a_ptr)
264 fprintf_filtered (stream, "(");
265 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
266 fprintf_filtered (stream, " ");
267 name = type_name_no_tag (TYPE_DOMAIN_TYPE (type));
268 if (name)
269 fputs_filtered (name, stream);
270 else
271 c_type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0, passed_a_ptr);
272 fprintf_filtered (stream, "::");
273 break;
274
275 case TYPE_CODE_METHOD:
276 if (passed_a_ptr)
199b2450 277 fprintf_unfiltered (stream, "(");
a8a69e63
FF
278 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
279 if (passed_a_ptr)
280 {
281 fprintf_filtered (stream, " ");
282 c_type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0, passed_a_ptr);
283 fprintf_filtered (stream, "::");
284 }
285 break;
286
287 case TYPE_CODE_REF:
288 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1);
289 fprintf_filtered (stream, "&");
290 break;
291
292 case TYPE_CODE_FUNC:
293 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
294 if (passed_a_ptr)
295 fprintf_filtered (stream, "(");
296 break;
297
298 case TYPE_CODE_ARRAY:
299 c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
300 if (passed_a_ptr)
301 fprintf_filtered (stream, "(");
302 break;
303
304 case TYPE_CODE_UNDEF:
305 case TYPE_CODE_STRUCT:
306 case TYPE_CODE_UNION:
307 case TYPE_CODE_ENUM:
308 case TYPE_CODE_INT:
309 case TYPE_CODE_FLT:
310 case TYPE_CODE_VOID:
311 case TYPE_CODE_ERROR:
312 case TYPE_CODE_CHAR:
313 case TYPE_CODE_BOOL:
314 case TYPE_CODE_SET:
315 case TYPE_CODE_RANGE:
c4413e2c 316 case TYPE_CODE_STRING:
72cd0384 317 case TYPE_CODE_BITSTRING:
22d7f91e 318 case TYPE_CODE_COMPLEX:
5e548861 319 case TYPE_CODE_TYPEDEF:
a8a69e63
FF
320 /* These types need no prefix. They are listed here so that
321 gcc -Wall will reveal any types that haven't been handled. */
322 break;
323 }
324}
325
326static void
327c_type_print_args (type, stream)
328 struct type *type;
199b2450 329 GDB_FILE *stream;
a8a69e63
FF
330{
331 int i;
332 struct type **args;
333
334 fprintf_filtered (stream, "(");
335 args = TYPE_ARG_TYPES (type);
336 if (args != NULL)
337 {
338 if (args[1] == NULL)
339 {
340 fprintf_filtered (stream, "...");
341 }
342 else
343 {
344 for (i = 1;
345 args[i] != NULL && args[i]->code != TYPE_CODE_VOID;
346 i++)
347 {
348 c_print_type (args[i], "", stream, -1, 0);
349 if (args[i+1] == NULL)
350 {
351 fprintf_filtered (stream, "...");
352 }
353 else if (args[i+1]->code != TYPE_CODE_VOID)
354 {
355 fprintf_filtered (stream, ",");
356 wrap_here (" ");
357 }
358 }
359 }
360 }
361 fprintf_filtered (stream, ")");
362}
363
364/* Print any array sizes, function arguments or close parentheses
365 needed after the variable name (to describe its type).
366 Args work like c_type_print_varspec_prefix. */
367
368static void
369c_type_print_varspec_suffix (type, stream, show, passed_a_ptr, demangled_args)
370 struct type *type;
199b2450 371 GDB_FILE *stream;
a8a69e63
FF
372 int show;
373 int passed_a_ptr;
374 int demangled_args;
375{
376 if (type == 0)
377 return;
378
379 if (TYPE_NAME (type) && show <= 0)
380 return;
381
382 QUIT;
383
384 switch (TYPE_CODE (type))
385 {
386 case TYPE_CODE_ARRAY:
387 if (passed_a_ptr)
388 fprintf_filtered (stream, ")");
389
390 fprintf_filtered (stream, "[");
fda36387
PB
391 if (TYPE_LENGTH (type) >= 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
392 && TYPE_ARRAY_UPPER_BOUND_TYPE(type) != BOUND_CANNOT_BE_DETERMINED)
a8a69e63
FF
393 fprintf_filtered (stream, "%d",
394 (TYPE_LENGTH (type)
395 / TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
396 fprintf_filtered (stream, "]");
397
398 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
399 break;
400
401 case TYPE_CODE_MEMBER:
402 if (passed_a_ptr)
403 fprintf_filtered (stream, ")");
404 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
405 break;
406
407 case TYPE_CODE_METHOD:
408 if (passed_a_ptr)
409 fprintf_filtered (stream, ")");
410 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
411 if (passed_a_ptr)
412 {
413 c_type_print_args (type, stream);
414 }
415 break;
416
417 case TYPE_CODE_PTR:
418 case TYPE_CODE_REF:
419 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0);
420 break;
421
422 case TYPE_CODE_FUNC:
a8a69e63
FF
423 if (passed_a_ptr)
424 fprintf_filtered (stream, ")");
425 if (!demangled_args)
27202b6a
PB
426 { int i, len = TYPE_NFIELDS (type);
427 fprintf_filtered (stream, "(");
428 for (i = 0; i < len; i++)
429 {
430 if (i > 0)
431 {
432 fputs_filtered (", ", stream);
433 wrap_here (" ");
434 }
435 c_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0);
436 }
437 fprintf_filtered (stream, ")");
438 }
dac317dc
JK
439 c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
440 passed_a_ptr, 0);
a8a69e63
FF
441 break;
442
443 case TYPE_CODE_UNDEF:
444 case TYPE_CODE_STRUCT:
445 case TYPE_CODE_UNION:
446 case TYPE_CODE_ENUM:
447 case TYPE_CODE_INT:
448 case TYPE_CODE_FLT:
449 case TYPE_CODE_VOID:
450 case TYPE_CODE_ERROR:
451 case TYPE_CODE_CHAR:
452 case TYPE_CODE_BOOL:
453 case TYPE_CODE_SET:
454 case TYPE_CODE_RANGE:
c4413e2c 455 case TYPE_CODE_STRING:
72cd0384 456 case TYPE_CODE_BITSTRING:
22d7f91e 457 case TYPE_CODE_COMPLEX:
5e548861 458 case TYPE_CODE_TYPEDEF:
a8a69e63
FF
459 /* These types do not need a suffix. They are listed so that
460 gcc -Wall will report types that may not have been considered. */
461 break;
462 }
463}
464
465/* Print the name of the type (or the ultimate pointer target,
466 function value or array element), or the description of a
467 structure or union.
468
875fc229
JK
469 SHOW positive means print details about the type (e.g. enum values),
470 and print structure elements passing SHOW - 1 for show.
0e4ad984 471 SHOW negative means just print the type name or struct tag if there is one.
875fc229
JK
472 If there is no name, print something sensible but concise like
473 "struct {...}".
0e4ad984
JK
474 SHOW zero means just print the type name or struct tag if there is one.
475 If there is no name, print something sensible but not as concise like
476 "struct {int x; int y;}".
875fc229
JK
477
478 LEVEL is the number of spaces to indent by.
a8a69e63
FF
479 We increase it for some recursive calls. */
480
481void
482c_type_print_base (type, stream, show, level)
483 struct type *type;
199b2450 484 GDB_FILE *stream;
a8a69e63
FF
485 int show;
486 int level;
487{
a8a69e63
FF
488 register int i;
489 register int len;
490 register int lastval;
491 char *mangled_name;
492 char *demangled_name;
493 enum {s_none, s_public, s_private, s_protected} section_type;
494 QUIT;
495
496 wrap_here (" ");
497 if (type == NULL)
498 {
499 fputs_filtered ("<type unknown>", stream);
500 return;
501 }
502
503 /* When SHOW is zero or less, and there is a valid type name, then always
b2bebdb0
JK
504 just print the type name directly from the type. */
505 /* If we have "typedef struct foo {. . .} bar;" do we want to print it
506 as "struct foo" or as "bar"? Pick the latter, because C++ folk tend
507 to expect things like "class5 *foo" rather than "struct class5 *foo". */
a8a69e63 508
b2bebdb0
JK
509 if (show <= 0
510 && TYPE_NAME (type) != NULL)
a8a69e63
FF
511 {
512 fputs_filtered (TYPE_NAME (type), stream);
513 return;
514 }
515
5e548861 516 CHECK_TYPEDEF (type);
dda398c3 517
a8a69e63
FF
518 switch (TYPE_CODE (type))
519 {
5e548861 520 case TYPE_CODE_TYPEDEF:
a8a69e63
FF
521 case TYPE_CODE_ARRAY:
522 case TYPE_CODE_PTR:
523 case TYPE_CODE_MEMBER:
524 case TYPE_CODE_REF:
525 case TYPE_CODE_FUNC:
526 case TYPE_CODE_METHOD:
527 c_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
528 break;
529
530 case TYPE_CODE_STRUCT:
8789d972
JK
531 if (HAVE_CPLUS_STRUCT (type))
532 {
8789d972 533 fprintf_filtered (stream, "class ");
8789d972
JK
534 }
535 else
536 {
537 fprintf_filtered (stream, "struct ");
8789d972 538 }
a8a69e63
FF
539 goto struct_union;
540
541 case TYPE_CODE_UNION:
542 fprintf_filtered (stream, "union ");
b2bebdb0
JK
543
544 struct_union:
545 if (TYPE_TAG_NAME (type) != NULL)
8789d972 546 {
b2bebdb0
JK
547 fputs_filtered (TYPE_TAG_NAME (type), stream);
548 if (show > 0)
549 fputs_filtered (" ", stream);
8789d972 550 }
8789d972 551 wrap_here (" ");
0e4ad984 552 if (show < 0)
b2bebdb0
JK
553 {
554 /* If we just printed a tag name, no need to print anything else. */
555 if (TYPE_TAG_NAME (type) == NULL)
556 fprintf_filtered (stream, "{...}");
557 }
0e4ad984 558 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
a8a69e63 559 {
a8a69e63
FF
560 cp_type_print_derivation_info (stream, type);
561
562 fprintf_filtered (stream, "{\n");
563 if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0))
564 {
565 if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
566 fprintfi_filtered (level + 4, stream, "<incomplete type>\n");
567 else
568 fprintfi_filtered (level + 4, stream, "<no data fields>\n");
569 }
570
571 /* Start off with no specific section type, so we can print
572 one for the first field we find, and use that section type
573 thereafter until we find another type. */
574
575 section_type = s_none;
576
577 /* If there is a base class for this type,
578 do not print the field that it occupies. */
579
580 len = TYPE_NFIELDS (type);
581 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
582 {
583 QUIT;
584 /* Don't print out virtual function table. */
81afee37
FF
585 if (STREQN (TYPE_FIELD_NAME (type, i), "_vptr", 5)
586 && is_cplus_marker ((TYPE_FIELD_NAME (type, i))[5]))
a8a69e63
FF
587 continue;
588
589 /* If this is a C++ class we can print the various C++ section
590 labels. */
591
592 if (HAVE_CPLUS_STRUCT (type))
593 {
594 if (TYPE_FIELD_PROTECTED (type, i))
595 {
596 if (section_type != s_protected)
597 {
598 section_type = s_protected;
599 fprintfi_filtered (level + 2, stream,
600 "protected:\n");
601 }
602 }
603 else if (TYPE_FIELD_PRIVATE (type, i))
604 {
605 if (section_type != s_private)
606 {
607 section_type = s_private;
608 fprintfi_filtered (level + 2, stream, "private:\n");
609 }
610 }
611 else
612 {
613 if (section_type != s_public)
614 {
615 section_type = s_public;
616 fprintfi_filtered (level + 2, stream, "public:\n");
617 }
618 }
619 }
620
621 print_spaces_filtered (level + 4, stream);
622 if (TYPE_FIELD_STATIC (type, i))
623 {
624 fprintf_filtered (stream, "static ");
625 }
626 c_print_type (TYPE_FIELD_TYPE (type, i),
627 TYPE_FIELD_NAME (type, i),
628 stream, show - 1, level + 4);
629 if (!TYPE_FIELD_STATIC (type, i)
630 && TYPE_FIELD_PACKED (type, i))
631 {
632 /* It is a bitfield. This code does not attempt
633 to look at the bitpos and reconstruct filler,
634 unnamed fields. This would lead to misleading
635 results if the compiler does not put out fields
636 for such things (I don't know what it does). */
637 fprintf_filtered (stream, " : %d",
638 TYPE_FIELD_BITSIZE (type, i));
639 }
640 fprintf_filtered (stream, ";\n");
641 }
642
643 /* If there are both fields and methods, put a space between. */
644 len = TYPE_NFN_FIELDS (type);
645 if (len && section_type != s_none)
646 fprintf_filtered (stream, "\n");
647
648 /* C++: print out the methods */
649
650 for (i = 0; i < len; i++)
651 {
652 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
653 int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
654 char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
b2bebdb0 655 char *name = type_name_no_tag (type);
2e4964ad 656 int is_constructor = name && STREQ(method_name, name);
a8a69e63
FF
657 for (j = 0; j < len2; j++)
658 {
4c664b8d
PS
659 char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
660 int is_full_physname_constructor =
661 ((physname[0]=='_' && physname[1]=='_' &&
662 (isdigit(physname[2])
663 || physname[2]=='Q'
664 || physname[2]=='t'))
665 || (strncmp(physname, "__ct__", 6) == 0));
666
a8a69e63
FF
667 QUIT;
668 if (TYPE_FN_FIELD_PROTECTED (f, j))
669 {
670 if (section_type != s_protected)
671 {
672 section_type = s_protected;
673 fprintfi_filtered (level + 2, stream,
674 "protected:\n");
675 }
676 }
677 else if (TYPE_FN_FIELD_PRIVATE (f, j))
678 {
679 if (section_type != s_private)
680 {
681 section_type = s_private;
682 fprintfi_filtered (level + 2, stream, "private:\n");
683 }
684 }
685 else
686 {
687 if (section_type != s_public)
688 {
689 section_type = s_public;
690 fprintfi_filtered (level + 2, stream, "public:\n");
691 }
692 }
693
694 print_spaces_filtered (level + 4, stream);
695 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
696 fprintf_filtered (stream, "virtual ");
697 else if (TYPE_FN_FIELD_STATIC_P (f, j))
698 fprintf_filtered (stream, "static ");
699 if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
700 {
701 /* Keep GDB from crashing here. */
199b2450 702 fprintf_unfiltered (stream, "<undefined type> %s;\n",
a8a69e63
FF
703 TYPE_FN_FIELD_PHYSNAME (f, j));
704 break;
705 }
4c664b8d 706 else if (!is_constructor && !is_full_physname_constructor)
a8a69e63
FF
707 {
708 type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
84bdfea6 709 "", stream, -1);
a8a69e63
FF
710 fputs_filtered (" ", stream);
711 }
712 if (TYPE_FN_FIELD_STUB (f, j))
713 {
714 /* Build something we can demangle. */
715 mangled_name = gdb_mangle_name (type, i, j);
716 demangled_name =
4f9bddb4
JK
717 cplus_demangle (mangled_name,
718 DMGL_ANSI | DMGL_PARAMS);
a8a69e63
FF
719 if (demangled_name == NULL)
720 fprintf_filtered (stream, "<badly mangled name %s>",
4f9bddb4
JK
721 mangled_name);
722 else
a8a69e63 723 {
4f9bddb4
JK
724 char *demangled_no_class =
725 strchr (demangled_name, ':');
726
727 if (demangled_no_class == NULL)
728 demangled_no_class = demangled_name;
729 else
730 {
731 if (*++demangled_no_class == ':')
732 ++demangled_no_class;
733 }
734 fputs_filtered (demangled_no_class, stream);
a8a69e63
FF
735 free (demangled_name);
736 }
737 free (mangled_name);
738 }
739 else if (TYPE_FN_FIELD_PHYSNAME (f, j)[0] == '_'
81afee37 740 && is_cplus_marker (TYPE_FN_FIELD_PHYSNAME (f, j)[1]))
a8a69e63
FF
741 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f, j) + 1,
742 "~", method_name, 0, stream);
743 else
744 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f, j), "",
745 method_name,
746 TYPE_FN_FIELD_STATIC_P (f, j),
747 stream);
748
749 fprintf_filtered (stream, ";\n");
750 }
751 }
752
753 fprintfi_filtered (level, stream, "}");
754 }
755 break;
756
757 case TYPE_CODE_ENUM:
758 fprintf_filtered (stream, "enum ");
b2bebdb0 759 if (TYPE_TAG_NAME (type) != NULL)
a8a69e63 760 {
b2bebdb0
JK
761 fputs_filtered (TYPE_TAG_NAME (type), stream);
762 if (show > 0)
763 fputs_filtered (" ", stream);
a8a69e63 764 }
8789d972 765
a8a69e63 766 wrap_here (" ");
0e4ad984 767 if (show < 0)
b2bebdb0
JK
768 {
769 /* If we just printed a tag name, no need to print anything else. */
770 if (TYPE_TAG_NAME (type) == NULL)
771 fprintf_filtered (stream, "{...}");
772 }
0e4ad984 773 else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
a8a69e63
FF
774 {
775 fprintf_filtered (stream, "{");
776 len = TYPE_NFIELDS (type);
777 lastval = 0;
778 for (i = 0; i < len; i++)
779 {
780 QUIT;
781 if (i) fprintf_filtered (stream, ", ");
782 wrap_here (" ");
783 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
784 if (lastval != TYPE_FIELD_BITPOS (type, i))
785 {
786 fprintf_filtered (stream, " = %d", TYPE_FIELD_BITPOS (type, i));
787 lastval = TYPE_FIELD_BITPOS (type, i);
788 }
789 lastval++;
790 }
791 fprintf_filtered (stream, "}");
792 }
793 break;
794
795 case TYPE_CODE_VOID:
796 fprintf_filtered (stream, "void");
797 break;
798
799 case TYPE_CODE_UNDEF:
800 fprintf_filtered (stream, "struct <unknown>");
801 break;
802
803 case TYPE_CODE_ERROR:
804 fprintf_filtered (stream, "<unknown type>");
805 break;
806
807 case TYPE_CODE_RANGE:
808 /* This should not occur */
809 fprintf_filtered (stream, "<range type>");
810 break;
811
812 default:
813 /* Handle types not explicitly handled by the other cases,
814 such as fundamental types. For these, just print whatever
815 the type name is, as recorded in the type itself. If there
816 is no type name, then complain. */
817 if (TYPE_NAME (type) != NULL)
818 {
819 fputs_filtered (TYPE_NAME (type), stream);
820 }
821 else
822 {
fd09c963
JK
823 /* At least for dump_symtab, it is important that this not be
824 an error (). */
825 fprintf_filtered (stream, "<invalid type code %d>",
826 TYPE_CODE (type));
a8a69e63
FF
827 }
828 break;
829 }
830}
831
This page took 0.185984 seconds and 4 git commands to generate.