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