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