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