OSDN Git Service

PR other/28797
[pf3gnuchains/gcc-fork.git] / libiberty / cp-demangle.c
1 /* Demangler for g++ V3 ABI.
2    Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
3    Written by Ian Lance Taylor <ian@wasabisystems.com>.
4
5    This file is part of the libiberty library, which is part of GCC.
6
7    This file is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    In addition to the permissions in the GNU General Public License, the
13    Free Software Foundation gives you unlimited permission to link the
14    compiled version of this file into combinations with other programs,
15    and to distribute those combinations without any restriction coming
16    from the use of this file.  (The General Public License restrictions
17    do apply in other respects; for example, they cover modification of
18    the file, and distribution when not linked into a combined
19    executable.)
20
21    This program is distributed in the hope that it will be useful,
22    but WITHOUT ANY WARRANTY; without even the implied warranty of
23    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24    GNU General Public License for more details.
25
26    You should have received a copy of the GNU General Public License
27    along with this program; if not, write to the Free Software
28    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 
29 */
30
31 /* This code implements a demangler for the g++ V3 ABI.  The ABI is
32    described on this web page:
33        http://www.codesourcery.com/cxx-abi/abi.html#mangling
34
35    This code was written while looking at the demangler written by
36    Alex Samuel <samuel@codesourcery.com>.
37
38    This code first pulls the mangled name apart into a list of
39    components, and then walks the list generating the demangled
40    name.
41
42    This file will normally define the following functions, q.v.:
43       char *cplus_demangle_v3(const char *mangled, int options)
44       char *java_demangle_v3(const char *mangled)
45       enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name)
46       enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name)
47
48    Also, the interface to the component list is public, and defined in
49    demangle.h.  The interface consists of these types, which are
50    defined in demangle.h:
51       enum demangle_component_type
52       struct demangle_component
53    and these functions defined in this file:
54       cplus_demangle_fill_name
55       cplus_demangle_fill_extended_operator
56       cplus_demangle_fill_ctor
57       cplus_demangle_fill_dtor
58       cplus_demangle_print
59    and other functions defined in the file cp-demint.c.
60
61    This file also defines some other functions and variables which are
62    only to be used by the file cp-demint.c.
63
64    Preprocessor macros you can define while compiling this file:
65
66    IN_LIBGCC2
67       If defined, this file defines the following function, q.v.:
68          char *__cxa_demangle (const char *mangled, char *buf, size_t *len,
69                                int *status)
70       instead of cplus_demangle_v3() and java_demangle_v3().
71
72    IN_GLIBCPP_V3
73       If defined, this file defines only __cxa_demangle(), and no other
74       publically visible functions or variables.
75
76    STANDALONE_DEMANGLER
77       If defined, this file defines a main() function which demangles
78       any arguments, or, if none, demangles stdin.
79
80    CP_DEMANGLE_DEBUG
81       If defined, turns on debugging mode, which prints information on
82       stdout about the mangled string.  This is not generally useful.
83 */
84
85 #ifdef HAVE_CONFIG_H
86 #include "config.h"
87 #endif
88
89 #include <stdio.h>
90
91 #ifdef HAVE_STDLIB_H
92 #include <stdlib.h>
93 #endif
94 #ifdef HAVE_STRING_H
95 #include <string.h>
96 #endif
97
98 #include "ansidecl.h"
99 #include "libiberty.h"
100 #include "demangle.h"
101 #include "cp-demangle.h"
102
103 /* If IN_GLIBCPP_V3 is defined, some functions are made static.  We
104    also rename them via #define to avoid compiler errors when the
105    static definition conflicts with the extern declaration in a header
106    file.  */
107 #ifdef IN_GLIBCPP_V3
108
109 #define CP_STATIC_IF_GLIBCPP_V3 static
110
111 #define cplus_demangle_fill_name d_fill_name
112 static int d_fill_name (struct demangle_component *, const char *, int);
113
114 #define cplus_demangle_fill_extended_operator d_fill_extended_operator
115 static int
116 d_fill_extended_operator (struct demangle_component *, int,
117                           struct demangle_component *);
118
119 #define cplus_demangle_fill_ctor d_fill_ctor
120 static int
121 d_fill_ctor (struct demangle_component *, enum gnu_v3_ctor_kinds,
122              struct demangle_component *);
123
124 #define cplus_demangle_fill_dtor d_fill_dtor
125 static int
126 d_fill_dtor (struct demangle_component *, enum gnu_v3_dtor_kinds,
127              struct demangle_component *);
128
129 #define cplus_demangle_mangled_name d_mangled_name
130 static struct demangle_component *d_mangled_name (struct d_info *, int);
131
132 #define cplus_demangle_type d_type
133 static struct demangle_component *d_type (struct d_info *);
134
135 #define cplus_demangle_print d_print
136 static char *d_print (int, const struct demangle_component *, int, size_t *);
137
138 #define cplus_demangle_init_info d_init_info
139 static void d_init_info (const char *, int, size_t, struct d_info *);
140
141 #else /* ! defined(IN_GLIBCPP_V3) */
142 #define CP_STATIC_IF_GLIBCPP_V3
143 #endif /* ! defined(IN_GLIBCPP_V3) */
144
145 /* See if the compiler supports dynamic arrays.  */
146
147 #ifdef __GNUC__
148 #define CP_DYNAMIC_ARRAYS
149 #else
150 #ifdef __STDC__
151 #ifdef __STDC_VERSION__
152 #if __STDC_VERSION__ >= 199901L
153 #define CP_DYNAMIC_ARRAYS
154 #endif /* __STDC__VERSION >= 199901L */
155 #endif /* defined (__STDC_VERSION__) */
156 #endif /* defined (__STDC__) */
157 #endif /* ! defined (__GNUC__) */
158
159 /* We avoid pulling in the ctype tables, to prevent pulling in
160    additional unresolved symbols when this code is used in a library.
161    FIXME: Is this really a valid reason?  This comes from the original
162    V3 demangler code.
163
164    As of this writing this file has the following undefined references
165    when compiled with -DIN_GLIBCPP_V3: malloc, realloc, free, memcpy,
166    strcpy, strcat, strlen.  */
167
168 #define IS_DIGIT(c) ((c) >= '0' && (c) <= '9')
169 #define IS_UPPER(c) ((c) >= 'A' && (c) <= 'Z')
170 #define IS_LOWER(c) ((c) >= 'a' && (c) <= 'z')
171
172 /* The prefix prepended by GCC to an identifier represnting the
173    anonymous namespace.  */
174 #define ANONYMOUS_NAMESPACE_PREFIX "_GLOBAL_"
175 #define ANONYMOUS_NAMESPACE_PREFIX_LEN \
176   (sizeof (ANONYMOUS_NAMESPACE_PREFIX) - 1)
177
178 /* Information we keep for the standard substitutions.  */
179
180 struct d_standard_sub_info
181 {
182   /* The code for this substitution.  */
183   char code;
184   /* The simple string it expands to.  */
185   const char *simple_expansion;
186   /* The length of the simple expansion.  */
187   int simple_len;
188   /* The results of a full, verbose, expansion.  This is used when
189      qualifying a constructor/destructor, or when in verbose mode.  */
190   const char *full_expansion;
191   /* The length of the full expansion.  */
192   int full_len;
193   /* What to set the last_name field of d_info to; NULL if we should
194      not set it.  This is only relevant when qualifying a
195      constructor/destructor.  */
196   const char *set_last_name;
197   /* The length of set_last_name.  */
198   int set_last_name_len;
199 };
200
201 /* Accessors for subtrees of struct demangle_component.  */
202
203 #define d_left(dc) ((dc)->u.s_binary.left)
204 #define d_right(dc) ((dc)->u.s_binary.right)
205
206 /* A list of templates.  This is used while printing.  */
207
208 struct d_print_template
209 {
210   /* Next template on the list.  */
211   struct d_print_template *next;
212   /* This template.  */
213   const struct demangle_component *template_decl;
214 };
215
216 /* A list of type modifiers.  This is used while printing.  */
217
218 struct d_print_mod
219 {
220   /* Next modifier on the list.  These are in the reverse of the order
221      in which they appeared in the mangled string.  */
222   struct d_print_mod *next;
223   /* The modifier.  */
224   const struct demangle_component *mod;
225   /* Whether this modifier was printed.  */
226   int printed;
227   /* The list of templates which applies to this modifier.  */
228   struct d_print_template *templates;
229 };
230
231 /* We use this structure to hold information during printing.  */
232
233 struct d_print_info
234 {
235   /* The options passed to the demangler.  */
236   int options;
237   /* Buffer holding the result.  */
238   char *buf;
239   /* Current length of data in buffer.  */
240   size_t len;
241   /* Allocated size of buffer.  */
242   size_t alc;
243   /* The current list of templates, if any.  */
244   struct d_print_template *templates;
245   /* The current list of modifiers (e.g., pointer, reference, etc.),
246      if any.  */
247   struct d_print_mod *modifiers;
248   /* Set to 1 if we had a memory allocation failure.  */
249   int allocation_failure;
250 };
251
252 #define d_print_saw_error(dpi) ((dpi)->buf == NULL)
253
254 #define d_append_char(dpi, c) \
255   do \
256     { \
257       if ((dpi)->buf != NULL && (dpi)->len < (dpi)->alc) \
258         (dpi)->buf[(dpi)->len++] = (c); \
259       else \
260         d_print_append_char ((dpi), (c)); \
261     } \
262   while (0)
263
264 #define d_append_buffer(dpi, s, l) \
265   do \
266     { \
267       if ((dpi)->buf != NULL && (dpi)->len + (l) <= (dpi)->alc) \
268         { \
269           memcpy ((dpi)->buf + (dpi)->len, (s), (l)); \
270           (dpi)->len += l; \
271         } \
272       else \
273         d_print_append_buffer ((dpi), (s), (l)); \
274     } \
275   while (0)
276
277 #define d_append_string_constant(dpi, s) \
278   d_append_buffer (dpi, (s), sizeof (s) - 1)
279
280 #define d_last_char(dpi) \
281   ((dpi)->buf == NULL || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1])
282
283 #ifdef CP_DEMANGLE_DEBUG
284 static void d_dump (struct demangle_component *, int);
285 #endif
286
287 static struct demangle_component *
288 d_make_empty (struct d_info *);
289
290 static struct demangle_component *
291 d_make_comp (struct d_info *, enum demangle_component_type,
292              struct demangle_component *,
293              struct demangle_component *);
294
295 static struct demangle_component *
296 d_make_name (struct d_info *, const char *, int);
297
298 static struct demangle_component *
299 d_make_builtin_type (struct d_info *,
300                      const struct demangle_builtin_type_info *);
301
302 static struct demangle_component *
303 d_make_operator (struct d_info *,
304                  const struct demangle_operator_info *);
305
306 static struct demangle_component *
307 d_make_extended_operator (struct d_info *, int,
308                           struct demangle_component *);
309
310 static struct demangle_component *
311 d_make_ctor (struct d_info *, enum gnu_v3_ctor_kinds,
312              struct demangle_component *);
313
314 static struct demangle_component *
315 d_make_dtor (struct d_info *, enum gnu_v3_dtor_kinds,
316              struct demangle_component *);
317
318 static struct demangle_component *
319 d_make_template_param (struct d_info *, long);
320
321 static struct demangle_component *
322 d_make_sub (struct d_info *, const char *, int);
323
324 static int
325 has_return_type (struct demangle_component *);
326
327 static int
328 is_ctor_dtor_or_conversion (struct demangle_component *);
329
330 static struct demangle_component *d_encoding (struct d_info *, int);
331
332 static struct demangle_component *d_name (struct d_info *);
333
334 static struct demangle_component *d_nested_name (struct d_info *);
335
336 static struct demangle_component *d_prefix (struct d_info *);
337
338 static struct demangle_component *d_unqualified_name (struct d_info *);
339
340 static struct demangle_component *d_source_name (struct d_info *);
341
342 static long d_number (struct d_info *);
343
344 static struct demangle_component *d_identifier (struct d_info *, int);
345
346 static struct demangle_component *d_operator_name (struct d_info *);
347
348 static struct demangle_component *d_special_name (struct d_info *);
349
350 static int d_call_offset (struct d_info *, int);
351
352 static struct demangle_component *d_ctor_dtor_name (struct d_info *);
353
354 static struct demangle_component **
355 d_cv_qualifiers (struct d_info *, struct demangle_component **, int);
356
357 static struct demangle_component *
358 d_function_type (struct d_info *);
359
360 static struct demangle_component *
361 d_bare_function_type (struct d_info *, int);
362
363 static struct demangle_component *
364 d_class_enum_type (struct d_info *);
365
366 static struct demangle_component *d_array_type (struct d_info *);
367
368 static struct demangle_component *
369 d_pointer_to_member_type (struct d_info *);
370
371 static struct demangle_component *
372 d_template_param (struct d_info *);
373
374 static struct demangle_component *d_template_args (struct d_info *);
375
376 static struct demangle_component *
377 d_template_arg (struct d_info *);
378
379 static struct demangle_component *d_expression (struct d_info *);
380
381 static struct demangle_component *d_expr_primary (struct d_info *);
382
383 static struct demangle_component *d_local_name (struct d_info *);
384
385 static int d_discriminator (struct d_info *);
386
387 static int
388 d_add_substitution (struct d_info *, struct demangle_component *);
389
390 static struct demangle_component *d_substitution (struct d_info *, int);
391
392 static void d_print_resize (struct d_print_info *, size_t);
393
394 static void d_print_append_char (struct d_print_info *, int);
395
396 static void
397 d_print_append_buffer (struct d_print_info *, const char *, size_t);
398
399 static void d_print_error (struct d_print_info *);
400
401 static void
402 d_print_comp (struct d_print_info *, const struct demangle_component *);
403
404 static void
405 d_print_java_identifier (struct d_print_info *, const char *, int);
406
407 static void
408 d_print_mod_list (struct d_print_info *, struct d_print_mod *, int);
409
410 static void
411 d_print_mod (struct d_print_info *, const struct demangle_component *);
412
413 static void
414 d_print_function_type (struct d_print_info *,
415                        const struct demangle_component *,
416                        struct d_print_mod *);
417
418 static void
419 d_print_array_type (struct d_print_info *,
420                     const struct demangle_component *,
421                     struct d_print_mod *);
422
423 static void
424 d_print_expr_op (struct d_print_info *, const struct demangle_component *);
425
426 static void
427 d_print_cast (struct d_print_info *, const struct demangle_component *);
428
429 static char *d_demangle (const char *, int, size_t *);
430
431 #ifdef CP_DEMANGLE_DEBUG
432
433 static void
434 d_dump (struct demangle_component *dc, int indent)
435 {
436   int i;
437
438   if (dc == NULL)
439     return;
440
441   for (i = 0; i < indent; ++i)
442     putchar (' ');
443
444   switch (dc->type)
445     {
446     case DEMANGLE_COMPONENT_NAME:
447       printf ("name '%.*s'\n", dc->u.s_name.len, dc->u.s_name.s);
448       return;
449     case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
450       printf ("template parameter %ld\n", dc->u.s_number.number);
451       return;
452     case DEMANGLE_COMPONENT_CTOR:
453       printf ("constructor %d\n", (int) dc->u.s_ctor.kind);
454       d_dump (dc->u.s_ctor.name, indent + 2);
455       return;
456     case DEMANGLE_COMPONENT_DTOR:
457       printf ("destructor %d\n", (int) dc->u.s_dtor.kind);
458       d_dump (dc->u.s_dtor.name, indent + 2);
459       return;
460     case DEMANGLE_COMPONENT_SUB_STD:
461       printf ("standard substitution %s\n", dc->u.s_string.string);
462       return;
463     case DEMANGLE_COMPONENT_BUILTIN_TYPE:
464       printf ("builtin type %s\n", dc->u.s_builtin.type->name);
465       return;
466     case DEMANGLE_COMPONENT_OPERATOR:
467       printf ("operator %s\n", dc->u.s_operator.op->name);
468       return;
469     case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
470       printf ("extended operator with %d args\n",
471               dc->u.s_extended_operator.args);
472       d_dump (dc->u.s_extended_operator.name, indent + 2);
473       return;
474
475     case DEMANGLE_COMPONENT_QUAL_NAME:
476       printf ("qualified name\n");
477       break;
478     case DEMANGLE_COMPONENT_LOCAL_NAME:
479       printf ("local name\n");
480       break;
481     case DEMANGLE_COMPONENT_TYPED_NAME:
482       printf ("typed name\n");
483       break;
484     case DEMANGLE_COMPONENT_TEMPLATE:
485       printf ("template\n");
486       break;
487     case DEMANGLE_COMPONENT_VTABLE:
488       printf ("vtable\n");
489       break;
490     case DEMANGLE_COMPONENT_VTT:
491       printf ("VTT\n");
492       break;
493     case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
494       printf ("construction vtable\n");
495       break;
496     case DEMANGLE_COMPONENT_TYPEINFO:
497       printf ("typeinfo\n");
498       break;
499     case DEMANGLE_COMPONENT_TYPEINFO_NAME:
500       printf ("typeinfo name\n");
501       break;
502     case DEMANGLE_COMPONENT_TYPEINFO_FN:
503       printf ("typeinfo function\n");
504       break;
505     case DEMANGLE_COMPONENT_THUNK:
506       printf ("thunk\n");
507       break;
508     case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
509       printf ("virtual thunk\n");
510       break;
511     case DEMANGLE_COMPONENT_COVARIANT_THUNK:
512       printf ("covariant thunk\n");
513       break;
514     case DEMANGLE_COMPONENT_JAVA_CLASS:
515       printf ("java class\n");
516       break;
517     case DEMANGLE_COMPONENT_GUARD:
518       printf ("guard\n");
519       break;
520     case DEMANGLE_COMPONENT_REFTEMP:
521       printf ("reference temporary\n");
522       break;
523     case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
524       printf ("hidden alias\n");
525       break;
526     case DEMANGLE_COMPONENT_RESTRICT:
527       printf ("restrict\n");
528       break;
529     case DEMANGLE_COMPONENT_VOLATILE:
530       printf ("volatile\n");
531       break;
532     case DEMANGLE_COMPONENT_CONST:
533       printf ("const\n");
534       break;
535     case DEMANGLE_COMPONENT_RESTRICT_THIS:
536       printf ("restrict this\n");
537       break;
538     case DEMANGLE_COMPONENT_VOLATILE_THIS:
539       printf ("volatile this\n");
540       break;
541     case DEMANGLE_COMPONENT_CONST_THIS:
542       printf ("const this\n");
543       break;
544     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
545       printf ("vendor type qualifier\n");
546       break;
547     case DEMANGLE_COMPONENT_POINTER:
548       printf ("pointer\n");
549       break;
550     case DEMANGLE_COMPONENT_REFERENCE:
551       printf ("reference\n");
552       break;
553     case DEMANGLE_COMPONENT_COMPLEX:
554       printf ("complex\n");
555       break;
556     case DEMANGLE_COMPONENT_IMAGINARY:
557       printf ("imaginary\n");
558       break;
559     case DEMANGLE_COMPONENT_VENDOR_TYPE:
560       printf ("vendor type\n");
561       break;
562     case DEMANGLE_COMPONENT_FUNCTION_TYPE:
563       printf ("function type\n");
564       break;
565     case DEMANGLE_COMPONENT_ARRAY_TYPE:
566       printf ("array type\n");
567       break;
568     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
569       printf ("pointer to member type\n");
570       break;
571     case DEMANGLE_COMPONENT_ARGLIST:
572       printf ("argument list\n");
573       break;
574     case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
575       printf ("template argument list\n");
576       break;
577     case DEMANGLE_COMPONENT_CAST:
578       printf ("cast\n");
579       break;
580     case DEMANGLE_COMPONENT_UNARY:
581       printf ("unary operator\n");
582       break;
583     case DEMANGLE_COMPONENT_BINARY:
584       printf ("binary operator\n");
585       break;
586     case DEMANGLE_COMPONENT_BINARY_ARGS:
587       printf ("binary operator arguments\n");
588       break;
589     case DEMANGLE_COMPONENT_TRINARY:
590       printf ("trinary operator\n");
591       break;
592     case DEMANGLE_COMPONENT_TRINARY_ARG1:
593       printf ("trinary operator arguments 1\n");
594       break;
595     case DEMANGLE_COMPONENT_TRINARY_ARG2:
596       printf ("trinary operator arguments 1\n");
597       break;
598     case DEMANGLE_COMPONENT_LITERAL:
599       printf ("literal\n");
600       break;
601     case DEMANGLE_COMPONENT_LITERAL_NEG:
602       printf ("negative literal\n");
603       break;
604     }
605
606   d_dump (d_left (dc), indent + 2);
607   d_dump (d_right (dc), indent + 2);
608 }
609
610 #endif /* CP_DEMANGLE_DEBUG */
611
612 /* Fill in a DEMANGLE_COMPONENT_NAME.  */
613
614 CP_STATIC_IF_GLIBCPP_V3
615 int
616 cplus_demangle_fill_name (struct demangle_component *p, const char *s, int len)
617 {
618   if (p == NULL || s == NULL || len == 0)
619     return 0;
620   p->type = DEMANGLE_COMPONENT_NAME;
621   p->u.s_name.s = s;
622   p->u.s_name.len = len;
623   return 1;
624 }
625
626 /* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR.  */
627
628 CP_STATIC_IF_GLIBCPP_V3
629 int
630 cplus_demangle_fill_extended_operator (struct demangle_component *p, int args,
631                                        struct demangle_component *name)
632 {
633   if (p == NULL || args < 0 || name == NULL)
634     return 0;
635   p->type = DEMANGLE_COMPONENT_EXTENDED_OPERATOR;
636   p->u.s_extended_operator.args = args;
637   p->u.s_extended_operator.name = name;
638   return 1;
639 }
640
641 /* Fill in a DEMANGLE_COMPONENT_CTOR.  */
642
643 CP_STATIC_IF_GLIBCPP_V3
644 int
645 cplus_demangle_fill_ctor (struct demangle_component *p,
646                           enum gnu_v3_ctor_kinds kind,
647                           struct demangle_component *name)
648 {
649   if (p == NULL
650       || name == NULL
651       || (kind < gnu_v3_complete_object_ctor
652           && kind > gnu_v3_complete_object_allocating_ctor))
653     return 0;
654   p->type = DEMANGLE_COMPONENT_CTOR;
655   p->u.s_ctor.kind = kind;
656   p->u.s_ctor.name = name;
657   return 1;
658 }
659
660 /* Fill in a DEMANGLE_COMPONENT_DTOR.  */
661
662 CP_STATIC_IF_GLIBCPP_V3
663 int
664 cplus_demangle_fill_dtor (struct demangle_component *p,
665                           enum gnu_v3_dtor_kinds kind,
666                           struct demangle_component *name)
667 {
668   if (p == NULL
669       || name == NULL
670       || (kind < gnu_v3_deleting_dtor
671           && kind > gnu_v3_base_object_dtor))
672     return 0;
673   p->type = DEMANGLE_COMPONENT_DTOR;
674   p->u.s_dtor.kind = kind;
675   p->u.s_dtor.name = name;
676   return 1;
677 }
678
679 /* Add a new component.  */
680
681 static struct demangle_component *
682 d_make_empty (struct d_info *di)
683 {
684   struct demangle_component *p;
685
686   if (di->next_comp >= di->num_comps)
687     return NULL;
688   p = &di->comps[di->next_comp];
689   ++di->next_comp;
690   return p;
691 }
692
693 /* Add a new generic component.  */
694
695 static struct demangle_component *
696 d_make_comp (struct d_info *di, enum demangle_component_type type,
697              struct demangle_component *left,
698              struct demangle_component *right)
699 {
700   struct demangle_component *p;
701
702   /* We check for errors here.  A typical error would be a NULL return
703      from a subroutine.  We catch those here, and return NULL
704      upward.  */
705   switch (type)
706     {
707       /* These types require two parameters.  */
708     case DEMANGLE_COMPONENT_QUAL_NAME:
709     case DEMANGLE_COMPONENT_LOCAL_NAME:
710     case DEMANGLE_COMPONENT_TYPED_NAME:
711     case DEMANGLE_COMPONENT_TEMPLATE:
712     case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
713     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
714     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
715     case DEMANGLE_COMPONENT_UNARY:
716     case DEMANGLE_COMPONENT_BINARY:
717     case DEMANGLE_COMPONENT_BINARY_ARGS:
718     case DEMANGLE_COMPONENT_TRINARY:
719     case DEMANGLE_COMPONENT_TRINARY_ARG1:
720     case DEMANGLE_COMPONENT_TRINARY_ARG2:
721     case DEMANGLE_COMPONENT_LITERAL:
722     case DEMANGLE_COMPONENT_LITERAL_NEG:
723       if (left == NULL || right == NULL)
724         return NULL;
725       break;
726
727       /* These types only require one parameter.  */
728     case DEMANGLE_COMPONENT_VTABLE:
729     case DEMANGLE_COMPONENT_VTT:
730     case DEMANGLE_COMPONENT_TYPEINFO:
731     case DEMANGLE_COMPONENT_TYPEINFO_NAME:
732     case DEMANGLE_COMPONENT_TYPEINFO_FN:
733     case DEMANGLE_COMPONENT_THUNK:
734     case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
735     case DEMANGLE_COMPONENT_COVARIANT_THUNK:
736     case DEMANGLE_COMPONENT_JAVA_CLASS:
737     case DEMANGLE_COMPONENT_GUARD:
738     case DEMANGLE_COMPONENT_REFTEMP:
739     case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
740     case DEMANGLE_COMPONENT_POINTER:
741     case DEMANGLE_COMPONENT_REFERENCE:
742     case DEMANGLE_COMPONENT_COMPLEX:
743     case DEMANGLE_COMPONENT_IMAGINARY:
744     case DEMANGLE_COMPONENT_VENDOR_TYPE:
745     case DEMANGLE_COMPONENT_ARGLIST:
746     case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
747     case DEMANGLE_COMPONENT_CAST:
748       if (left == NULL)
749         return NULL;
750       break;
751
752       /* This needs a right parameter, but the left parameter can be
753          empty.  */
754     case DEMANGLE_COMPONENT_ARRAY_TYPE:
755       if (right == NULL)
756         return NULL;
757       break;
758
759       /* These are allowed to have no parameters--in some cases they
760          will be filled in later.  */
761     case DEMANGLE_COMPONENT_FUNCTION_TYPE:
762     case DEMANGLE_COMPONENT_RESTRICT:
763     case DEMANGLE_COMPONENT_VOLATILE:
764     case DEMANGLE_COMPONENT_CONST:
765     case DEMANGLE_COMPONENT_RESTRICT_THIS:
766     case DEMANGLE_COMPONENT_VOLATILE_THIS:
767     case DEMANGLE_COMPONENT_CONST_THIS:
768       break;
769
770       /* Other types should not be seen here.  */
771     default:
772       return NULL;
773     }
774
775   p = d_make_empty (di);
776   if (p != NULL)
777     {
778       p->type = type;
779       p->u.s_binary.left = left;
780       p->u.s_binary.right = right;
781     }
782   return p;
783 }
784
785 /* Add a new name component.  */
786
787 static struct demangle_component *
788 d_make_name (struct d_info *di, const char *s, int len)
789 {
790   struct demangle_component *p;
791
792   p = d_make_empty (di);
793   if (! cplus_demangle_fill_name (p, s, len))
794     return NULL;
795   return p;
796 }
797
798 /* Add a new builtin type component.  */
799
800 static struct demangle_component *
801 d_make_builtin_type (struct d_info *di,
802                      const struct demangle_builtin_type_info *type)
803 {
804   struct demangle_component *p;
805
806   if (type == NULL)
807     return NULL;
808   p = d_make_empty (di);
809   if (p != NULL)
810     {
811       p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE;
812       p->u.s_builtin.type = type;
813     }
814   return p;
815 }
816
817 /* Add a new operator component.  */
818
819 static struct demangle_component *
820 d_make_operator (struct d_info *di, const struct demangle_operator_info *op)
821 {
822   struct demangle_component *p;
823
824   p = d_make_empty (di);
825   if (p != NULL)
826     {
827       p->type = DEMANGLE_COMPONENT_OPERATOR;
828       p->u.s_operator.op = op;
829     }
830   return p;
831 }
832
833 /* Add a new extended operator component.  */
834
835 static struct demangle_component *
836 d_make_extended_operator (struct d_info *di, int args,
837                           struct demangle_component *name)
838 {
839   struct demangle_component *p;
840
841   p = d_make_empty (di);
842   if (! cplus_demangle_fill_extended_operator (p, args, name))
843     return NULL;
844   return p;
845 }
846
847 /* Add a new constructor component.  */
848
849 static struct demangle_component *
850 d_make_ctor (struct d_info *di, enum gnu_v3_ctor_kinds kind,
851              struct demangle_component *name)
852 {
853   struct demangle_component *p;
854
855   p = d_make_empty (di);
856   if (! cplus_demangle_fill_ctor (p, kind, name))
857     return NULL;
858   return p;
859 }
860
861 /* Add a new destructor component.  */
862
863 static struct demangle_component *
864 d_make_dtor (struct d_info *di, enum gnu_v3_dtor_kinds kind,
865              struct demangle_component *name)
866 {
867   struct demangle_component *p;
868
869   p = d_make_empty (di);
870   if (! cplus_demangle_fill_dtor (p, kind, name))
871     return NULL;
872   return p;
873 }
874
875 /* Add a new template parameter.  */
876
877 static struct demangle_component *
878 d_make_template_param (struct d_info *di, long i)
879 {
880   struct demangle_component *p;
881
882   p = d_make_empty (di);
883   if (p != NULL)
884     {
885       p->type = DEMANGLE_COMPONENT_TEMPLATE_PARAM;
886       p->u.s_number.number = i;
887     }
888   return p;
889 }
890
891 /* Add a new standard substitution component.  */
892
893 static struct demangle_component *
894 d_make_sub (struct d_info *di, const char *name, int len)
895 {
896   struct demangle_component *p;
897
898   p = d_make_empty (di);
899   if (p != NULL)
900     {
901       p->type = DEMANGLE_COMPONENT_SUB_STD;
902       p->u.s_string.string = name;
903       p->u.s_string.len = len;
904     }
905   return p;
906 }
907
908 /* <mangled-name> ::= _Z <encoding>
909
910    TOP_LEVEL is non-zero when called at the top level.  */
911
912 CP_STATIC_IF_GLIBCPP_V3
913 struct demangle_component *
914 cplus_demangle_mangled_name (struct d_info *di, int top_level)
915 {
916   if (d_next_char (di) != '_')
917     return NULL;
918   if (d_next_char (di) != 'Z')
919     return NULL;
920   return d_encoding (di, top_level);
921 }
922
923 /* Return whether a function should have a return type.  The argument
924    is the function name, which may be qualified in various ways.  The
925    rules are that template functions have return types with some
926    exceptions, function types which are not part of a function name
927    mangling have return types with some exceptions, and non-template
928    function names do not have return types.  The exceptions are that
929    constructors, destructors, and conversion operators do not have
930    return types.  */
931
932 static int
933 has_return_type (struct demangle_component *dc)
934 {
935   if (dc == NULL)
936     return 0;
937   switch (dc->type)
938     {
939     default:
940       return 0;
941     case DEMANGLE_COMPONENT_TEMPLATE:
942       return ! is_ctor_dtor_or_conversion (d_left (dc));
943     case DEMANGLE_COMPONENT_RESTRICT_THIS:
944     case DEMANGLE_COMPONENT_VOLATILE_THIS:
945     case DEMANGLE_COMPONENT_CONST_THIS:
946       return has_return_type (d_left (dc));
947     }
948 }
949
950 /* Return whether a name is a constructor, a destructor, or a
951    conversion operator.  */
952
953 static int
954 is_ctor_dtor_or_conversion (struct demangle_component *dc)
955 {
956   if (dc == NULL)
957     return 0;
958   switch (dc->type)
959     {
960     default:
961       return 0;
962     case DEMANGLE_COMPONENT_QUAL_NAME:
963     case DEMANGLE_COMPONENT_LOCAL_NAME:
964       return is_ctor_dtor_or_conversion (d_right (dc));
965     case DEMANGLE_COMPONENT_CTOR:
966     case DEMANGLE_COMPONENT_DTOR:
967     case DEMANGLE_COMPONENT_CAST:
968       return 1;
969     }
970 }
971
972 /* <encoding> ::= <(function) name> <bare-function-type>
973               ::= <(data) name>
974               ::= <special-name>
975
976    TOP_LEVEL is non-zero when called at the top level, in which case
977    if DMGL_PARAMS is not set we do not demangle the function
978    parameters.  We only set this at the top level, because otherwise
979    we would not correctly demangle names in local scopes.  */
980
981 static struct demangle_component *
982 d_encoding (struct d_info *di, int top_level)
983 {
984   char peek = d_peek_char (di);
985
986   if (peek == 'G' || peek == 'T')
987     return d_special_name (di);
988   else
989     {
990       struct demangle_component *dc;
991
992       dc = d_name (di);
993
994       if (dc != NULL && top_level && (di->options & DMGL_PARAMS) == 0)
995         {
996           /* Strip off any initial CV-qualifiers, as they really apply
997              to the `this' parameter, and they were not output by the
998              v2 demangler without DMGL_PARAMS.  */
999           while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
1000                  || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
1001                  || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
1002             dc = d_left (dc);
1003
1004           /* If the top level is a DEMANGLE_COMPONENT_LOCAL_NAME, then
1005              there may be CV-qualifiers on its right argument which
1006              really apply here; this happens when parsing a class
1007              which is local to a function.  */
1008           if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME)
1009             {
1010               struct demangle_component *dcr;
1011
1012               dcr = d_right (dc);
1013               while (dcr->type == DEMANGLE_COMPONENT_RESTRICT_THIS
1014                      || dcr->type == DEMANGLE_COMPONENT_VOLATILE_THIS
1015                      || dcr->type == DEMANGLE_COMPONENT_CONST_THIS)
1016                 dcr = d_left (dcr);
1017               dc->u.s_binary.right = dcr;
1018             }
1019
1020           return dc;
1021         }
1022
1023       peek = d_peek_char (di);
1024       if (peek == '\0' || peek == 'E')
1025         return dc;
1026       return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc,
1027                           d_bare_function_type (di, has_return_type (dc)));
1028     }
1029 }
1030
1031 /* <name> ::= <nested-name>
1032           ::= <unscoped-name>
1033           ::= <unscoped-template-name> <template-args>
1034           ::= <local-name>
1035
1036    <unscoped-name> ::= <unqualified-name>
1037                    ::= St <unqualified-name>
1038
1039    <unscoped-template-name> ::= <unscoped-name>
1040                             ::= <substitution>
1041 */
1042
1043 static struct demangle_component *
1044 d_name (struct d_info *di)
1045 {
1046   char peek = d_peek_char (di);
1047   struct demangle_component *dc;
1048
1049   switch (peek)
1050     {
1051     case 'N':
1052       return d_nested_name (di);
1053
1054     case 'Z':
1055       return d_local_name (di);
1056
1057     case 'S':
1058       {
1059         int subst;
1060
1061         if (d_peek_next_char (di) != 't')
1062           {
1063             dc = d_substitution (di, 0);
1064             subst = 1;
1065           }
1066         else
1067           {
1068             d_advance (di, 2);
1069             dc = d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME,
1070                               d_make_name (di, "std", 3),
1071                               d_unqualified_name (di));
1072             di->expansion += 3;
1073             subst = 0;
1074           }
1075
1076         if (d_peek_char (di) != 'I')
1077           {
1078             /* The grammar does not permit this case to occur if we
1079                called d_substitution() above (i.e., subst == 1).  We
1080                don't bother to check.  */
1081           }
1082         else
1083           {
1084             /* This is <template-args>, which means that we just saw
1085                <unscoped-template-name>, which is a substitution
1086                candidate if we didn't just get it from a
1087                substitution.  */
1088             if (! subst)
1089               {
1090                 if (! d_add_substitution (di, dc))
1091                   return NULL;
1092               }
1093             dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
1094                               d_template_args (di));
1095           }
1096
1097         return dc;
1098       }
1099
1100     default:
1101       dc = d_unqualified_name (di);
1102       if (d_peek_char (di) == 'I')
1103         {
1104           /* This is <template-args>, which means that we just saw
1105              <unscoped-template-name>, which is a substitution
1106              candidate.  */
1107           if (! d_add_substitution (di, dc))
1108             return NULL;
1109           dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
1110                             d_template_args (di));
1111         }
1112       return dc;
1113     }
1114 }
1115
1116 /* <nested-name> ::= N [<CV-qualifiers>] <prefix> <unqualified-name> E
1117                  ::= N [<CV-qualifiers>] <template-prefix> <template-args> E
1118 */
1119
1120 static struct demangle_component *
1121 d_nested_name (struct d_info *di)
1122 {
1123   struct demangle_component *ret;
1124   struct demangle_component **pret;
1125
1126   if (d_next_char (di) != 'N')
1127     return NULL;
1128
1129   pret = d_cv_qualifiers (di, &ret, 1);
1130   if (pret == NULL)
1131     return NULL;
1132
1133   *pret = d_prefix (di);
1134   if (*pret == NULL)
1135     return NULL;
1136
1137   if (d_next_char (di) != 'E')
1138     return NULL;
1139
1140   return ret;
1141 }
1142
1143 /* <prefix> ::= <prefix> <unqualified-name>
1144             ::= <template-prefix> <template-args>
1145             ::= <template-param>
1146             ::=
1147             ::= <substitution>
1148
1149    <template-prefix> ::= <prefix> <(template) unqualified-name>
1150                      ::= <template-param>
1151                      ::= <substitution>
1152 */
1153
1154 static struct demangle_component *
1155 d_prefix (struct d_info *di)
1156 {
1157   struct demangle_component *ret = NULL;
1158
1159   while (1)
1160     {
1161       char peek;
1162       enum demangle_component_type comb_type;
1163       struct demangle_component *dc;
1164
1165       peek = d_peek_char (di);
1166       if (peek == '\0')
1167         return NULL;
1168
1169       /* The older code accepts a <local-name> here, but I don't see
1170          that in the grammar.  The older code does not accept a
1171          <template-param> here.  */
1172
1173       comb_type = DEMANGLE_COMPONENT_QUAL_NAME;
1174       if (IS_DIGIT (peek)
1175           || IS_LOWER (peek)
1176           || peek == 'C'
1177           || peek == 'D')
1178         dc = d_unqualified_name (di);
1179       else if (peek == 'S')
1180         dc = d_substitution (di, 1);
1181       else if (peek == 'I')
1182         {
1183           if (ret == NULL)
1184             return NULL;
1185           comb_type = DEMANGLE_COMPONENT_TEMPLATE;
1186           dc = d_template_args (di);
1187         }
1188       else if (peek == 'T')
1189         dc = d_template_param (di);
1190       else if (peek == 'E')
1191         return ret;
1192       else
1193         return NULL;
1194
1195       if (ret == NULL)
1196         ret = dc;
1197       else
1198         ret = d_make_comp (di, comb_type, ret, dc);
1199
1200       if (peek != 'S' && d_peek_char (di) != 'E')
1201         {
1202           if (! d_add_substitution (di, ret))
1203             return NULL;
1204         }
1205     }
1206 }
1207
1208 /* <unqualified-name> ::= <operator-name>
1209                       ::= <ctor-dtor-name>
1210                       ::= <source-name>
1211 */
1212
1213 static struct demangle_component *
1214 d_unqualified_name (struct d_info *di)
1215 {
1216   char peek;
1217
1218   peek = d_peek_char (di);
1219   if (IS_DIGIT (peek))
1220     return d_source_name (di);
1221   else if (IS_LOWER (peek))
1222     {
1223       struct demangle_component *ret;
1224
1225       ret = d_operator_name (di);
1226       if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR)
1227         di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
1228       return ret;
1229     }
1230   else if (peek == 'C' || peek == 'D')
1231     return d_ctor_dtor_name (di);
1232   else
1233     return NULL;
1234 }
1235
1236 /* <source-name> ::= <(positive length) number> <identifier>  */
1237
1238 static struct demangle_component *
1239 d_source_name (struct d_info *di)
1240 {
1241   long len;
1242   struct demangle_component *ret;
1243
1244   len = d_number (di);
1245   if (len <= 0)
1246     return NULL;
1247   ret = d_identifier (di, len);
1248   di->last_name = ret;
1249   return ret;
1250 }
1251
1252 /* number ::= [n] <(non-negative decimal integer)>  */
1253
1254 static long
1255 d_number (struct d_info *di)
1256 {
1257   int negative;
1258   char peek;
1259   long ret;
1260
1261   negative = 0;
1262   peek = d_peek_char (di);
1263   if (peek == 'n')
1264     {
1265       negative = 1;
1266       d_advance (di, 1);
1267       peek = d_peek_char (di);
1268     }
1269
1270   ret = 0;
1271   while (1)
1272     {
1273       if (! IS_DIGIT (peek))
1274         {
1275           if (negative)
1276             ret = - ret;
1277           return ret;
1278         }
1279       ret = ret * 10 + peek - '0';
1280       d_advance (di, 1);
1281       peek = d_peek_char (di);
1282     }
1283 }
1284
1285 /* identifier ::= <(unqualified source code identifier)>  */
1286
1287 static struct demangle_component *
1288 d_identifier (struct d_info *di, int len)
1289 {
1290   const char *name;
1291
1292   name = d_str (di);
1293
1294   if (di->send - name < len)
1295     return NULL;
1296
1297   d_advance (di, len);
1298
1299   /* A Java mangled name may have a trailing '$' if it is a C++
1300      keyword.  This '$' is not included in the length count.  We just
1301      ignore the '$'.  */
1302   if ((di->options & DMGL_JAVA) != 0
1303       && d_peek_char (di) == '$')
1304     d_advance (di, 1);
1305
1306   /* Look for something which looks like a gcc encoding of an
1307      anonymous namespace, and replace it with a more user friendly
1308      name.  */
1309   if (len >= (int) ANONYMOUS_NAMESPACE_PREFIX_LEN + 2
1310       && memcmp (name, ANONYMOUS_NAMESPACE_PREFIX,
1311                  ANONYMOUS_NAMESPACE_PREFIX_LEN) == 0)
1312     {
1313       const char *s;
1314
1315       s = name + ANONYMOUS_NAMESPACE_PREFIX_LEN;
1316       if ((*s == '.' || *s == '_' || *s == '$')
1317           && s[1] == 'N')
1318         {
1319           di->expansion -= len - sizeof "(anonymous namespace)";
1320           return d_make_name (di, "(anonymous namespace)",
1321                               sizeof "(anonymous namespace)" - 1);
1322         }
1323     }
1324
1325   return d_make_name (di, name, len);
1326 }
1327
1328 /* operator_name ::= many different two character encodings.
1329                  ::= cv <type>
1330                  ::= v <digit> <source-name>
1331 */
1332
1333 #define NL(s) s, (sizeof s) - 1
1334
1335 CP_STATIC_IF_GLIBCPP_V3
1336 const struct demangle_operator_info cplus_demangle_operators[] =
1337 {
1338   { "aN", NL ("&="),        2 },
1339   { "aS", NL ("="),         2 },
1340   { "aa", NL ("&&"),        2 },
1341   { "ad", NL ("&"),         1 },
1342   { "an", NL ("&"),         2 },
1343   { "cl", NL ("()"),        0 },
1344   { "cm", NL (","),         2 },
1345   { "co", NL ("~"),         1 },
1346   { "dV", NL ("/="),        2 },
1347   { "da", NL ("delete[]"),  1 },
1348   { "de", NL ("*"),         1 },
1349   { "dl", NL ("delete"),    1 },
1350   { "dv", NL ("/"),         2 },
1351   { "eO", NL ("^="),        2 },
1352   { "eo", NL ("^"),         2 },
1353   { "eq", NL ("=="),        2 },
1354   { "ge", NL (">="),        2 },
1355   { "gt", NL (">"),         2 },
1356   { "ix", NL ("[]"),        2 },
1357   { "lS", NL ("<<="),       2 },
1358   { "le", NL ("<="),        2 },
1359   { "ls", NL ("<<"),        2 },
1360   { "lt", NL ("<"),         2 },
1361   { "mI", NL ("-="),        2 },
1362   { "mL", NL ("*="),        2 },
1363   { "mi", NL ("-"),         2 },
1364   { "ml", NL ("*"),         2 },
1365   { "mm", NL ("--"),        1 },
1366   { "na", NL ("new[]"),     1 },
1367   { "ne", NL ("!="),        2 },
1368   { "ng", NL ("-"),         1 },
1369   { "nt", NL ("!"),         1 },
1370   { "nw", NL ("new"),       1 },
1371   { "oR", NL ("|="),        2 },
1372   { "oo", NL ("||"),        2 },
1373   { "or", NL ("|"),         2 },
1374   { "pL", NL ("+="),        2 },
1375   { "pl", NL ("+"),         2 },
1376   { "pm", NL ("->*"),       2 },
1377   { "pp", NL ("++"),        1 },
1378   { "ps", NL ("+"),         1 },
1379   { "pt", NL ("->"),        2 },
1380   { "qu", NL ("?"),         3 },
1381   { "rM", NL ("%="),        2 },
1382   { "rS", NL (">>="),       2 },
1383   { "rm", NL ("%"),         2 },
1384   { "rs", NL (">>"),        2 },
1385   { "st", NL ("sizeof "),   1 },
1386   { "sz", NL ("sizeof "),   1 },
1387   { NULL, NULL, 0,          0 }
1388 };
1389
1390 static struct demangle_component *
1391 d_operator_name (struct d_info *di)
1392 {
1393   char c1;
1394   char c2;
1395
1396   c1 = d_next_char (di);
1397   c2 = d_next_char (di);
1398   if (c1 == 'v' && IS_DIGIT (c2))
1399     return d_make_extended_operator (di, c2 - '0', d_source_name (di));
1400   else if (c1 == 'c' && c2 == 'v')
1401     return d_make_comp (di, DEMANGLE_COMPONENT_CAST,
1402                         cplus_demangle_type (di), NULL);
1403   else
1404     {
1405       /* LOW is the inclusive lower bound.  */
1406       int low = 0;
1407       /* HIGH is the exclusive upper bound.  We subtract one to ignore
1408          the sentinel at the end of the array.  */
1409       int high = ((sizeof (cplus_demangle_operators)
1410                    / sizeof (cplus_demangle_operators[0]))
1411                   - 1);
1412
1413       while (1)
1414         {
1415           int i;
1416           const struct demangle_operator_info *p;
1417
1418           i = low + (high - low) / 2;
1419           p = cplus_demangle_operators + i;
1420
1421           if (c1 == p->code[0] && c2 == p->code[1])
1422             return d_make_operator (di, p);
1423
1424           if (c1 < p->code[0] || (c1 == p->code[0] && c2 < p->code[1]))
1425             high = i;
1426           else
1427             low = i + 1;
1428           if (low == high)
1429             return NULL;
1430         }
1431     }
1432 }
1433
1434 /* <special-name> ::= TV <type>
1435                   ::= TT <type>
1436                   ::= TI <type>
1437                   ::= TS <type>
1438                   ::= GV <(object) name>
1439                   ::= T <call-offset> <(base) encoding>
1440                   ::= Tc <call-offset> <call-offset> <(base) encoding>
1441    Also g++ extensions:
1442                   ::= TC <type> <(offset) number> _ <(base) type>
1443                   ::= TF <type>
1444                   ::= TJ <type>
1445                   ::= GR <name>
1446                   ::= GA <encoding>
1447 */
1448
1449 static struct demangle_component *
1450 d_special_name (struct d_info *di)
1451 {
1452   char c;
1453
1454   di->expansion += 20;
1455   c = d_next_char (di);
1456   if (c == 'T')
1457     {
1458       switch (d_next_char (di))
1459         {
1460         case 'V':
1461           di->expansion -= 5;
1462           return d_make_comp (di, DEMANGLE_COMPONENT_VTABLE,
1463                               cplus_demangle_type (di), NULL);
1464         case 'T':
1465           di->expansion -= 10;
1466           return d_make_comp (di, DEMANGLE_COMPONENT_VTT,
1467                               cplus_demangle_type (di), NULL);
1468         case 'I':
1469           return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO,
1470                               cplus_demangle_type (di), NULL);
1471         case 'S':
1472           return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_NAME,
1473                               cplus_demangle_type (di), NULL);
1474
1475         case 'h':
1476           if (! d_call_offset (di, 'h'))
1477             return NULL;
1478           return d_make_comp (di, DEMANGLE_COMPONENT_THUNK,
1479                               d_encoding (di, 0), NULL);
1480
1481         case 'v':
1482           if (! d_call_offset (di, 'v'))
1483             return NULL;
1484           return d_make_comp (di, DEMANGLE_COMPONENT_VIRTUAL_THUNK,
1485                               d_encoding (di, 0), NULL);
1486
1487         case 'c':
1488           if (! d_call_offset (di, '\0'))
1489             return NULL;
1490           if (! d_call_offset (di, '\0'))
1491             return NULL;
1492           return d_make_comp (di, DEMANGLE_COMPONENT_COVARIANT_THUNK,
1493                               d_encoding (di, 0), NULL);
1494
1495         case 'C':
1496           {
1497             struct demangle_component *derived_type;
1498             long offset;
1499             struct demangle_component *base_type;
1500
1501             derived_type = cplus_demangle_type (di);
1502             offset = d_number (di);
1503             if (offset < 0)
1504               return NULL;
1505             if (d_next_char (di) != '_')
1506               return NULL;
1507             base_type = cplus_demangle_type (di);
1508             /* We don't display the offset.  FIXME: We should display
1509                it in verbose mode.  */
1510             di->expansion += 5;
1511             return d_make_comp (di, DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
1512                                 base_type, derived_type);
1513           }
1514
1515         case 'F':
1516           return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_FN,
1517                               cplus_demangle_type (di), NULL);
1518         case 'J':
1519           return d_make_comp (di, DEMANGLE_COMPONENT_JAVA_CLASS,
1520                               cplus_demangle_type (di), NULL);
1521
1522         default:
1523           return NULL;
1524         }
1525     }
1526   else if (c == 'G')
1527     {
1528       switch (d_next_char (di))
1529         {
1530         case 'V':
1531           return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, d_name (di), NULL);
1532
1533         case 'R':
1534           return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, d_name (di),
1535                               NULL);
1536
1537         case 'A':
1538           return d_make_comp (di, DEMANGLE_COMPONENT_HIDDEN_ALIAS,
1539                               d_encoding (di, 0), NULL);
1540
1541         default:
1542           return NULL;
1543         }
1544     }
1545   else
1546     return NULL;
1547 }
1548
1549 /* <call-offset> ::= h <nv-offset> _
1550                  ::= v <v-offset> _
1551
1552    <nv-offset> ::= <(offset) number>
1553
1554    <v-offset> ::= <(offset) number> _ <(virtual offset) number>
1555
1556    The C parameter, if not '\0', is a character we just read which is
1557    the start of the <call-offset>.
1558
1559    We don't display the offset information anywhere.  FIXME: We should
1560    display it in verbose mode.  */
1561
1562 static int
1563 d_call_offset (struct d_info *di, int c)
1564 {
1565   if (c == '\0')
1566     c = d_next_char (di);
1567
1568   if (c == 'h')
1569     d_number (di);
1570   else if (c == 'v')
1571     {
1572       d_number (di);
1573       if (d_next_char (di) != '_')
1574         return 0;
1575       d_number (di);
1576     }
1577   else
1578     return 0;
1579
1580   if (d_next_char (di) != '_')
1581     return 0;
1582
1583   return 1;
1584 }
1585
1586 /* <ctor-dtor-name> ::= C1
1587                     ::= C2
1588                     ::= C3
1589                     ::= D0
1590                     ::= D1
1591                     ::= D2
1592 */
1593
1594 static struct demangle_component *
1595 d_ctor_dtor_name (struct d_info *di)
1596 {
1597   if (di->last_name != NULL)
1598     {
1599       if (di->last_name->type == DEMANGLE_COMPONENT_NAME)
1600         di->expansion += di->last_name->u.s_name.len;
1601       else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD)
1602         di->expansion += di->last_name->u.s_string.len;
1603     }
1604   switch (d_next_char (di))
1605     {
1606     case 'C':
1607       {
1608         enum gnu_v3_ctor_kinds kind;
1609
1610         switch (d_next_char (di))
1611           {
1612           case '1':
1613             kind = gnu_v3_complete_object_ctor;
1614             break;
1615           case '2':
1616             kind = gnu_v3_base_object_ctor;
1617             break;
1618           case '3':
1619             kind = gnu_v3_complete_object_allocating_ctor;
1620             break;
1621           default:
1622             return NULL;
1623           }
1624         return d_make_ctor (di, kind, di->last_name);
1625       }
1626
1627     case 'D':
1628       {
1629         enum gnu_v3_dtor_kinds kind;
1630
1631         switch (d_next_char (di))
1632           {
1633           case '0':
1634             kind = gnu_v3_deleting_dtor;
1635             break;
1636           case '1':
1637             kind = gnu_v3_complete_object_dtor;
1638             break;
1639           case '2':
1640             kind = gnu_v3_base_object_dtor;
1641             break;
1642           default:
1643             return NULL;
1644           }
1645         return d_make_dtor (di, kind, di->last_name);
1646       }
1647
1648     default:
1649       return NULL;
1650     }
1651 }
1652
1653 /* <type> ::= <builtin-type>
1654           ::= <function-type>
1655           ::= <class-enum-type>
1656           ::= <array-type>
1657           ::= <pointer-to-member-type>
1658           ::= <template-param>
1659           ::= <template-template-param> <template-args>
1660           ::= <substitution>
1661           ::= <CV-qualifiers> <type>
1662           ::= P <type>
1663           ::= R <type>
1664           ::= C <type>
1665           ::= G <type>
1666           ::= U <source-name> <type>
1667
1668    <builtin-type> ::= various one letter codes
1669                   ::= u <source-name>
1670 */
1671
1672 CP_STATIC_IF_GLIBCPP_V3
1673 const struct demangle_builtin_type_info
1674 cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT] =
1675 {
1676   /* a */ { NL ("signed char"), NL ("signed char"),     D_PRINT_DEFAULT },
1677   /* b */ { NL ("bool"),        NL ("boolean"),         D_PRINT_BOOL },
1678   /* c */ { NL ("char"),        NL ("byte"),            D_PRINT_DEFAULT },
1679   /* d */ { NL ("double"),      NL ("double"),          D_PRINT_FLOAT },
1680   /* e */ { NL ("long double"), NL ("long double"),     D_PRINT_FLOAT },
1681   /* f */ { NL ("float"),       NL ("float"),           D_PRINT_FLOAT },
1682   /* g */ { NL ("__float128"),  NL ("__float128"),      D_PRINT_FLOAT },
1683   /* h */ { NL ("unsigned char"), NL ("unsigned char"), D_PRINT_DEFAULT },
1684   /* i */ { NL ("int"),         NL ("int"),             D_PRINT_INT },
1685   /* j */ { NL ("unsigned int"), NL ("unsigned"),       D_PRINT_UNSIGNED },
1686   /* k */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
1687   /* l */ { NL ("long"),        NL ("long"),            D_PRINT_LONG },
1688   /* m */ { NL ("unsigned long"), NL ("unsigned long"), D_PRINT_UNSIGNED_LONG },
1689   /* n */ { NL ("__int128"),    NL ("__int128"),        D_PRINT_DEFAULT },
1690   /* o */ { NL ("unsigned __int128"), NL ("unsigned __int128"),
1691             D_PRINT_DEFAULT },
1692   /* p */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
1693   /* q */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
1694   /* r */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
1695   /* s */ { NL ("short"),       NL ("short"),           D_PRINT_DEFAULT },
1696   /* t */ { NL ("unsigned short"), NL ("unsigned short"), D_PRINT_DEFAULT },
1697   /* u */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
1698   /* v */ { NL ("void"),        NL ("void"),            D_PRINT_VOID },
1699   /* w */ { NL ("wchar_t"),     NL ("char"),            D_PRINT_DEFAULT },
1700   /* x */ { NL ("long long"),   NL ("long"),            D_PRINT_LONG_LONG },
1701   /* y */ { NL ("unsigned long long"), NL ("unsigned long long"),
1702             D_PRINT_UNSIGNED_LONG_LONG },
1703   /* z */ { NL ("..."),         NL ("..."),             D_PRINT_DEFAULT },
1704 };
1705
1706 CP_STATIC_IF_GLIBCPP_V3
1707 struct demangle_component *
1708 cplus_demangle_type (struct d_info *di)
1709 {
1710   char peek;
1711   struct demangle_component *ret;
1712   int can_subst;
1713
1714   /* The ABI specifies that when CV-qualifiers are used, the base type
1715      is substitutable, and the fully qualified type is substitutable,
1716      but the base type with a strict subset of the CV-qualifiers is
1717      not substitutable.  The natural recursive implementation of the
1718      CV-qualifiers would cause subsets to be substitutable, so instead
1719      we pull them all off now.
1720
1721      FIXME: The ABI says that order-insensitive vendor qualifiers
1722      should be handled in the same way, but we have no way to tell
1723      which vendor qualifiers are order-insensitive and which are
1724      order-sensitive.  So we just assume that they are all
1725      order-sensitive.  g++ 3.4 supports only one vendor qualifier,
1726      __vector, and it treats it as order-sensitive when mangling
1727      names.  */
1728
1729   peek = d_peek_char (di);
1730   if (peek == 'r' || peek == 'V' || peek == 'K')
1731     {
1732       struct demangle_component **pret;
1733
1734       pret = d_cv_qualifiers (di, &ret, 0);
1735       if (pret == NULL)
1736         return NULL;
1737       *pret = cplus_demangle_type (di);
1738       if (! d_add_substitution (di, ret))
1739         return NULL;
1740       return ret;
1741     }
1742
1743   can_subst = 1;
1744
1745   switch (peek)
1746     {
1747     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
1748     case 'h': case 'i': case 'j':           case 'l': case 'm': case 'n':
1749     case 'o':                               case 's': case 't':
1750     case 'v': case 'w': case 'x': case 'y': case 'z':
1751       ret = d_make_builtin_type (di,
1752                                  &cplus_demangle_builtin_types[peek - 'a']);
1753       di->expansion += ret->u.s_builtin.type->len;
1754       can_subst = 0;
1755       d_advance (di, 1);
1756       break;
1757
1758     case 'u':
1759       d_advance (di, 1);
1760       ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE,
1761                          d_source_name (di), NULL);
1762       break;
1763
1764     case 'F':
1765       ret = d_function_type (di);
1766       break;
1767
1768     case '0': case '1': case '2': case '3': case '4':
1769     case '5': case '6': case '7': case '8': case '9':
1770     case 'N':
1771     case 'Z':
1772       ret = d_class_enum_type (di);
1773       break;
1774
1775     case 'A':
1776       ret = d_array_type (di);
1777       break;
1778
1779     case 'M':
1780       ret = d_pointer_to_member_type (di);
1781       break;
1782
1783     case 'T':
1784       ret = d_template_param (di);
1785       if (d_peek_char (di) == 'I')
1786         {
1787           /* This is <template-template-param> <template-args>.  The
1788              <template-template-param> part is a substitution
1789              candidate.  */
1790           if (! d_add_substitution (di, ret))
1791             return NULL;
1792           ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
1793                              d_template_args (di));
1794         }
1795       break;
1796
1797     case 'S':
1798       /* If this is a special substitution, then it is the start of
1799          <class-enum-type>.  */
1800       {
1801         char peek_next;
1802
1803         peek_next = d_peek_next_char (di);
1804         if (IS_DIGIT (peek_next)
1805             || peek_next == '_'
1806             || IS_UPPER (peek_next))
1807           {
1808             ret = d_substitution (di, 0);
1809             /* The substituted name may have been a template name and
1810                may be followed by tepmlate args.  */
1811             if (d_peek_char (di) == 'I')
1812               ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
1813                                  d_template_args (di));
1814             else
1815               can_subst = 0;
1816           }
1817         else
1818           {
1819             ret = d_class_enum_type (di);
1820             /* If the substitution was a complete type, then it is not
1821                a new substitution candidate.  However, if the
1822                substitution was followed by template arguments, then
1823                the whole thing is a substitution candidate.  */
1824             if (ret != NULL && ret->type == DEMANGLE_COMPONENT_SUB_STD)
1825               can_subst = 0;
1826           }
1827       }
1828       break;
1829
1830     case 'P':
1831       d_advance (di, 1);
1832       ret = d_make_comp (di, DEMANGLE_COMPONENT_POINTER,
1833                          cplus_demangle_type (di), NULL);
1834       break;
1835
1836     case 'R':
1837       d_advance (di, 1);
1838       ret = d_make_comp (di, DEMANGLE_COMPONENT_REFERENCE,
1839                          cplus_demangle_type (di), NULL);
1840       break;
1841
1842     case 'C':
1843       d_advance (di, 1);
1844       ret = d_make_comp (di, DEMANGLE_COMPONENT_COMPLEX,
1845                          cplus_demangle_type (di), NULL);
1846       break;
1847
1848     case 'G':
1849       d_advance (di, 1);
1850       ret = d_make_comp (di, DEMANGLE_COMPONENT_IMAGINARY,
1851                          cplus_demangle_type (di), NULL);
1852       break;
1853
1854     case 'U':
1855       d_advance (di, 1);
1856       ret = d_source_name (di);
1857       ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
1858                          cplus_demangle_type (di), ret);
1859       break;
1860
1861     default:
1862       return NULL;
1863     }
1864
1865   if (can_subst)
1866     {
1867       if (! d_add_substitution (di, ret))
1868         return NULL;
1869     }
1870
1871   return ret;
1872 }
1873
1874 /* <CV-qualifiers> ::= [r] [V] [K]  */
1875
1876 static struct demangle_component **
1877 d_cv_qualifiers (struct d_info *di,
1878                  struct demangle_component **pret, int member_fn)
1879 {
1880   char peek;
1881
1882   peek = d_peek_char (di);
1883   while (peek == 'r' || peek == 'V' || peek == 'K')
1884     {
1885       enum demangle_component_type t;
1886
1887       d_advance (di, 1);
1888       if (peek == 'r')
1889         {
1890           t = (member_fn
1891                ? DEMANGLE_COMPONENT_RESTRICT_THIS
1892                : DEMANGLE_COMPONENT_RESTRICT);
1893           di->expansion += sizeof "restrict";
1894         }
1895       else if (peek == 'V')
1896         {
1897           t = (member_fn
1898                ? DEMANGLE_COMPONENT_VOLATILE_THIS
1899                : DEMANGLE_COMPONENT_VOLATILE);
1900           di->expansion += sizeof "volatile";
1901         }
1902       else
1903         {
1904           t = (member_fn
1905                ? DEMANGLE_COMPONENT_CONST_THIS
1906                : DEMANGLE_COMPONENT_CONST);
1907           di->expansion += sizeof "const";
1908         }
1909
1910       *pret = d_make_comp (di, t, NULL, NULL);
1911       if (*pret == NULL)
1912         return NULL;
1913       pret = &d_left (*pret);
1914
1915       peek = d_peek_char (di);
1916     }
1917
1918   return pret;
1919 }
1920
1921 /* <function-type> ::= F [Y] <bare-function-type> E  */
1922
1923 static struct demangle_component *
1924 d_function_type (struct d_info *di)
1925 {
1926   struct demangle_component *ret;
1927
1928   if (d_next_char (di) != 'F')
1929     return NULL;
1930   if (d_peek_char (di) == 'Y')
1931     {
1932       /* Function has C linkage.  We don't print this information.
1933          FIXME: We should print it in verbose mode.  */
1934       d_advance (di, 1);
1935     }
1936   ret = d_bare_function_type (di, 1);
1937   if (d_next_char (di) != 'E')
1938     return NULL;
1939   return ret;
1940 }
1941
1942 /* <bare-function-type> ::= [J]<type>+  */
1943
1944 static struct demangle_component *
1945 d_bare_function_type (struct d_info *di, int has_return_type)
1946 {
1947   struct demangle_component *return_type;
1948   struct demangle_component *tl;
1949   struct demangle_component **ptl;
1950   char peek;
1951
1952   /* Detect special qualifier indicating that the first argument
1953      is the return type.  */
1954   peek = d_peek_char (di);
1955   if (peek == 'J')
1956     {
1957       d_advance (di, 1);
1958       has_return_type = 1;
1959     }
1960
1961   return_type = NULL;
1962   tl = NULL;
1963   ptl = &tl;
1964   while (1)
1965     {
1966       struct demangle_component *type;
1967
1968       peek = d_peek_char (di);
1969       if (peek == '\0' || peek == 'E')
1970         break;
1971       type = cplus_demangle_type (di);
1972       if (type == NULL)
1973         return NULL;
1974       if (has_return_type)
1975         {
1976           return_type = type;
1977           has_return_type = 0;
1978         }
1979       else
1980         {
1981           *ptl = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, type, NULL);
1982           if (*ptl == NULL)
1983             return NULL;
1984           ptl = &d_right (*ptl);
1985         }
1986     }
1987
1988   /* There should be at least one parameter type besides the optional
1989      return type.  A function which takes no arguments will have a
1990      single parameter type void.  */
1991   if (tl == NULL)
1992     return NULL;
1993
1994   /* If we have a single parameter type void, omit it.  */
1995   if (d_right (tl) == NULL
1996       && d_left (tl)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
1997       && d_left (tl)->u.s_builtin.type->print == D_PRINT_VOID)
1998     {
1999       di->expansion -= d_left (tl)->u.s_builtin.type->len;
2000       tl = NULL;
2001     }
2002
2003   return d_make_comp (di, DEMANGLE_COMPONENT_FUNCTION_TYPE, return_type, tl);
2004 }
2005
2006 /* <class-enum-type> ::= <name>  */
2007
2008 static struct demangle_component *
2009 d_class_enum_type (struct d_info *di)
2010 {
2011   return d_name (di);
2012 }
2013
2014 /* <array-type> ::= A <(positive dimension) number> _ <(element) type>
2015                 ::= A [<(dimension) expression>] _ <(element) type>
2016 */
2017
2018 static struct demangle_component *
2019 d_array_type (struct d_info *di)
2020 {
2021   char peek;
2022   struct demangle_component *dim;
2023
2024   if (d_next_char (di) != 'A')
2025     return NULL;
2026
2027   peek = d_peek_char (di);
2028   if (peek == '_')
2029     dim = NULL;
2030   else if (IS_DIGIT (peek))
2031     {
2032       const char *s;
2033
2034       s = d_str (di);
2035       do
2036         {
2037           d_advance (di, 1);
2038           peek = d_peek_char (di);
2039         }
2040       while (IS_DIGIT (peek));
2041       dim = d_make_name (di, s, d_str (di) - s);
2042       if (dim == NULL)
2043         return NULL;
2044     }
2045   else
2046     {
2047       dim = d_expression (di);
2048       if (dim == NULL)
2049         return NULL;
2050     }
2051
2052   if (d_next_char (di) != '_')
2053     return NULL;
2054
2055   return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim,
2056                       cplus_demangle_type (di));
2057 }
2058
2059 /* <pointer-to-member-type> ::= M <(class) type> <(member) type>  */
2060
2061 static struct demangle_component *
2062 d_pointer_to_member_type (struct d_info *di)
2063 {
2064   struct demangle_component *cl;
2065   struct demangle_component *mem;
2066   struct demangle_component **pmem;
2067
2068   if (d_next_char (di) != 'M')
2069     return NULL;
2070
2071   cl = cplus_demangle_type (di);
2072
2073   /* The ABI specifies that any type can be a substitution source, and
2074      that M is followed by two types, and that when a CV-qualified
2075      type is seen both the base type and the CV-qualified types are
2076      substitution sources.  The ABI also specifies that for a pointer
2077      to a CV-qualified member function, the qualifiers are attached to
2078      the second type.  Given the grammar, a plain reading of the ABI
2079      suggests that both the CV-qualified member function and the
2080      non-qualified member function are substitution sources.  However,
2081      g++ does not work that way.  g++ treats only the CV-qualified
2082      member function as a substitution source.  FIXME.  So to work
2083      with g++, we need to pull off the CV-qualifiers here, in order to
2084      avoid calling add_substitution() in cplus_demangle_type().  But
2085      for a CV-qualified member which is not a function, g++ does
2086      follow the ABI, so we need to handle that case here by calling
2087      d_add_substitution ourselves.  */
2088
2089   pmem = d_cv_qualifiers (di, &mem, 1);
2090   if (pmem == NULL)
2091     return NULL;
2092   *pmem = cplus_demangle_type (di);
2093
2094   if (pmem != &mem && (*pmem)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
2095     {
2096       if (! d_add_substitution (di, mem))
2097         return NULL;
2098     }
2099
2100   return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem);
2101 }
2102
2103 /* <template-param> ::= T_
2104                     ::= T <(parameter-2 non-negative) number> _
2105 */
2106
2107 static struct demangle_component *
2108 d_template_param (struct d_info *di)
2109 {
2110   long param;
2111
2112   if (d_next_char (di) != 'T')
2113     return NULL;
2114
2115   if (d_peek_char (di) == '_')
2116     param = 0;
2117   else
2118     {
2119       param = d_number (di);
2120       if (param < 0)
2121         return NULL;
2122       param += 1;
2123     }
2124
2125   if (d_next_char (di) != '_')
2126     return NULL;
2127
2128   ++di->did_subs;
2129
2130   return d_make_template_param (di, param);
2131 }
2132
2133 /* <template-args> ::= I <template-arg>+ E  */
2134
2135 static struct demangle_component *
2136 d_template_args (struct d_info *di)
2137 {
2138   struct demangle_component *hold_last_name;
2139   struct demangle_component *al;
2140   struct demangle_component **pal;
2141
2142   /* Preserve the last name we saw--don't let the template arguments
2143      clobber it, as that would give us the wrong name for a subsequent
2144      constructor or destructor.  */
2145   hold_last_name = di->last_name;
2146
2147   if (d_next_char (di) != 'I')
2148     return NULL;
2149
2150   al = NULL;
2151   pal = &al;
2152   while (1)
2153     {
2154       struct demangle_component *a;
2155
2156       a = d_template_arg (di);
2157       if (a == NULL)
2158         return NULL;
2159
2160       *pal = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, a, NULL);
2161       if (*pal == NULL)
2162         return NULL;
2163       pal = &d_right (*pal);
2164
2165       if (d_peek_char (di) == 'E')
2166         {
2167           d_advance (di, 1);
2168           break;
2169         }
2170     }
2171
2172   di->last_name = hold_last_name;
2173
2174   return al;
2175 }
2176
2177 /* <template-arg> ::= <type>
2178                   ::= X <expression> E
2179                   ::= <expr-primary>
2180 */
2181
2182 static struct demangle_component *
2183 d_template_arg (struct d_info *di)
2184 {
2185   struct demangle_component *ret;
2186
2187   switch (d_peek_char (di))
2188     {
2189     case 'X':
2190       d_advance (di, 1);
2191       ret = d_expression (di);
2192       if (d_next_char (di) != 'E')
2193         return NULL;
2194       return ret;
2195
2196     case 'L':
2197       return d_expr_primary (di);
2198
2199     default:
2200       return cplus_demangle_type (di);
2201     }
2202 }
2203
2204 /* <expression> ::= <(unary) operator-name> <expression>
2205                 ::= <(binary) operator-name> <expression> <expression>
2206                 ::= <(trinary) operator-name> <expression> <expression> <expression>
2207                 ::= st <type>
2208                 ::= <template-param>
2209                 ::= sr <type> <unqualified-name>
2210                 ::= sr <type> <unqualified-name> <template-args>
2211                 ::= <expr-primary>
2212 */
2213
2214 static struct demangle_component *
2215 d_expression (struct d_info *di)
2216 {
2217   char peek;
2218
2219   peek = d_peek_char (di);
2220   if (peek == 'L')
2221     return d_expr_primary (di);
2222   else if (peek == 'T')
2223     return d_template_param (di);
2224   else if (peek == 's' && d_peek_next_char (di) == 'r')
2225     {
2226       struct demangle_component *type;
2227       struct demangle_component *name;
2228
2229       d_advance (di, 2);
2230       type = cplus_demangle_type (di);
2231       name = d_unqualified_name (di);
2232       if (d_peek_char (di) != 'I')
2233         return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, name);
2234       else
2235         return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type,
2236                             d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name,
2237                                          d_template_args (di)));
2238     }
2239   else
2240     {
2241       struct demangle_component *op;
2242       int args;
2243
2244       op = d_operator_name (di);
2245       if (op == NULL)
2246         return NULL;
2247
2248       if (op->type == DEMANGLE_COMPONENT_OPERATOR)
2249         di->expansion += op->u.s_operator.op->len - 2;
2250
2251       if (op->type == DEMANGLE_COMPONENT_OPERATOR
2252           && strcmp (op->u.s_operator.op->code, "st") == 0)
2253         return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
2254                             cplus_demangle_type (di));
2255
2256       switch (op->type)
2257         {
2258         default:
2259           return NULL;
2260         case DEMANGLE_COMPONENT_OPERATOR:
2261           args = op->u.s_operator.op->args;
2262           break;
2263         case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
2264           args = op->u.s_extended_operator.args;
2265           break;
2266         case DEMANGLE_COMPONENT_CAST:
2267           args = 1;
2268           break;
2269         }
2270
2271       switch (args)
2272         {
2273         case 1:
2274           return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
2275                               d_expression (di));
2276         case 2:
2277           {
2278             struct demangle_component *left;
2279
2280             left = d_expression (di);
2281             return d_make_comp (di, DEMANGLE_COMPONENT_BINARY, op,
2282                                 d_make_comp (di,
2283                                              DEMANGLE_COMPONENT_BINARY_ARGS,
2284                                              left,
2285                                              d_expression (di)));
2286           }
2287         case 3:
2288           {
2289             struct demangle_component *first;
2290             struct demangle_component *second;
2291
2292             first = d_expression (di);
2293             second = d_expression (di);
2294             return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op,
2295                                 d_make_comp (di,
2296                                              DEMANGLE_COMPONENT_TRINARY_ARG1,
2297                                              first,
2298                                              d_make_comp (di,
2299                                                           DEMANGLE_COMPONENT_TRINARY_ARG2,
2300                                                           second,
2301                                                           d_expression (di))));
2302           }
2303         default:
2304           return NULL;
2305         }
2306     }
2307 }
2308
2309 /* <expr-primary> ::= L <type> <(value) number> E
2310                   ::= L <type> <(value) float> E
2311                   ::= L <mangled-name> E
2312 */
2313
2314 static struct demangle_component *
2315 d_expr_primary (struct d_info *di)
2316 {
2317   struct demangle_component *ret;
2318
2319   if (d_next_char (di) != 'L')
2320     return NULL;
2321   if (d_peek_char (di) == '_')
2322     ret = cplus_demangle_mangled_name (di, 0);
2323   else
2324     {
2325       struct demangle_component *type;
2326       enum demangle_component_type t;
2327       const char *s;
2328
2329       type = cplus_demangle_type (di);
2330       if (type == NULL)
2331         return NULL;
2332
2333       /* If we have a type we know how to print, we aren't going to
2334          print the type name itself.  */
2335       if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
2336           && type->u.s_builtin.type->print != D_PRINT_DEFAULT)
2337         di->expansion -= type->u.s_builtin.type->len;
2338
2339       /* Rather than try to interpret the literal value, we just
2340          collect it as a string.  Note that it's possible to have a
2341          floating point literal here.  The ABI specifies that the
2342          format of such literals is machine independent.  That's fine,
2343          but what's not fine is that versions of g++ up to 3.2 with
2344          -fabi-version=1 used upper case letters in the hex constant,
2345          and dumped out gcc's internal representation.  That makes it
2346          hard to tell where the constant ends, and hard to dump the
2347          constant in any readable form anyhow.  We don't attempt to
2348          handle these cases.  */
2349
2350       t = DEMANGLE_COMPONENT_LITERAL;
2351       if (d_peek_char (di) == 'n')
2352         {
2353           t = DEMANGLE_COMPONENT_LITERAL_NEG;
2354           d_advance (di, 1);
2355         }
2356       s = d_str (di);
2357       while (d_peek_char (di) != 'E')
2358         {
2359           if (d_peek_char (di) == '\0')
2360             return NULL;
2361           d_advance (di, 1);
2362         }
2363       ret = d_make_comp (di, t, type, d_make_name (di, s, d_str (di) - s));
2364     }
2365   if (d_next_char (di) != 'E')
2366     return NULL;
2367   return ret;
2368 }
2369
2370 /* <local-name> ::= Z <(function) encoding> E <(entity) name> [<discriminator>]
2371                 ::= Z <(function) encoding> E s [<discriminator>]
2372 */
2373
2374 static struct demangle_component *
2375 d_local_name (struct d_info *di)
2376 {
2377   struct demangle_component *function;
2378
2379   if (d_next_char (di) != 'Z')
2380     return NULL;
2381
2382   function = d_encoding (di, 0);
2383
2384   if (d_next_char (di) != 'E')
2385     return NULL;
2386
2387   if (d_peek_char (di) == 's')
2388     {
2389       d_advance (di, 1);
2390       if (! d_discriminator (di))
2391         return NULL;
2392       return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function,
2393                           d_make_name (di, "string literal",
2394                                        sizeof "string literal" - 1));
2395     }
2396   else
2397     {
2398       struct demangle_component *name;
2399
2400       name = d_name (di);
2401       if (! d_discriminator (di))
2402         return NULL;
2403       return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
2404     }
2405 }
2406
2407 /* <discriminator> ::= _ <(non-negative) number>
2408
2409    We demangle the discriminator, but we don't print it out.  FIXME:
2410    We should print it out in verbose mode.  */
2411
2412 static int
2413 d_discriminator (struct d_info *di)
2414 {
2415   long discrim;
2416
2417   if (d_peek_char (di) != '_')
2418     return 1;
2419   d_advance (di, 1);
2420   discrim = d_number (di);
2421   if (discrim < 0)
2422     return 0;
2423   return 1;
2424 }
2425
2426 /* Add a new substitution.  */
2427
2428 static int
2429 d_add_substitution (struct d_info *di, struct demangle_component *dc)
2430 {
2431   if (dc == NULL)
2432     return 0;
2433   if (di->next_sub >= di->num_subs)
2434     return 0;
2435   di->subs[di->next_sub] = dc;
2436   ++di->next_sub;
2437   return 1;
2438 }
2439
2440 /* <substitution> ::= S <seq-id> _
2441                   ::= S_
2442                   ::= St
2443                   ::= Sa
2444                   ::= Sb
2445                   ::= Ss
2446                   ::= Si
2447                   ::= So
2448                   ::= Sd
2449
2450    If PREFIX is non-zero, then this type is being used as a prefix in
2451    a qualified name.  In this case, for the standard substitutions, we
2452    need to check whether we are being used as a prefix for a
2453    constructor or destructor, and return a full template name.
2454    Otherwise we will get something like std::iostream::~iostream()
2455    which does not correspond particularly well to any function which
2456    actually appears in the source.
2457 */
2458
2459 static const struct d_standard_sub_info standard_subs[] =
2460 {
2461   { 't', NL ("std"),
2462     NL ("std"),
2463     NULL, 0 },
2464   { 'a', NL ("std::allocator"),
2465     NL ("std::allocator"),
2466     NL ("allocator") },
2467   { 'b', NL ("std::basic_string"),
2468     NL ("std::basic_string"),
2469     NL ("basic_string") },
2470   { 's', NL ("std::string"),
2471     NL ("std::basic_string<char, std::char_traits<char>, std::allocator<char> >"),
2472     NL ("basic_string") },
2473   { 'i', NL ("std::istream"),
2474     NL ("std::basic_istream<char, std::char_traits<char> >"),
2475     NL ("basic_istream") },
2476   { 'o', NL ("std::ostream"),
2477     NL ("std::basic_ostream<char, std::char_traits<char> >"),
2478     NL ("basic_ostream") },
2479   { 'd', NL ("std::iostream"),
2480     NL ("std::basic_iostream<char, std::char_traits<char> >"),
2481     NL ("basic_iostream") }
2482 };
2483
2484 static struct demangle_component *
2485 d_substitution (struct d_info *di, int prefix)
2486 {
2487   char c;
2488
2489   if (d_next_char (di) != 'S')
2490     return NULL;
2491
2492   c = d_next_char (di);
2493   if (c == '_' || IS_DIGIT (c) || IS_UPPER (c))
2494     {
2495       int id;
2496
2497       id = 0;
2498       if (c != '_')
2499         {
2500           do
2501             {
2502               if (IS_DIGIT (c))
2503                 id = id * 36 + c - '0';
2504               else if (IS_UPPER (c))
2505                 id = id * 36 + c - 'A' + 10;
2506               else
2507                 return NULL;
2508               c = d_next_char (di);
2509             }
2510           while (c != '_');
2511
2512           ++id;
2513         }
2514
2515       if (id >= di->next_sub)
2516         return NULL;
2517
2518       ++di->did_subs;
2519
2520       return di->subs[id];
2521     }
2522   else
2523     {
2524       int verbose;
2525       const struct d_standard_sub_info *p;
2526       const struct d_standard_sub_info *pend;
2527
2528       verbose = (di->options & DMGL_VERBOSE) != 0;
2529       if (! verbose && prefix)
2530         {
2531           char peek;
2532
2533           peek = d_peek_char (di);
2534           if (peek == 'C' || peek == 'D')
2535             verbose = 1;
2536         }
2537
2538       pend = (&standard_subs[0]
2539               + sizeof standard_subs / sizeof standard_subs[0]);
2540       for (p = &standard_subs[0]; p < pend; ++p)
2541         {
2542           if (c == p->code)
2543             {
2544               const char *s;
2545               int len;
2546
2547               if (p->set_last_name != NULL)
2548                 di->last_name = d_make_sub (di, p->set_last_name,
2549                                             p->set_last_name_len);
2550               if (verbose)
2551                 {
2552                   s = p->full_expansion;
2553                   len = p->full_len;
2554                 }
2555               else
2556                 {
2557                   s = p->simple_expansion;
2558                   len = p->simple_len;
2559                 }
2560               di->expansion += len;
2561               return d_make_sub (di, s, len);
2562             }
2563         }
2564
2565       return NULL;
2566     }
2567 }
2568
2569 /* Resize the print buffer.  */
2570
2571 static void
2572 d_print_resize (struct d_print_info *dpi, size_t add)
2573 {
2574   size_t need;
2575
2576   if (dpi->buf == NULL)
2577     return;
2578   need = dpi->len + add;
2579   while (need > dpi->alc)
2580     {
2581       size_t newalc;
2582       char *newbuf;
2583
2584       newalc = dpi->alc * 2;
2585       newbuf = (char *) realloc (dpi->buf, newalc);
2586       if (newbuf == NULL)
2587         {
2588           free (dpi->buf);
2589           dpi->buf = NULL;
2590           dpi->allocation_failure = 1;
2591           return;
2592         }
2593       dpi->buf = newbuf;
2594       dpi->alc = newalc;
2595     }
2596 }
2597
2598 /* Append a character to the print buffer.  */
2599
2600 static void
2601 d_print_append_char (struct d_print_info *dpi, int c)
2602 {
2603   if (dpi->buf != NULL)
2604     {
2605       if (dpi->len >= dpi->alc)
2606         {
2607           d_print_resize (dpi, 1);
2608           if (dpi->buf == NULL)
2609             return;
2610         }
2611
2612       dpi->buf[dpi->len] = c;
2613       ++dpi->len;
2614     }
2615 }
2616
2617 /* Append a buffer to the print buffer.  */
2618
2619 static void
2620 d_print_append_buffer (struct d_print_info *dpi, const char *s, size_t l)
2621 {
2622   if (dpi->buf != NULL)
2623     {
2624       if (dpi->len + l > dpi->alc)
2625         {
2626           d_print_resize (dpi, l);
2627           if (dpi->buf == NULL)
2628             return;
2629         }
2630
2631       memcpy (dpi->buf + dpi->len, s, l);
2632       dpi->len += l;
2633     }
2634 }
2635
2636 /* Indicate that an error occurred during printing.  */
2637
2638 static void
2639 d_print_error (struct d_print_info *dpi)
2640 {
2641   free (dpi->buf);
2642   dpi->buf = NULL;
2643 }
2644
2645 /* Turn components into a human readable string.  OPTIONS is the
2646    options bits passed to the demangler.  DC is the tree to print.
2647    ESTIMATE is a guess at the length of the result.  This returns a
2648    string allocated by malloc, or NULL on error.  On success, this
2649    sets *PALC to the size of the allocated buffer.  On failure, this
2650    sets *PALC to 0 for a bad parse, or to 1 for a memory allocation
2651    failure.  */
2652
2653 CP_STATIC_IF_GLIBCPP_V3
2654 char *
2655 cplus_demangle_print (int options, const struct demangle_component *dc,
2656                       int estimate, size_t *palc)
2657 {
2658   struct d_print_info dpi;
2659
2660   dpi.options = options;
2661
2662   dpi.alc = estimate + 1;
2663   dpi.buf = (char *) malloc (dpi.alc);
2664   if (dpi.buf == NULL)
2665     {
2666       *palc = 1;
2667       return NULL;
2668     }
2669
2670   dpi.len = 0;
2671   dpi.templates = NULL;
2672   dpi.modifiers = NULL;
2673
2674   dpi.allocation_failure = 0;
2675
2676   d_print_comp (&dpi, dc);
2677
2678   d_append_char (&dpi, '\0');
2679
2680   if (dpi.buf != NULL)
2681     *palc = dpi.alc;
2682   else
2683     *palc = dpi.allocation_failure;
2684
2685   return dpi.buf;
2686 }
2687
2688 /* Subroutine to handle components.  */
2689
2690 static void
2691 d_print_comp (struct d_print_info *dpi,
2692               const struct demangle_component *dc)
2693 {
2694   if (dc == NULL)
2695     {
2696       d_print_error (dpi);
2697       return;
2698     }
2699   if (d_print_saw_error (dpi))
2700     return;
2701
2702   switch (dc->type)
2703     {
2704     case DEMANGLE_COMPONENT_NAME:
2705       if ((dpi->options & DMGL_JAVA) == 0)
2706         d_append_buffer (dpi, dc->u.s_name.s, dc->u.s_name.len);
2707       else
2708         d_print_java_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len);
2709       return;
2710
2711     case DEMANGLE_COMPONENT_QUAL_NAME:
2712     case DEMANGLE_COMPONENT_LOCAL_NAME:
2713       d_print_comp (dpi, d_left (dc));
2714       if ((dpi->options & DMGL_JAVA) == 0)
2715         d_append_string_constant (dpi, "::");
2716       else
2717         d_append_char (dpi, '.');
2718       d_print_comp (dpi, d_right (dc));
2719       return;
2720
2721     case DEMANGLE_COMPONENT_TYPED_NAME:
2722       {
2723         struct d_print_mod *hold_modifiers;
2724         struct demangle_component *typed_name;
2725         struct d_print_mod adpm[4];
2726         unsigned int i;
2727         struct d_print_template dpt;
2728
2729         /* Pass the name down to the type so that it can be printed in
2730            the right place for the type.  We also have to pass down
2731            any CV-qualifiers, which apply to the this parameter.  */
2732         hold_modifiers = dpi->modifiers;
2733         i = 0;
2734         typed_name = d_left (dc);
2735         while (typed_name != NULL)
2736           {
2737             if (i >= sizeof adpm / sizeof adpm[0])
2738               {
2739                 d_print_error (dpi);
2740                 return;
2741               }
2742
2743             adpm[i].next = dpi->modifiers;
2744             dpi->modifiers = &adpm[i];
2745             adpm[i].mod = typed_name;
2746             adpm[i].printed = 0;
2747             adpm[i].templates = dpi->templates;
2748             ++i;
2749
2750             if (typed_name->type != DEMANGLE_COMPONENT_RESTRICT_THIS
2751                 && typed_name->type != DEMANGLE_COMPONENT_VOLATILE_THIS
2752                 && typed_name->type != DEMANGLE_COMPONENT_CONST_THIS)
2753               break;
2754
2755             typed_name = d_left (typed_name);
2756           }
2757
2758         /* If typed_name is a template, then it applies to the
2759            function type as well.  */
2760         if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
2761           {
2762             dpt.next = dpi->templates;
2763             dpi->templates = &dpt;
2764             dpt.template_decl = typed_name;
2765           }
2766
2767         /* If typed_name is a DEMANGLE_COMPONENT_LOCAL_NAME, then
2768            there may be CV-qualifiers on its right argument which
2769            really apply here; this happens when parsing a class which
2770            is local to a function.  */
2771         if (typed_name->type == DEMANGLE_COMPONENT_LOCAL_NAME)
2772           {
2773             struct demangle_component *local_name;
2774
2775             local_name = d_right (typed_name);
2776             while (local_name->type == DEMANGLE_COMPONENT_RESTRICT_THIS
2777                    || local_name->type == DEMANGLE_COMPONENT_VOLATILE_THIS
2778                    || local_name->type == DEMANGLE_COMPONENT_CONST_THIS)
2779               {
2780                 if (i >= sizeof adpm / sizeof adpm[0])
2781                   {
2782                     d_print_error (dpi);
2783                     return;
2784                   }
2785
2786                 adpm[i] = adpm[i - 1];
2787                 adpm[i].next = &adpm[i - 1];
2788                 dpi->modifiers = &adpm[i];
2789
2790                 adpm[i - 1].mod = local_name;
2791                 adpm[i - 1].printed = 0;
2792                 adpm[i - 1].templates = dpi->templates;
2793                 ++i;
2794
2795                 local_name = d_left (local_name);
2796               }
2797           }
2798
2799         d_print_comp (dpi, d_right (dc));
2800
2801         if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
2802           dpi->templates = dpt.next;
2803
2804         /* If the modifiers didn't get printed by the type, print them
2805            now.  */
2806         while (i > 0)
2807           {
2808             --i;
2809             if (! adpm[i].printed)
2810               {
2811                 d_append_char (dpi, ' ');
2812                 d_print_mod (dpi, adpm[i].mod);
2813               }
2814           }
2815
2816         dpi->modifiers = hold_modifiers;
2817
2818         return;
2819       }
2820
2821     case DEMANGLE_COMPONENT_TEMPLATE:
2822       {
2823         struct d_print_mod *hold_dpm;
2824
2825         /* Don't push modifiers into a template definition.  Doing so
2826            could give the wrong definition for a template argument.
2827            Instead, treat the template essentially as a name.  */
2828
2829         hold_dpm = dpi->modifiers;
2830         dpi->modifiers = NULL;
2831
2832         d_print_comp (dpi, d_left (dc));
2833         if (d_last_char (dpi) == '<')
2834           d_append_char (dpi, ' ');
2835         d_append_char (dpi, '<');
2836         d_print_comp (dpi, d_right (dc));
2837         /* Avoid generating two consecutive '>' characters, to avoid
2838            the C++ syntactic ambiguity.  */
2839         if (d_last_char (dpi) == '>')
2840           d_append_char (dpi, ' ');
2841         d_append_char (dpi, '>');
2842
2843         dpi->modifiers = hold_dpm;
2844
2845         return;
2846       }
2847
2848     case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
2849       {
2850         long i;
2851         struct demangle_component *a;
2852         struct d_print_template *hold_dpt;
2853
2854         if (dpi->templates == NULL)
2855           {
2856             d_print_error (dpi);
2857             return;
2858           }
2859         i = dc->u.s_number.number;
2860         for (a = d_right (dpi->templates->template_decl);
2861              a != NULL;
2862              a = d_right (a))
2863           {
2864             if (a->type != DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
2865               {
2866                 d_print_error (dpi);
2867                 return;
2868               }
2869             if (i <= 0)
2870               break;
2871             --i;
2872           }
2873         if (i != 0 || a == NULL)
2874           {
2875             d_print_error (dpi);
2876             return;
2877           }
2878
2879         /* While processing this parameter, we need to pop the list of
2880            templates.  This is because the template parameter may
2881            itself be a reference to a parameter of an outer
2882            template.  */
2883
2884         hold_dpt = dpi->templates;
2885         dpi->templates = hold_dpt->next;
2886
2887         d_print_comp (dpi, d_left (a));
2888
2889         dpi->templates = hold_dpt;
2890
2891         return;
2892       }
2893
2894     case DEMANGLE_COMPONENT_CTOR:
2895       d_print_comp (dpi, dc->u.s_ctor.name);
2896       return;
2897
2898     case DEMANGLE_COMPONENT_DTOR:
2899       d_append_char (dpi, '~');
2900       d_print_comp (dpi, dc->u.s_dtor.name);
2901       return;
2902
2903     case DEMANGLE_COMPONENT_VTABLE:
2904       d_append_string_constant (dpi, "vtable for ");
2905       d_print_comp (dpi, d_left (dc));
2906       return;
2907
2908     case DEMANGLE_COMPONENT_VTT:
2909       d_append_string_constant (dpi, "VTT for ");
2910       d_print_comp (dpi, d_left (dc));
2911       return;
2912
2913     case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
2914       d_append_string_constant (dpi, "construction vtable for ");
2915       d_print_comp (dpi, d_left (dc));
2916       d_append_string_constant (dpi, "-in-");
2917       d_print_comp (dpi, d_right (dc));
2918       return;
2919
2920     case DEMANGLE_COMPONENT_TYPEINFO:
2921       d_append_string_constant (dpi, "typeinfo for ");
2922       d_print_comp (dpi, d_left (dc));
2923       return;
2924
2925     case DEMANGLE_COMPONENT_TYPEINFO_NAME:
2926       d_append_string_constant (dpi, "typeinfo name for ");
2927       d_print_comp (dpi, d_left (dc));
2928       return;
2929
2930     case DEMANGLE_COMPONENT_TYPEINFO_FN:
2931       d_append_string_constant (dpi, "typeinfo fn for ");
2932       d_print_comp (dpi, d_left (dc));
2933       return;
2934
2935     case DEMANGLE_COMPONENT_THUNK:
2936       d_append_string_constant (dpi, "non-virtual thunk to ");
2937       d_print_comp (dpi, d_left (dc));
2938       return;
2939
2940     case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
2941       d_append_string_constant (dpi, "virtual thunk to ");
2942       d_print_comp (dpi, d_left (dc));
2943       return;
2944
2945     case DEMANGLE_COMPONENT_COVARIANT_THUNK:
2946       d_append_string_constant (dpi, "covariant return thunk to ");
2947       d_print_comp (dpi, d_left (dc));
2948       return;
2949
2950     case DEMANGLE_COMPONENT_JAVA_CLASS:
2951       d_append_string_constant (dpi, "java Class for ");
2952       d_print_comp (dpi, d_left (dc));
2953       return;
2954
2955     case DEMANGLE_COMPONENT_GUARD:
2956       d_append_string_constant (dpi, "guard variable for ");
2957       d_print_comp (dpi, d_left (dc));
2958       return;
2959
2960     case DEMANGLE_COMPONENT_REFTEMP:
2961       d_append_string_constant (dpi, "reference temporary for ");
2962       d_print_comp (dpi, d_left (dc));
2963       return;
2964
2965     case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
2966       d_append_string_constant (dpi, "hidden alias for ");
2967       d_print_comp (dpi, d_left (dc));
2968       return;
2969
2970     case DEMANGLE_COMPONENT_SUB_STD:
2971       d_append_buffer (dpi, dc->u.s_string.string, dc->u.s_string.len);
2972       return;
2973
2974     case DEMANGLE_COMPONENT_RESTRICT:
2975     case DEMANGLE_COMPONENT_VOLATILE:
2976     case DEMANGLE_COMPONENT_CONST:
2977       {
2978         struct d_print_mod *pdpm;
2979
2980         /* When printing arrays, it's possible to have cases where the
2981            same CV-qualifier gets pushed on the stack multiple times.
2982            We only need to print it once.  */
2983
2984         for (pdpm = dpi->modifiers; pdpm != NULL; pdpm = pdpm->next)
2985           {
2986             if (! pdpm->printed)
2987               {
2988                 if (pdpm->mod->type != DEMANGLE_COMPONENT_RESTRICT
2989                     && pdpm->mod->type != DEMANGLE_COMPONENT_VOLATILE
2990                     && pdpm->mod->type != DEMANGLE_COMPONENT_CONST)
2991                   break;
2992                 if (pdpm->mod->type == dc->type)
2993                   {
2994                     d_print_comp (dpi, d_left (dc));
2995                     return;
2996                   }
2997               }
2998           }
2999       }
3000       /* Fall through.  */
3001     case DEMANGLE_COMPONENT_RESTRICT_THIS:
3002     case DEMANGLE_COMPONENT_VOLATILE_THIS:
3003     case DEMANGLE_COMPONENT_CONST_THIS:
3004     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
3005     case DEMANGLE_COMPONENT_POINTER:
3006     case DEMANGLE_COMPONENT_REFERENCE:
3007     case DEMANGLE_COMPONENT_COMPLEX:
3008     case DEMANGLE_COMPONENT_IMAGINARY:
3009       {
3010         /* We keep a list of modifiers on the stack.  */
3011         struct d_print_mod dpm;
3012
3013         dpm.next = dpi->modifiers;
3014         dpi->modifiers = &dpm;
3015         dpm.mod = dc;
3016         dpm.printed = 0;
3017         dpm.templates = dpi->templates;
3018
3019         d_print_comp (dpi, d_left (dc));
3020
3021         /* If the modifier didn't get printed by the type, print it
3022            now.  */
3023         if (! dpm.printed)
3024           d_print_mod (dpi, dc);
3025
3026         dpi->modifiers = dpm.next;
3027
3028         return;
3029       }
3030
3031     case DEMANGLE_COMPONENT_BUILTIN_TYPE:
3032       if ((dpi->options & DMGL_JAVA) == 0)
3033         d_append_buffer (dpi, dc->u.s_builtin.type->name,
3034                          dc->u.s_builtin.type->len);
3035       else
3036         d_append_buffer (dpi, dc->u.s_builtin.type->java_name,
3037                          dc->u.s_builtin.type->java_len);
3038       return;
3039
3040     case DEMANGLE_COMPONENT_VENDOR_TYPE:
3041       d_print_comp (dpi, d_left (dc));
3042       return;
3043
3044     case DEMANGLE_COMPONENT_FUNCTION_TYPE:
3045       {
3046         if ((dpi->options & DMGL_RET_POSTFIX) != 0)
3047           d_print_function_type (dpi, dc, dpi->modifiers);
3048
3049         /* Print return type if present */
3050         if (d_left (dc) != NULL)
3051           {
3052             struct d_print_mod dpm;
3053
3054             /* We must pass this type down as a modifier in order to
3055                print it in the right location.  */
3056             dpm.next = dpi->modifiers;
3057             dpi->modifiers = &dpm;
3058             dpm.mod = dc;
3059             dpm.printed = 0;
3060             dpm.templates = dpi->templates;
3061
3062             d_print_comp (dpi, d_left (dc));
3063
3064             dpi->modifiers = dpm.next;
3065
3066             if (dpm.printed)
3067               return;
3068
3069             /* In standard prefix notation, there is a space between the
3070                return type and the function signature.  */
3071             if ((dpi->options & DMGL_RET_POSTFIX) == 0)
3072               d_append_char (dpi, ' ');
3073           }
3074
3075         if ((dpi->options & DMGL_RET_POSTFIX) == 0) 
3076           d_print_function_type (dpi, dc, dpi->modifiers);
3077
3078         return;
3079       }
3080
3081     case DEMANGLE_COMPONENT_ARRAY_TYPE:
3082       {
3083         struct d_print_mod *hold_modifiers;
3084         struct d_print_mod adpm[4];
3085         unsigned int i;
3086         struct d_print_mod *pdpm;
3087
3088         /* We must pass this type down as a modifier in order to print
3089            multi-dimensional arrays correctly.  If the array itself is
3090            CV-qualified, we act as though the element type were
3091            CV-qualified.  We do this by copying the modifiers down
3092            rather than fiddling pointers, so that we don't wind up
3093            with a d_print_mod higher on the stack pointing into our
3094            stack frame after we return.  */
3095
3096         hold_modifiers = dpi->modifiers;
3097
3098         adpm[0].next = hold_modifiers;
3099         dpi->modifiers = &adpm[0];
3100         adpm[0].mod = dc;
3101         adpm[0].printed = 0;
3102         adpm[0].templates = dpi->templates;
3103
3104         i = 1;
3105         pdpm = hold_modifiers;
3106         while (pdpm != NULL
3107                && (pdpm->mod->type == DEMANGLE_COMPONENT_RESTRICT
3108                    || pdpm->mod->type == DEMANGLE_COMPONENT_VOLATILE
3109                    || pdpm->mod->type == DEMANGLE_COMPONENT_CONST))
3110           {
3111             if (! pdpm->printed)
3112               {
3113                 if (i >= sizeof adpm / sizeof adpm[0])
3114                   {
3115                     d_print_error (dpi);
3116                     return;
3117                   }
3118
3119                 adpm[i] = *pdpm;
3120                 adpm[i].next = dpi->modifiers;
3121                 dpi->modifiers = &adpm[i];
3122                 pdpm->printed = 1;
3123                 ++i;
3124               }
3125
3126             pdpm = pdpm->next;
3127           }
3128
3129         d_print_comp (dpi, d_right (dc));
3130
3131         dpi->modifiers = hold_modifiers;
3132
3133         if (adpm[0].printed)
3134           return;
3135
3136         while (i > 1)
3137           {
3138             --i;
3139             d_print_mod (dpi, adpm[i].mod);
3140           }
3141
3142         d_print_array_type (dpi, dc, dpi->modifiers);
3143
3144         return;
3145       }
3146
3147     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
3148       {
3149         struct d_print_mod dpm;
3150
3151         dpm.next = dpi->modifiers;
3152         dpi->modifiers = &dpm;
3153         dpm.mod = dc;
3154         dpm.printed = 0;
3155         dpm.templates = dpi->templates;
3156
3157         d_print_comp (dpi, d_right (dc));
3158
3159         /* If the modifier didn't get printed by the type, print it
3160            now.  */
3161         if (! dpm.printed)
3162           {
3163             d_append_char (dpi, ' ');
3164             d_print_comp (dpi, d_left (dc));
3165             d_append_string_constant (dpi, "::*");
3166           }
3167
3168         dpi->modifiers = dpm.next;
3169
3170         return;
3171       }
3172
3173     case DEMANGLE_COMPONENT_ARGLIST:
3174     case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
3175       d_print_comp (dpi, d_left (dc));
3176       if (d_right (dc) != NULL)
3177         {
3178           d_append_string_constant (dpi, ", ");
3179           d_print_comp (dpi, d_right (dc));
3180         }
3181       return;
3182
3183     case DEMANGLE_COMPONENT_OPERATOR:
3184       {
3185         char c;
3186
3187         d_append_string_constant (dpi, "operator");
3188         c = dc->u.s_operator.op->name[0];
3189         if (IS_LOWER (c))
3190           d_append_char (dpi, ' ');
3191         d_append_buffer (dpi, dc->u.s_operator.op->name,
3192                          dc->u.s_operator.op->len);
3193         return;
3194       }
3195
3196     case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
3197       d_append_string_constant (dpi, "operator ");
3198       d_print_comp (dpi, dc->u.s_extended_operator.name);
3199       return;
3200
3201     case DEMANGLE_COMPONENT_CAST:
3202       d_append_string_constant (dpi, "operator ");
3203       d_print_cast (dpi, dc);
3204       return;
3205
3206     case DEMANGLE_COMPONENT_UNARY:
3207       if (d_left (dc)->type != DEMANGLE_COMPONENT_CAST)
3208         d_print_expr_op (dpi, d_left (dc));
3209       else
3210         {
3211           d_append_char (dpi, '(');
3212           d_print_cast (dpi, d_left (dc));
3213           d_append_char (dpi, ')');
3214         }
3215       d_append_char (dpi, '(');
3216       d_print_comp (dpi, d_right (dc));
3217       d_append_char (dpi, ')');
3218       return;
3219
3220     case DEMANGLE_COMPONENT_BINARY:
3221       if (d_right (dc)->type != DEMANGLE_COMPONENT_BINARY_ARGS)
3222         {
3223           d_print_error (dpi);
3224           return;
3225         }
3226
3227       /* We wrap an expression which uses the greater-than operator in
3228          an extra layer of parens so that it does not get confused
3229          with the '>' which ends the template parameters.  */
3230       if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
3231           && d_left (dc)->u.s_operator.op->len == 1
3232           && d_left (dc)->u.s_operator.op->name[0] == '>')
3233         d_append_char (dpi, '(');
3234
3235       d_append_char (dpi, '(');
3236       d_print_comp (dpi, d_left (d_right (dc)));
3237       d_append_string_constant (dpi, ") ");
3238       d_print_expr_op (dpi, d_left (dc));
3239       d_append_string_constant (dpi, " (");
3240       d_print_comp (dpi, d_right (d_right (dc)));
3241       d_append_char (dpi, ')');
3242
3243       if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
3244           && d_left (dc)->u.s_operator.op->len == 1
3245           && d_left (dc)->u.s_operator.op->name[0] == '>')
3246         d_append_char (dpi, ')');
3247
3248       return;
3249
3250     case DEMANGLE_COMPONENT_BINARY_ARGS:
3251       /* We should only see this as part of DEMANGLE_COMPONENT_BINARY.  */
3252       d_print_error (dpi);
3253       return;
3254
3255     case DEMANGLE_COMPONENT_TRINARY:
3256       if (d_right (dc)->type != DEMANGLE_COMPONENT_TRINARY_ARG1
3257           || d_right (d_right (dc))->type != DEMANGLE_COMPONENT_TRINARY_ARG2)
3258         {
3259           d_print_error (dpi);
3260           return;
3261         }
3262       d_append_char (dpi, '(');
3263       d_print_comp (dpi, d_left (d_right (dc)));
3264       d_append_string_constant (dpi, ") ");
3265       d_print_expr_op (dpi, d_left (dc));
3266       d_append_string_constant (dpi, " (");
3267       d_print_comp (dpi, d_left (d_right (d_right (dc))));
3268       d_append_string_constant (dpi, ") : (");
3269       d_print_comp (dpi, d_right (d_right (d_right (dc))));
3270       d_append_char (dpi, ')');
3271       return;
3272
3273     case DEMANGLE_COMPONENT_TRINARY_ARG1:
3274     case DEMANGLE_COMPONENT_TRINARY_ARG2:
3275       /* We should only see these are part of DEMANGLE_COMPONENT_TRINARY.  */
3276       d_print_error (dpi);
3277       return;
3278
3279     case DEMANGLE_COMPONENT_LITERAL:
3280     case DEMANGLE_COMPONENT_LITERAL_NEG:
3281       {
3282         enum d_builtin_type_print tp;
3283
3284         /* For some builtin types, produce simpler output.  */
3285         tp = D_PRINT_DEFAULT;
3286         if (d_left (dc)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE)
3287           {
3288             tp = d_left (dc)->u.s_builtin.type->print;
3289             switch (tp)
3290               {
3291               case D_PRINT_INT:
3292               case D_PRINT_UNSIGNED:
3293               case D_PRINT_LONG:
3294               case D_PRINT_UNSIGNED_LONG:
3295               case D_PRINT_LONG_LONG:
3296               case D_PRINT_UNSIGNED_LONG_LONG:
3297                 if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME)
3298                   {
3299                     if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
3300                       d_append_char (dpi, '-');
3301                     d_print_comp (dpi, d_right (dc));
3302                     switch (tp)
3303                       {
3304                       default:
3305                         break;
3306                       case D_PRINT_UNSIGNED:
3307                         d_append_char (dpi, 'u');
3308                         break;
3309                       case D_PRINT_LONG:
3310                         d_append_char (dpi, 'l');
3311                         break;
3312                       case D_PRINT_UNSIGNED_LONG:
3313                         d_append_string_constant (dpi, "ul");
3314                         break;
3315                       case D_PRINT_LONG_LONG:
3316                         d_append_string_constant (dpi, "ll");
3317                         break;
3318                       case D_PRINT_UNSIGNED_LONG_LONG:
3319                         d_append_string_constant (dpi, "ull");
3320                         break;
3321                       }
3322                     return;
3323                   }
3324                 break;
3325
3326               case D_PRINT_BOOL:
3327                 if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME
3328                     && d_right (dc)->u.s_name.len == 1
3329                     && dc->type == DEMANGLE_COMPONENT_LITERAL)
3330                   {
3331                     switch (d_right (dc)->u.s_name.s[0])
3332                       {
3333                       case '0':
3334                         d_append_string_constant (dpi, "false");
3335                         return;
3336                       case '1':
3337                         d_append_string_constant (dpi, "true");
3338                         return;
3339                       default:
3340                         break;
3341                       }
3342                   }
3343                 break;
3344
3345               default:
3346                 break;
3347               }
3348           }
3349
3350         d_append_char (dpi, '(');
3351         d_print_comp (dpi, d_left (dc));
3352         d_append_char (dpi, ')');
3353         if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
3354           d_append_char (dpi, '-');
3355         if (tp == D_PRINT_FLOAT)
3356           d_append_char (dpi, '[');
3357         d_print_comp (dpi, d_right (dc));
3358         if (tp == D_PRINT_FLOAT)
3359           d_append_char (dpi, ']');
3360       }
3361       return;
3362
3363     default:
3364       d_print_error (dpi);
3365       return;
3366     }
3367 }
3368
3369 /* Print a Java dentifier.  For Java we try to handle encoded extended
3370    Unicode characters.  The C++ ABI doesn't mention Unicode encoding,
3371    so we don't it for C++.  Characters are encoded as
3372    __U<hex-char>+_.  */
3373
3374 static void
3375 d_print_java_identifier (struct d_print_info *dpi, const char *name, int len)
3376 {
3377   const char *p;
3378   const char *end;
3379
3380   end = name + len;
3381   for (p = name; p < end; ++p)
3382     {
3383       if (end - p > 3
3384           && p[0] == '_'
3385           && p[1] == '_'
3386           && p[2] == 'U')
3387         {
3388           unsigned long c;
3389           const char *q;
3390
3391           c = 0;
3392           for (q = p + 3; q < end; ++q)
3393             {
3394               int dig;
3395
3396               if (IS_DIGIT (*q))
3397                 dig = *q - '0';
3398               else if (*q >= 'A' && *q <= 'F')
3399                 dig = *q - 'A' + 10;
3400               else if (*q >= 'a' && *q <= 'f')
3401                 dig = *q - 'a' + 10;
3402               else
3403                 break;
3404
3405               c = c * 16 + dig;
3406             }
3407           /* If the Unicode character is larger than 256, we don't try
3408              to deal with it here.  FIXME.  */
3409           if (q < end && *q == '_' && c < 256)
3410             {
3411               d_append_char (dpi, c);
3412               p = q;
3413               continue;
3414             }
3415         }
3416
3417       d_append_char (dpi, *p);
3418     }
3419 }
3420
3421 /* Print a list of modifiers.  SUFFIX is 1 if we are printing
3422    qualifiers on this after printing a function.  */
3423
3424 static void
3425 d_print_mod_list (struct d_print_info *dpi,
3426                   struct d_print_mod *mods, int suffix)
3427 {
3428   struct d_print_template *hold_dpt;
3429
3430   if (mods == NULL || d_print_saw_error (dpi))
3431     return;
3432
3433   if (mods->printed
3434       || (! suffix
3435           && (mods->mod->type == DEMANGLE_COMPONENT_RESTRICT_THIS
3436               || mods->mod->type == DEMANGLE_COMPONENT_VOLATILE_THIS
3437               || mods->mod->type == DEMANGLE_COMPONENT_CONST_THIS)))
3438     {
3439       d_print_mod_list (dpi, mods->next, suffix);
3440       return;
3441     }
3442
3443   mods->printed = 1;
3444
3445   hold_dpt = dpi->templates;
3446   dpi->templates = mods->templates;
3447
3448   if (mods->mod->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
3449     {
3450       d_print_function_type (dpi, mods->mod, mods->next);
3451       dpi->templates = hold_dpt;
3452       return;
3453     }
3454   else if (mods->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
3455     {
3456       d_print_array_type (dpi, mods->mod, mods->next);
3457       dpi->templates = hold_dpt;
3458       return;
3459     }
3460   else if (mods->mod->type == DEMANGLE_COMPONENT_LOCAL_NAME)
3461     {
3462       struct d_print_mod *hold_modifiers;
3463       struct demangle_component *dc;
3464
3465       /* When this is on the modifier stack, we have pulled any
3466          qualifiers off the right argument already.  Otherwise, we
3467          print it as usual, but don't let the left argument see any
3468          modifiers.  */
3469
3470       hold_modifiers = dpi->modifiers;
3471       dpi->modifiers = NULL;
3472       d_print_comp (dpi, d_left (mods->mod));
3473       dpi->modifiers = hold_modifiers;
3474
3475       if ((dpi->options & DMGL_JAVA) == 0)
3476         d_append_string_constant (dpi, "::");
3477       else
3478         d_append_char (dpi, '.');
3479
3480       dc = d_right (mods->mod);
3481       while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
3482              || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
3483              || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
3484         dc = d_left (dc);
3485
3486       d_print_comp (dpi, dc);
3487
3488       dpi->templates = hold_dpt;
3489       return;
3490     }
3491
3492   d_print_mod (dpi, mods->mod);
3493
3494   dpi->templates = hold_dpt;
3495
3496   d_print_mod_list (dpi, mods->next, suffix);
3497 }
3498
3499 /* Print a modifier.  */
3500
3501 static void
3502 d_print_mod (struct d_print_info *dpi,
3503              const struct demangle_component *mod)
3504 {
3505   switch (mod->type)
3506     {
3507     case DEMANGLE_COMPONENT_RESTRICT:
3508     case DEMANGLE_COMPONENT_RESTRICT_THIS:
3509       d_append_string_constant (dpi, " restrict");
3510       return;
3511     case DEMANGLE_COMPONENT_VOLATILE:
3512     case DEMANGLE_COMPONENT_VOLATILE_THIS:
3513       d_append_string_constant (dpi, " volatile");
3514       return;
3515     case DEMANGLE_COMPONENT_CONST:
3516     case DEMANGLE_COMPONENT_CONST_THIS:
3517       d_append_string_constant (dpi, " const");
3518       return;
3519     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
3520       d_append_char (dpi, ' ');
3521       d_print_comp (dpi, d_right (mod));
3522       return;
3523     case DEMANGLE_COMPONENT_POINTER:
3524       /* There is no pointer symbol in Java.  */
3525       if ((dpi->options & DMGL_JAVA) == 0)
3526         d_append_char (dpi, '*');
3527       return;
3528     case DEMANGLE_COMPONENT_REFERENCE:
3529       d_append_char (dpi, '&');
3530       return;
3531     case DEMANGLE_COMPONENT_COMPLEX:
3532       d_append_string_constant (dpi, "complex ");
3533       return;
3534     case DEMANGLE_COMPONENT_IMAGINARY:
3535       d_append_string_constant (dpi, "imaginary ");
3536       return;
3537     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
3538       if (d_last_char (dpi) != '(')
3539         d_append_char (dpi, ' ');
3540       d_print_comp (dpi, d_left (mod));
3541       d_append_string_constant (dpi, "::*");
3542       return;
3543     case DEMANGLE_COMPONENT_TYPED_NAME:
3544       d_print_comp (dpi, d_left (mod));
3545       return;
3546     default:
3547       /* Otherwise, we have something that won't go back on the
3548          modifier stack, so we can just print it.  */
3549       d_print_comp (dpi, mod);
3550       return;
3551     }
3552 }
3553
3554 /* Print a function type, except for the return type.  */
3555
3556 static void
3557 d_print_function_type (struct d_print_info *dpi,
3558                        const struct demangle_component *dc,
3559                        struct d_print_mod *mods)
3560 {
3561   int need_paren;
3562   int saw_mod;
3563   int need_space;
3564   struct d_print_mod *p;
3565   struct d_print_mod *hold_modifiers;
3566
3567   need_paren = 0;
3568   saw_mod = 0;
3569   need_space = 0;
3570   for (p = mods; p != NULL; p = p->next)
3571     {
3572       if (p->printed)
3573         break;
3574
3575       saw_mod = 1;
3576       switch (p->mod->type)
3577         {
3578         case DEMANGLE_COMPONENT_POINTER:
3579         case DEMANGLE_COMPONENT_REFERENCE:
3580           need_paren = 1;
3581           break;
3582         case DEMANGLE_COMPONENT_RESTRICT:
3583         case DEMANGLE_COMPONENT_VOLATILE:
3584         case DEMANGLE_COMPONENT_CONST:
3585         case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
3586         case DEMANGLE_COMPONENT_COMPLEX:
3587         case DEMANGLE_COMPONENT_IMAGINARY:
3588         case DEMANGLE_COMPONENT_PTRMEM_TYPE:
3589           need_space = 1;
3590           need_paren = 1;
3591           break;
3592         case DEMANGLE_COMPONENT_RESTRICT_THIS:
3593         case DEMANGLE_COMPONENT_VOLATILE_THIS:
3594         case DEMANGLE_COMPONENT_CONST_THIS:
3595           break;
3596         default:
3597           break;
3598         }
3599       if (need_paren)
3600         break;
3601     }
3602
3603   if (d_left (dc) != NULL && ! saw_mod)
3604     need_paren = 1;
3605
3606   if (need_paren)
3607     {
3608       if (! need_space)
3609         {
3610           if (d_last_char (dpi) != '('
3611               && d_last_char (dpi) != '*')
3612             need_space = 1;
3613         }
3614       if (need_space && d_last_char (dpi) != ' ')
3615         d_append_char (dpi, ' ');
3616       d_append_char (dpi, '(');
3617     }
3618
3619   hold_modifiers = dpi->modifiers;
3620   dpi->modifiers = NULL;
3621
3622   d_print_mod_list (dpi, mods, 0);
3623
3624   if (need_paren)
3625     d_append_char (dpi, ')');
3626
3627   d_append_char (dpi, '(');
3628
3629   if (d_right (dc) != NULL)
3630     d_print_comp (dpi, d_right (dc));
3631
3632   d_append_char (dpi, ')');
3633
3634   d_print_mod_list (dpi, mods, 1);
3635
3636   dpi->modifiers = hold_modifiers;
3637 }
3638
3639 /* Print an array type, except for the element type.  */
3640
3641 static void
3642 d_print_array_type (struct d_print_info *dpi,
3643                     const struct demangle_component *dc,
3644                     struct d_print_mod *mods)
3645 {
3646   int need_space;
3647
3648   need_space = 1;
3649   if (mods != NULL)
3650     {
3651       int need_paren;
3652       struct d_print_mod *p;
3653
3654       need_paren = 0;
3655       for (p = mods; p != NULL; p = p->next)
3656         {
3657           if (! p->printed)
3658             {
3659               if (p->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
3660                 {
3661                   need_space = 0;
3662                   break;
3663                 }
3664               else
3665                 {
3666                   need_paren = 1;
3667                   need_space = 1;
3668                   break;
3669                 }
3670             }
3671         }
3672
3673       if (need_paren)
3674         d_append_string_constant (dpi, " (");
3675
3676       d_print_mod_list (dpi, mods, 0);
3677
3678       if (need_paren)
3679         d_append_char (dpi, ')');
3680     }
3681
3682   if (need_space)
3683     d_append_char (dpi, ' ');
3684
3685   d_append_char (dpi, '[');
3686
3687   if (d_left (dc) != NULL)
3688     d_print_comp (dpi, d_left (dc));
3689
3690   d_append_char (dpi, ']');
3691 }
3692
3693 /* Print an operator in an expression.  */
3694
3695 static void
3696 d_print_expr_op (struct d_print_info *dpi,
3697                  const struct demangle_component *dc)
3698 {
3699   if (dc->type == DEMANGLE_COMPONENT_OPERATOR)
3700     d_append_buffer (dpi, dc->u.s_operator.op->name,
3701                      dc->u.s_operator.op->len);
3702   else
3703     d_print_comp (dpi, dc);
3704 }
3705
3706 /* Print a cast.  */
3707
3708 static void
3709 d_print_cast (struct d_print_info *dpi,
3710               const struct demangle_component *dc)
3711 {
3712   if (d_left (dc)->type != DEMANGLE_COMPONENT_TEMPLATE)
3713     d_print_comp (dpi, d_left (dc));
3714   else
3715     {
3716       struct d_print_mod *hold_dpm;
3717       struct d_print_template dpt;
3718
3719       /* It appears that for a templated cast operator, we need to put
3720          the template parameters in scope for the operator name, but
3721          not for the parameters.  The effect is that we need to handle
3722          the template printing here.  */
3723
3724       hold_dpm = dpi->modifiers;
3725       dpi->modifiers = NULL;
3726
3727       dpt.next = dpi->templates;
3728       dpi->templates = &dpt;
3729       dpt.template_decl = d_left (dc);
3730
3731       d_print_comp (dpi, d_left (d_left (dc)));
3732
3733       dpi->templates = dpt.next;
3734
3735       if (d_last_char (dpi) == '<')
3736         d_append_char (dpi, ' ');
3737       d_append_char (dpi, '<');
3738       d_print_comp (dpi, d_right (d_left (dc)));
3739       /* Avoid generating two consecutive '>' characters, to avoid
3740          the C++ syntactic ambiguity.  */
3741       if (d_last_char (dpi) == '>')
3742         d_append_char (dpi, ' ');
3743       d_append_char (dpi, '>');
3744
3745       dpi->modifiers = hold_dpm;
3746     }
3747 }
3748
3749 /* Initialize the information structure we use to pass around
3750    information.  */
3751
3752 CP_STATIC_IF_GLIBCPP_V3
3753 void
3754 cplus_demangle_init_info (const char *mangled, int options, size_t len,
3755                           struct d_info *di)
3756 {
3757   di->s = mangled;
3758   di->send = mangled + len;
3759   di->options = options;
3760
3761   di->n = mangled;
3762
3763   /* We can not need more components than twice the number of chars in
3764      the mangled string.  Most components correspond directly to
3765      chars, but the ARGLIST types are exceptions.  */
3766   di->num_comps = 2 * len;
3767   di->next_comp = 0;
3768
3769   /* Similarly, we can not need more substitutions than there are
3770      chars in the mangled string.  */
3771   di->num_subs = len;
3772   di->next_sub = 0;
3773   di->did_subs = 0;
3774
3775   di->last_name = NULL;
3776
3777   di->expansion = 0;
3778 }
3779
3780 /* Entry point for the demangler.  If MANGLED is a g++ v3 ABI mangled
3781    name, return a buffer allocated with malloc holding the demangled
3782    name.  OPTIONS is the usual libiberty demangler options.  On
3783    success, this sets *PALC to the allocated size of the returned
3784    buffer.  On failure, this sets *PALC to 0 for a bad name, or 1 for
3785    a memory allocation failure.  On failure, this returns NULL.  */
3786
3787 static char *
3788 d_demangle (const char* mangled, int options, size_t *palc)
3789 {
3790   size_t len;
3791   int type;
3792   struct d_info di;
3793   struct demangle_component *dc;
3794   int estimate;
3795   char *ret;
3796
3797   *palc = 0;
3798
3799   len = strlen (mangled);
3800
3801   if (mangled[0] == '_' && mangled[1] == 'Z')
3802     type = 0;
3803   else if (strncmp (mangled, "_GLOBAL_", 8) == 0
3804            && (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$')
3805            && (mangled[9] == 'D' || mangled[9] == 'I')
3806            && mangled[10] == '_')
3807     {
3808       char *r;
3809
3810       r = (char *) malloc (40 + len - 11);
3811       if (r == NULL)
3812         *palc = 1;
3813       else
3814         {
3815           if (mangled[9] == 'I')
3816             strcpy (r, "global constructors keyed to ");
3817           else
3818             strcpy (r, "global destructors keyed to ");
3819           strcat (r, mangled + 11);
3820         }
3821       return r;
3822     }
3823   else
3824     {
3825       if ((options & DMGL_TYPES) == 0)
3826         return NULL;
3827       type = 1;
3828     }
3829
3830   cplus_demangle_init_info (mangled, options, len, &di);
3831
3832   {
3833 #ifdef CP_DYNAMIC_ARRAYS
3834     __extension__ struct demangle_component comps[di.num_comps];
3835     __extension__ struct demangle_component *subs[di.num_subs];
3836
3837     di.comps = &comps[0];
3838     di.subs = &subs[0];
3839 #else
3840     di.comps = ((struct demangle_component *)
3841                 malloc (di.num_comps * sizeof (struct demangle_component)));
3842     di.subs = ((struct demangle_component **)
3843                malloc (di.num_subs * sizeof (struct demangle_component *)));
3844     if (di.comps == NULL || di.subs == NULL)
3845       {
3846         if (di.comps != NULL)
3847           free (di.comps);
3848         if (di.subs != NULL)
3849           free (di.subs);
3850         *palc = 1;
3851         return NULL;
3852       }
3853 #endif
3854
3855     if (! type)
3856       dc = cplus_demangle_mangled_name (&di, 1);
3857     else
3858       dc = cplus_demangle_type (&di);
3859
3860     /* If DMGL_PARAMS is set, then if we didn't consume the entire
3861        mangled string, then we didn't successfully demangle it.  If
3862        DMGL_PARAMS is not set, we didn't look at the trailing
3863        parameters.  */
3864     if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0')
3865       dc = NULL;
3866
3867 #ifdef CP_DEMANGLE_DEBUG
3868     if (dc == NULL)
3869       printf ("failed demangling\n");
3870     else
3871       d_dump (dc, 0);
3872 #endif
3873
3874     /* We try to guess the length of the demangled string, to minimize
3875        calls to realloc during demangling.  */
3876     estimate = len + di.expansion + 10 * di.did_subs;
3877     estimate += estimate / 8;
3878
3879     ret = NULL;
3880     if (dc != NULL)
3881       ret = cplus_demangle_print (options, dc, estimate, palc);
3882
3883 #ifndef CP_DYNAMIC_ARRAYS
3884     free (di.comps);
3885     free (di.subs);
3886 #endif
3887
3888 #ifdef CP_DEMANGLE_DEBUG
3889     if (ret != NULL)
3890       {
3891         int rlen;
3892
3893         rlen = strlen (ret);
3894         if (rlen > 2 * estimate)
3895           printf ("*** Length %d much greater than estimate %d\n",
3896                   rlen, estimate);
3897         else if (rlen > estimate)
3898           printf ("*** Length %d greater than estimate %d\n",
3899                   rlen, estimate);
3900         else if (rlen < estimate / 2)
3901           printf ("*** Length %d much less than estimate %d\n",
3902                   rlen, estimate);
3903       }
3904 #endif
3905   }
3906
3907   return ret;
3908 }
3909
3910 #if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3)
3911
3912 extern char *__cxa_demangle (const char *, char *, size_t *, int *);
3913
3914 /* ia64 ABI-mandated entry point in the C++ runtime library for
3915    performing demangling.  MANGLED_NAME is a NUL-terminated character
3916    string containing the name to be demangled.
3917
3918    OUTPUT_BUFFER is a region of memory, allocated with malloc, of
3919    *LENGTH bytes, into which the demangled name is stored.  If
3920    OUTPUT_BUFFER is not long enough, it is expanded using realloc.
3921    OUTPUT_BUFFER may instead be NULL; in that case, the demangled name
3922    is placed in a region of memory allocated with malloc.
3923
3924    If LENGTH is non-NULL, the length of the buffer conaining the
3925    demangled name, is placed in *LENGTH.
3926
3927    The return value is a pointer to the start of the NUL-terminated
3928    demangled name, or NULL if the demangling fails.  The caller is
3929    responsible for deallocating this memory using free.
3930
3931    *STATUS is set to one of the following values:
3932       0: The demangling operation succeeded.
3933      -1: A memory allocation failure occurred.
3934      -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
3935      -3: One of the arguments is invalid.
3936
3937    The demangling is performed using the C++ ABI mangling rules, with
3938    GNU extensions.  */
3939
3940 char *
3941 __cxa_demangle (const char *mangled_name, char *output_buffer,
3942                 size_t *length, int *status)
3943 {
3944   char *demangled;
3945   size_t alc;
3946
3947   if (mangled_name == NULL)
3948     {
3949       if (status != NULL)
3950         *status = -3;
3951       return NULL;
3952     }
3953
3954   if (output_buffer != NULL && length == NULL)
3955     {
3956       if (status != NULL)
3957         *status = -3;
3958       return NULL;
3959     }
3960
3961   demangled = d_demangle (mangled_name, DMGL_PARAMS | DMGL_TYPES, &alc);
3962
3963   if (demangled == NULL)
3964     {
3965       if (status != NULL)
3966         {
3967           if (alc == 1)
3968             *status = -1;
3969           else
3970             *status = -2;
3971         }
3972       return NULL;
3973     }
3974
3975   if (output_buffer == NULL)
3976     {
3977       if (length != NULL)
3978         *length = alc;
3979     }
3980   else
3981     {
3982       if (strlen (demangled) < *length)
3983         {
3984           strcpy (output_buffer, demangled);
3985           free (demangled);
3986           demangled = output_buffer;
3987         }
3988       else
3989         {
3990           free (output_buffer);
3991           *length = alc;
3992         }
3993     }
3994
3995   if (status != NULL)
3996     *status = 0;
3997
3998   return demangled;
3999 }
4000
4001 #else /* ! (IN_LIBGCC2 || IN_GLIBCPP_V3) */
4002
4003 /* Entry point for libiberty demangler.  If MANGLED is a g++ v3 ABI
4004    mangled name, return a buffer allocated with malloc holding the
4005    demangled name.  Otherwise, return NULL.  */
4006
4007 char *
4008 cplus_demangle_v3 (const char* mangled, int options)
4009 {
4010   size_t alc;
4011
4012   return d_demangle (mangled, options, &alc);
4013 }
4014
4015 /* Demangle a Java symbol.  Java uses a subset of the V3 ABI C++ mangling 
4016    conventions, but the output formatting is a little different.
4017    This instructs the C++ demangler not to emit pointer characters ("*"), and 
4018    to use Java's namespace separator symbol ("." instead of "::").  It then 
4019    does an additional pass over the demangled output to replace instances 
4020    of JArray<TYPE> with TYPE[].  */
4021
4022 char *
4023 java_demangle_v3 (const char* mangled)
4024 {
4025   size_t alc;
4026   char *demangled;
4027   int nesting;
4028   char *from;
4029   char *to;
4030
4031   demangled = d_demangle (mangled, DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX, 
4032                           &alc);
4033
4034   if (demangled == NULL)
4035     return NULL;
4036
4037   nesting = 0;
4038   from = demangled;
4039   to = from;
4040   while (*from != '\0')
4041     {
4042       if (strncmp (from, "JArray<", 7) == 0)
4043         {
4044           from += 7;
4045           ++nesting;
4046         }
4047       else if (nesting > 0 && *from == '>')
4048         {
4049           while (to > demangled && to[-1] == ' ')
4050             --to;
4051           *to++ = '[';
4052           *to++ = ']';
4053           --nesting;
4054           ++from;
4055         }
4056       else
4057         *to++ = *from++;
4058     }
4059
4060   *to = '\0';
4061
4062   return demangled;
4063 }
4064
4065 #endif /* IN_LIBGCC2 || IN_GLIBCPP_V3 */
4066
4067 #ifndef IN_GLIBCPP_V3
4068
4069 /* Demangle a string in order to find out whether it is a constructor
4070    or destructor.  Return non-zero on success.  Set *CTOR_KIND and
4071    *DTOR_KIND appropriately.  */
4072
4073 static int
4074 is_ctor_or_dtor (const char *mangled,
4075                  enum gnu_v3_ctor_kinds *ctor_kind,
4076                  enum gnu_v3_dtor_kinds *dtor_kind)
4077 {
4078   struct d_info di;
4079   struct demangle_component *dc;
4080   int ret;
4081
4082   *ctor_kind = (enum gnu_v3_ctor_kinds) 0;
4083   *dtor_kind = (enum gnu_v3_dtor_kinds) 0;
4084
4085   cplus_demangle_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di);
4086
4087   {
4088 #ifdef CP_DYNAMIC_ARRAYS
4089     __extension__ struct demangle_component comps[di.num_comps];
4090     __extension__ struct demangle_component *subs[di.num_subs];
4091
4092     di.comps = &comps[0];
4093     di.subs = &subs[0];
4094 #else
4095     di.comps = ((struct demangle_component *)
4096                 malloc (di.num_comps * sizeof (struct demangle_component)));
4097     di.subs = ((struct demangle_component **)
4098                malloc (di.num_subs * sizeof (struct demangle_component *)));
4099     if (di.comps == NULL || di.subs == NULL)
4100       {
4101         if (di.comps != NULL)
4102           free (di.comps);
4103         if (di.subs != NULL)
4104           free (di.subs);
4105         return 0;
4106       }
4107 #endif
4108
4109     dc = cplus_demangle_mangled_name (&di, 1);
4110
4111     /* Note that because we did not pass DMGL_PARAMS, we don't expect
4112        to demangle the entire string.  */
4113
4114     ret = 0;
4115     while (dc != NULL)
4116       {
4117         switch (dc->type)
4118           {
4119           default:
4120             dc = NULL;
4121             break;
4122           case DEMANGLE_COMPONENT_TYPED_NAME:
4123           case DEMANGLE_COMPONENT_TEMPLATE:
4124           case DEMANGLE_COMPONENT_RESTRICT_THIS:
4125           case DEMANGLE_COMPONENT_VOLATILE_THIS:
4126           case DEMANGLE_COMPONENT_CONST_THIS:
4127             dc = d_left (dc);
4128             break;
4129           case DEMANGLE_COMPONENT_QUAL_NAME:
4130           case DEMANGLE_COMPONENT_LOCAL_NAME:
4131             dc = d_right (dc);
4132             break;
4133           case DEMANGLE_COMPONENT_CTOR:
4134             *ctor_kind = dc->u.s_ctor.kind;
4135             ret = 1;
4136             dc = NULL;
4137             break;
4138           case DEMANGLE_COMPONENT_DTOR:
4139             *dtor_kind = dc->u.s_dtor.kind;
4140             ret = 1;
4141             dc = NULL;
4142             break;
4143           }
4144       }
4145
4146 #ifndef CP_DYNAMIC_ARRAYS
4147     free (di.subs);
4148     free (di.comps);
4149 #endif
4150   }
4151
4152   return ret;
4153 }
4154
4155 /* Return whether NAME is the mangled form of a g++ V3 ABI constructor
4156    name.  A non-zero return indicates the type of constructor.  */
4157
4158 enum gnu_v3_ctor_kinds
4159 is_gnu_v3_mangled_ctor (const char *name)
4160 {
4161   enum gnu_v3_ctor_kinds ctor_kind;
4162   enum gnu_v3_dtor_kinds dtor_kind;
4163
4164   if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
4165     return (enum gnu_v3_ctor_kinds) 0;
4166   return ctor_kind;
4167 }
4168
4169
4170 /* Return whether NAME is the mangled form of a g++ V3 ABI destructor
4171    name.  A non-zero return indicates the type of destructor.  */
4172
4173 enum gnu_v3_dtor_kinds
4174 is_gnu_v3_mangled_dtor (const char *name)
4175 {
4176   enum gnu_v3_ctor_kinds ctor_kind;
4177   enum gnu_v3_dtor_kinds dtor_kind;
4178
4179   if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
4180     return (enum gnu_v3_dtor_kinds) 0;
4181   return dtor_kind;
4182 }
4183
4184 #endif /* IN_GLIBCPP_V3 */
4185
4186 #ifdef STANDALONE_DEMANGLER
4187
4188 #include "getopt.h"
4189 #include "dyn-string.h"
4190
4191 static void print_usage (FILE* fp, int exit_value);
4192
4193 #define IS_ALPHA(CHAR)                                                  \
4194   (((CHAR) >= 'a' && (CHAR) <= 'z')                                     \
4195    || ((CHAR) >= 'A' && (CHAR) <= 'Z'))
4196
4197 /* Non-zero if CHAR is a character than can occur in a mangled name.  */
4198 #define is_mangled_char(CHAR)                                           \
4199   (IS_ALPHA (CHAR) || IS_DIGIT (CHAR)                                   \
4200    || (CHAR) == '_' || (CHAR) == '.' || (CHAR) == '$')
4201
4202 /* The name of this program, as invoked.  */
4203 const char* program_name;
4204
4205 /* Prints usage summary to FP and then exits with EXIT_VALUE.  */
4206
4207 static void
4208 print_usage (FILE* fp, int exit_value)
4209 {
4210   fprintf (fp, "Usage: %s [options] [names ...]\n", program_name);
4211   fprintf (fp, "Options:\n");
4212   fprintf (fp, "  -h,--help       Display this message.\n");
4213   fprintf (fp, "  -p,--no-params  Don't display function parameters\n");
4214   fprintf (fp, "  -v,--verbose    Produce verbose demanglings.\n");
4215   fprintf (fp, "If names are provided, they are demangled.  Otherwise filters standard input.\n");
4216
4217   exit (exit_value);
4218 }
4219
4220 /* Option specification for getopt_long.  */
4221 static const struct option long_options[] = 
4222 {
4223   { "help",      no_argument, NULL, 'h' },
4224   { "no-params", no_argument, NULL, 'p' },
4225   { "verbose",   no_argument, NULL, 'v' },
4226   { NULL,        no_argument, NULL, 0   },
4227 };
4228
4229 /* Main entry for a demangling filter executable.  It will demangle
4230    its command line arguments, if any.  If none are provided, it will
4231    filter stdin to stdout, replacing any recognized mangled C++ names
4232    with their demangled equivalents.  */
4233
4234 int
4235 main (int argc, char *argv[])
4236 {
4237   int i;
4238   int opt_char;
4239   int options = DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES;
4240
4241   /* Use the program name of this program, as invoked.  */
4242   program_name = argv[0];
4243
4244   /* Parse options.  */
4245   do 
4246     {
4247       opt_char = getopt_long (argc, argv, "hpv", long_options, NULL);
4248       switch (opt_char)
4249         {
4250         case '?':  /* Unrecognized option.  */
4251           print_usage (stderr, 1);
4252           break;
4253
4254         case 'h':
4255           print_usage (stdout, 0);
4256           break;
4257
4258         case 'p':
4259           options &= ~ DMGL_PARAMS;
4260           break;
4261
4262         case 'v':
4263           options |= DMGL_VERBOSE;
4264           break;
4265         }
4266     }
4267   while (opt_char != -1);
4268
4269   if (optind == argc) 
4270     /* No command line arguments were provided.  Filter stdin.  */
4271     {
4272       dyn_string_t mangled = dyn_string_new (3);
4273       char *s;
4274
4275       /* Read all of input.  */
4276       while (!feof (stdin))
4277         {
4278           char c;
4279
4280           /* Pile characters into mangled until we hit one that can't
4281              occur in a mangled name.  */
4282           c = getchar ();
4283           while (!feof (stdin) && is_mangled_char (c))
4284             {
4285               dyn_string_append_char (mangled, c);
4286               if (feof (stdin))
4287                 break;
4288               c = getchar ();
4289             }
4290
4291           if (dyn_string_length (mangled) > 0)
4292             {
4293 #ifdef IN_GLIBCPP_V3
4294               s = __cxa_demangle (dyn_string_buf (mangled), NULL, NULL, NULL);
4295 #else
4296               s = cplus_demangle_v3 (dyn_string_buf (mangled), options);
4297 #endif
4298
4299               if (s != NULL)
4300                 {
4301                   fputs (s, stdout);
4302                   free (s);
4303                 }
4304               else
4305                 {
4306                   /* It might not have been a mangled name.  Print the
4307                      original text.  */
4308                   fputs (dyn_string_buf (mangled), stdout);
4309                 }
4310
4311               dyn_string_clear (mangled);
4312             }
4313
4314           /* If we haven't hit EOF yet, we've read one character that
4315              can't occur in a mangled name, so print it out.  */
4316           if (!feof (stdin))
4317             putchar (c);
4318         }
4319
4320       dyn_string_delete (mangled);
4321     }
4322   else
4323     /* Demangle command line arguments.  */
4324     {
4325       /* Loop over command line arguments.  */
4326       for (i = optind; i < argc; ++i)
4327         {
4328           char *s;
4329 #ifdef IN_GLIBCPP_V3
4330           int status;
4331 #endif
4332
4333           /* Attempt to demangle.  */
4334 #ifdef IN_GLIBCPP_V3
4335           s = __cxa_demangle (argv[i], NULL, NULL, &status);
4336 #else
4337           s = cplus_demangle_v3 (argv[i], options);
4338 #endif
4339
4340           /* If it worked, print the demangled name.  */
4341           if (s != NULL)
4342             {
4343               printf ("%s\n", s);
4344               free (s);
4345             }
4346           else
4347             {
4348 #ifdef IN_GLIBCPP_V3
4349               fprintf (stderr, "Failed: %s (status %d)\n", argv[i], status);
4350 #else
4351               fprintf (stderr, "Failed: %s\n", argv[i]);
4352 #endif
4353             }
4354         }
4355     }
4356
4357   return 0;
4358 }
4359
4360 #endif /* STANDALONE_DEMANGLER */