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