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