merge from gcc
[platform/upstream/binutils.git] / libiberty / cp-demangle.c
1 /* Demangler for g++ V3 ABI.
2    Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
3    Free Software Foundation, Inc.
4    Written by Ian Lance Taylor <ian@wasabisystems.com>.
5
6    This file is part of the libiberty library, which is part of GCC.
7
8    This file is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2 of the License, or
11    (at your option) any later version.
12
13    In addition to the permissions in the GNU General Public License, the
14    Free Software Foundation gives you unlimited permission to link the
15    compiled version of this file into combinations with other programs,
16    and to distribute those combinations without any restriction coming
17    from the use of this file.  (The General Public License restrictions
18    do apply in other respects; for example, they cover modification of
19    the file, and distribution when not linked into a combined
20    executable.)
21
22    This program is distributed in the hope that it will be useful,
23    but WITHOUT ANY WARRANTY; without even the implied warranty of
24    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25    GNU General Public License for more details.
26
27    You should have received a copy of the GNU General Public License
28    along with this program; if not, write to the Free Software
29    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 
30 */
31
32 /* This code implements a demangler for the g++ V3 ABI.  The ABI is
33    described on this web page:
34        http://www.codesourcery.com/cxx-abi/abi.html#mangling
35
36    This code was written while looking at the demangler written by
37    Alex Samuel <samuel@codesourcery.com>.
38
39    This code first pulls the mangled name apart into a list of
40    components, and then walks the list generating the demangled
41    name.
42
43    This file will normally define the following functions, q.v.:
44       char *cplus_demangle_v3(const char *mangled, int options)
45       char *java_demangle_v3(const char *mangled)
46       int cplus_demangle_v3_callback(const char *mangled, int options,
47                                      demangle_callbackref callback)
48       int java_demangle_v3_callback(const char *mangled,
49                                     demangle_callbackref callback)
50       enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name)
51       enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name)
52
53    Also, the interface to the component list is public, and defined in
54    demangle.h.  The interface consists of these types, which are
55    defined in demangle.h:
56       enum demangle_component_type
57       struct demangle_component
58       demangle_callbackref
59    and these functions defined in this file:
60       cplus_demangle_fill_name
61       cplus_demangle_fill_extended_operator
62       cplus_demangle_fill_ctor
63       cplus_demangle_fill_dtor
64       cplus_demangle_print
65       cplus_demangle_print_callback
66    and other functions defined in the file cp-demint.c.
67
68    This file also defines some other functions and variables which are
69    only to be used by the file cp-demint.c.
70
71    Preprocessor macros you can define while compiling this file:
72
73    IN_LIBGCC2
74       If defined, this file defines the following functions, q.v.:
75          char *__cxa_demangle (const char *mangled, char *buf, size_t *len,
76                                int *status)
77          int __gcclibcxx_demangle_callback (const char *,
78                                             void (*)
79                                               (const char *, size_t, void *),
80                                             void *)
81       instead of cplus_demangle_v3[_callback]() and
82       java_demangle_v3[_callback]().
83
84    IN_GLIBCPP_V3
85       If defined, this file defines only __cxa_demangle() and
86       __gcclibcxx_demangle_callback(), and no other publically visible
87       functions or variables.
88
89    STANDALONE_DEMANGLER
90       If defined, this file defines a main() function which demangles
91       any arguments, or, if none, demangles stdin.
92
93    CP_DEMANGLE_DEBUG
94       If defined, turns on debugging mode, which prints information on
95       stdout about the mangled string.  This is not generally useful.
96 */
97
98 #if defined (_AIX) && !defined (__GNUC__)
99  #pragma alloca
100 #endif
101
102 #ifdef HAVE_CONFIG_H
103 #include "config.h"
104 #endif
105
106 #include <stdio.h>
107
108 #ifdef HAVE_STDLIB_H
109 #include <stdlib.h>
110 #endif
111 #ifdef HAVE_STRING_H
112 #include <string.h>
113 #endif
114
115 #ifdef HAVE_ALLOCA_H
116 # include <alloca.h>
117 #else
118 # ifndef alloca
119 #  ifdef __GNUC__
120 #   define alloca __builtin_alloca
121 #  else
122 extern char *alloca ();
123 #  endif /* __GNUC__ */
124 # endif /* alloca */
125 #endif /* HAVE_ALLOCA_H */
126
127 #include "ansidecl.h"
128 #include "libiberty.h"
129 #include "demangle.h"
130 #include "cp-demangle.h"
131
132 /* If IN_GLIBCPP_V3 is defined, some functions are made static.  We
133    also rename them via #define to avoid compiler errors when the
134    static definition conflicts with the extern declaration in a header
135    file.  */
136 #ifdef IN_GLIBCPP_V3
137
138 #define CP_STATIC_IF_GLIBCPP_V3 static
139
140 #define cplus_demangle_fill_name d_fill_name
141 static int d_fill_name (struct demangle_component *, const char *, int);
142
143 #define cplus_demangle_fill_extended_operator d_fill_extended_operator
144 static int
145 d_fill_extended_operator (struct demangle_component *, int,
146                           struct demangle_component *);
147
148 #define cplus_demangle_fill_ctor d_fill_ctor
149 static int
150 d_fill_ctor (struct demangle_component *, enum gnu_v3_ctor_kinds,
151              struct demangle_component *);
152
153 #define cplus_demangle_fill_dtor d_fill_dtor
154 static int
155 d_fill_dtor (struct demangle_component *, enum gnu_v3_dtor_kinds,
156              struct demangle_component *);
157
158 #define cplus_demangle_mangled_name d_mangled_name
159 static struct demangle_component *d_mangled_name (struct d_info *, int);
160
161 #define cplus_demangle_type d_type
162 static struct demangle_component *d_type (struct d_info *);
163
164 #define cplus_demangle_print d_print
165 static char *d_print (int, const struct demangle_component *, int, size_t *);
166
167 #define cplus_demangle_print_callback d_print_callback
168 static int d_print_callback (int, const struct demangle_component *,
169                              demangle_callbackref, void *);
170
171 #define cplus_demangle_init_info d_init_info
172 static void d_init_info (const char *, int, size_t, struct d_info *);
173
174 #else /* ! defined(IN_GLIBCPP_V3) */
175 #define CP_STATIC_IF_GLIBCPP_V3
176 #endif /* ! defined(IN_GLIBCPP_V3) */
177
178 /* See if the compiler supports dynamic arrays.  */
179
180 #ifdef __GNUC__
181 #define CP_DYNAMIC_ARRAYS
182 #else
183 #ifdef __STDC__
184 #ifdef __STDC_VERSION__
185 #if __STDC_VERSION__ >= 199901L
186 #define CP_DYNAMIC_ARRAYS
187 #endif /* __STDC__VERSION >= 199901L */
188 #endif /* defined (__STDC_VERSION__) */
189 #endif /* defined (__STDC__) */
190 #endif /* ! defined (__GNUC__) */
191
192 /* We avoid pulling in the ctype tables, to prevent pulling in
193    additional unresolved symbols when this code is used in a library.
194    FIXME: Is this really a valid reason?  This comes from the original
195    V3 demangler code.
196
197    As of this writing this file has the following undefined references
198    when compiled with -DIN_GLIBCPP_V3: realloc, free, memcpy, strcpy,
199    strcat, strlen.  */
200
201 #define IS_DIGIT(c) ((c) >= '0' && (c) <= '9')
202 #define IS_UPPER(c) ((c) >= 'A' && (c) <= 'Z')
203 #define IS_LOWER(c) ((c) >= 'a' && (c) <= 'z')
204
205 /* The prefix prepended by GCC to an identifier represnting the
206    anonymous namespace.  */
207 #define ANONYMOUS_NAMESPACE_PREFIX "_GLOBAL_"
208 #define ANONYMOUS_NAMESPACE_PREFIX_LEN \
209   (sizeof (ANONYMOUS_NAMESPACE_PREFIX) - 1)
210
211 /* Information we keep for the standard substitutions.  */
212
213 struct d_standard_sub_info
214 {
215   /* The code for this substitution.  */
216   char code;
217   /* The simple string it expands to.  */
218   const char *simple_expansion;
219   /* The length of the simple expansion.  */
220   int simple_len;
221   /* The results of a full, verbose, expansion.  This is used when
222      qualifying a constructor/destructor, or when in verbose mode.  */
223   const char *full_expansion;
224   /* The length of the full expansion.  */
225   int full_len;
226   /* What to set the last_name field of d_info to; NULL if we should
227      not set it.  This is only relevant when qualifying a
228      constructor/destructor.  */
229   const char *set_last_name;
230   /* The length of set_last_name.  */
231   int set_last_name_len;
232 };
233
234 /* Accessors for subtrees of struct demangle_component.  */
235
236 #define d_left(dc) ((dc)->u.s_binary.left)
237 #define d_right(dc) ((dc)->u.s_binary.right)
238
239 /* A list of templates.  This is used while printing.  */
240
241 struct d_print_template
242 {
243   /* Next template on the list.  */
244   struct d_print_template *next;
245   /* This template.  */
246   const struct demangle_component *template_decl;
247 };
248
249 /* A list of type modifiers.  This is used while printing.  */
250
251 struct d_print_mod
252 {
253   /* Next modifier on the list.  These are in the reverse of the order
254      in which they appeared in the mangled string.  */
255   struct d_print_mod *next;
256   /* The modifier.  */
257   const struct demangle_component *mod;
258   /* Whether this modifier was printed.  */
259   int printed;
260   /* The list of templates which applies to this modifier.  */
261   struct d_print_template *templates;
262 };
263
264 /* We use these structures to hold information during printing.  */
265
266 struct d_growable_string
267 {
268   /* Buffer holding the result.  */
269   char *buf;
270   /* Current length of data in buffer.  */
271   size_t len;
272   /* Allocated size of buffer.  */
273   size_t alc;
274   /* Set to 1 if we had a memory allocation failure.  */
275   int allocation_failure;
276 };
277
278 enum { D_PRINT_BUFFER_LENGTH = 256 };
279 struct d_print_info
280 {
281   /* Fixed-length allocated buffer for demangled data, flushed to the
282      callback with a NUL termination once full.  */
283   char buf[D_PRINT_BUFFER_LENGTH];
284   /* Current length of data in buffer.  */
285   size_t len;
286   /* The last character printed, saved individually so that it survives
287      any buffer flush.  */
288   char last_char;
289   /* Callback function to handle demangled buffer flush.  */
290   demangle_callbackref callback;
291   /* Opaque callback argument.  */
292   void *opaque;
293   /* The current list of templates, if any.  */
294   struct d_print_template *templates;
295   /* The current list of modifiers (e.g., pointer, reference, etc.),
296      if any.  */
297   struct d_print_mod *modifiers;
298   /* Set to 1 if we saw a demangling error.  */
299   int demangle_failure;
300   /* The current index into any template argument packs we are using
301      for printing.  */
302   int pack_index;
303   /* Number of d_print_flush calls so far.  */
304   unsigned long int flush_count;
305 };
306
307 #ifdef CP_DEMANGLE_DEBUG
308 static void d_dump (struct demangle_component *, int);
309 #endif
310
311 static struct demangle_component *
312 d_make_empty (struct d_info *);
313
314 static struct demangle_component *
315 d_make_comp (struct d_info *, enum demangle_component_type,
316              struct demangle_component *,
317              struct demangle_component *);
318
319 static struct demangle_component *
320 d_make_name (struct d_info *, const char *, int);
321
322 static struct demangle_component *
323 d_make_demangle_mangled_name (struct d_info *, const char *);
324
325 static struct demangle_component *
326 d_make_builtin_type (struct d_info *,
327                      const struct demangle_builtin_type_info *);
328
329 static struct demangle_component *
330 d_make_operator (struct d_info *,
331                  const struct demangle_operator_info *);
332
333 static struct demangle_component *
334 d_make_extended_operator (struct d_info *, int,
335                           struct demangle_component *);
336
337 static struct demangle_component *
338 d_make_ctor (struct d_info *, enum gnu_v3_ctor_kinds,
339              struct demangle_component *);
340
341 static struct demangle_component *
342 d_make_dtor (struct d_info *, enum gnu_v3_dtor_kinds,
343              struct demangle_component *);
344
345 static struct demangle_component *
346 d_make_template_param (struct d_info *, long);
347
348 static struct demangle_component *
349 d_make_sub (struct d_info *, const char *, int);
350
351 static int
352 has_return_type (struct demangle_component *);
353
354 static int
355 is_ctor_dtor_or_conversion (struct demangle_component *);
356
357 static struct demangle_component *d_encoding (struct d_info *, int);
358
359 static struct demangle_component *d_name (struct d_info *);
360
361 static struct demangle_component *d_nested_name (struct d_info *);
362
363 static struct demangle_component *d_prefix (struct d_info *);
364
365 static struct demangle_component *d_unqualified_name (struct d_info *);
366
367 static struct demangle_component *d_source_name (struct d_info *);
368
369 static long d_number (struct d_info *);
370
371 static struct demangle_component *d_identifier (struct d_info *, int);
372
373 static struct demangle_component *d_operator_name (struct d_info *);
374
375 static struct demangle_component *d_special_name (struct d_info *);
376
377 static int d_call_offset (struct d_info *, int);
378
379 static struct demangle_component *d_ctor_dtor_name (struct d_info *);
380
381 static struct demangle_component **
382 d_cv_qualifiers (struct d_info *, struct demangle_component **, int);
383
384 static struct demangle_component *
385 d_function_type (struct d_info *);
386
387 static struct demangle_component *
388 d_bare_function_type (struct d_info *, int);
389
390 static struct demangle_component *
391 d_class_enum_type (struct d_info *);
392
393 static struct demangle_component *d_array_type (struct d_info *);
394
395 static struct demangle_component *d_vector_type (struct d_info *);
396
397 static struct demangle_component *
398 d_pointer_to_member_type (struct d_info *);
399
400 static struct demangle_component *
401 d_template_param (struct d_info *);
402
403 static struct demangle_component *d_template_args (struct d_info *);
404
405 static struct demangle_component *
406 d_template_arg (struct d_info *);
407
408 static struct demangle_component *d_expression (struct d_info *);
409
410 static struct demangle_component *d_expr_primary (struct d_info *);
411
412 static struct demangle_component *d_local_name (struct d_info *);
413
414 static int d_discriminator (struct d_info *);
415
416 static struct demangle_component *d_lambda (struct d_info *);
417
418 static struct demangle_component *d_unnamed_type (struct d_info *);
419
420 static struct demangle_component *
421 d_clone_suffix (struct d_info *, struct demangle_component *);
422
423 static int
424 d_add_substitution (struct d_info *, struct demangle_component *);
425
426 static struct demangle_component *d_substitution (struct d_info *, int);
427
428 static void d_growable_string_init (struct d_growable_string *, size_t);
429
430 static inline void
431 d_growable_string_resize (struct d_growable_string *, size_t);
432
433 static inline void
434 d_growable_string_append_buffer (struct d_growable_string *,
435                                  const char *, size_t);
436 static void
437 d_growable_string_callback_adapter (const char *, size_t, void *);
438
439 static void
440 d_print_init (struct d_print_info *, demangle_callbackref, void *);
441
442 static inline void d_print_error (struct d_print_info *);
443
444 static inline int d_print_saw_error (struct d_print_info *);
445
446 static inline void d_print_flush (struct d_print_info *);
447
448 static inline void d_append_char (struct d_print_info *, char);
449
450 static inline void d_append_buffer (struct d_print_info *,
451                                     const char *, size_t);
452
453 static inline void d_append_string (struct d_print_info *, const char *);
454
455 static inline char d_last_char (struct d_print_info *);
456
457 static void
458 d_print_comp (struct d_print_info *, int, const struct demangle_component *);
459
460 static void
461 d_print_java_identifier (struct d_print_info *, const char *, int);
462
463 static void
464 d_print_mod_list (struct d_print_info *, int, struct d_print_mod *, int);
465
466 static void
467 d_print_mod (struct d_print_info *, int, const struct demangle_component *);
468
469 static void
470 d_print_function_type (struct d_print_info *, int,
471                        const struct demangle_component *,
472                        struct d_print_mod *);
473
474 static void
475 d_print_array_type (struct d_print_info *, int,
476                     const struct demangle_component *,
477                     struct d_print_mod *);
478
479 static void
480 d_print_expr_op (struct d_print_info *, int, const struct demangle_component *);
481
482 static void
483 d_print_cast (struct d_print_info *, int, const struct demangle_component *);
484
485 static int d_demangle_callback (const char *, int,
486                                 demangle_callbackref, void *);
487 static char *d_demangle (const char *, int, size_t *);
488
489 #ifdef CP_DEMANGLE_DEBUG
490
491 static void
492 d_dump (struct demangle_component *dc, int indent)
493 {
494   int i;
495
496   if (dc == NULL)
497     {
498       if (indent == 0)
499         printf ("failed demangling\n");
500       return;
501     }
502
503   for (i = 0; i < indent; ++i)
504     putchar (' ');
505
506   switch (dc->type)
507     {
508     case DEMANGLE_COMPONENT_NAME:
509       printf ("name '%.*s'\n", dc->u.s_name.len, dc->u.s_name.s);
510       return;
511     case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
512       printf ("template parameter %ld\n", dc->u.s_number.number);
513       return;
514     case DEMANGLE_COMPONENT_CTOR:
515       printf ("constructor %d\n", (int) dc->u.s_ctor.kind);
516       d_dump (dc->u.s_ctor.name, indent + 2);
517       return;
518     case DEMANGLE_COMPONENT_DTOR:
519       printf ("destructor %d\n", (int) dc->u.s_dtor.kind);
520       d_dump (dc->u.s_dtor.name, indent + 2);
521       return;
522     case DEMANGLE_COMPONENT_SUB_STD:
523       printf ("standard substitution %s\n", dc->u.s_string.string);
524       return;
525     case DEMANGLE_COMPONENT_BUILTIN_TYPE:
526       printf ("builtin type %s\n", dc->u.s_builtin.type->name);
527       return;
528     case DEMANGLE_COMPONENT_OPERATOR:
529       printf ("operator %s\n", dc->u.s_operator.op->name);
530       return;
531     case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
532       printf ("extended operator with %d args\n",
533               dc->u.s_extended_operator.args);
534       d_dump (dc->u.s_extended_operator.name, indent + 2);
535       return;
536
537     case DEMANGLE_COMPONENT_QUAL_NAME:
538       printf ("qualified name\n");
539       break;
540     case DEMANGLE_COMPONENT_LOCAL_NAME:
541       printf ("local name\n");
542       break;
543     case DEMANGLE_COMPONENT_TYPED_NAME:
544       printf ("typed name\n");
545       break;
546     case DEMANGLE_COMPONENT_TEMPLATE:
547       printf ("template\n");
548       break;
549     case DEMANGLE_COMPONENT_VTABLE:
550       printf ("vtable\n");
551       break;
552     case DEMANGLE_COMPONENT_VTT:
553       printf ("VTT\n");
554       break;
555     case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
556       printf ("construction vtable\n");
557       break;
558     case DEMANGLE_COMPONENT_TYPEINFO:
559       printf ("typeinfo\n");
560       break;
561     case DEMANGLE_COMPONENT_TYPEINFO_NAME:
562       printf ("typeinfo name\n");
563       break;
564     case DEMANGLE_COMPONENT_TYPEINFO_FN:
565       printf ("typeinfo function\n");
566       break;
567     case DEMANGLE_COMPONENT_THUNK:
568       printf ("thunk\n");
569       break;
570     case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
571       printf ("virtual thunk\n");
572       break;
573     case DEMANGLE_COMPONENT_COVARIANT_THUNK:
574       printf ("covariant thunk\n");
575       break;
576     case DEMANGLE_COMPONENT_JAVA_CLASS:
577       printf ("java class\n");
578       break;
579     case DEMANGLE_COMPONENT_GUARD:
580       printf ("guard\n");
581       break;
582     case DEMANGLE_COMPONENT_REFTEMP:
583       printf ("reference temporary\n");
584       break;
585     case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
586       printf ("hidden alias\n");
587       break;
588     case DEMANGLE_COMPONENT_TRANSACTION_CLONE:
589       printf ("transaction clone\n");
590       break;
591     case DEMANGLE_COMPONENT_NONTRANSACTION_CLONE:
592       printf ("non-transaction clone\n");
593       break;
594     case DEMANGLE_COMPONENT_RESTRICT:
595       printf ("restrict\n");
596       break;
597     case DEMANGLE_COMPONENT_VOLATILE:
598       printf ("volatile\n");
599       break;
600     case DEMANGLE_COMPONENT_CONST:
601       printf ("const\n");
602       break;
603     case DEMANGLE_COMPONENT_RESTRICT_THIS:
604       printf ("restrict this\n");
605       break;
606     case DEMANGLE_COMPONENT_VOLATILE_THIS:
607       printf ("volatile this\n");
608       break;
609     case DEMANGLE_COMPONENT_CONST_THIS:
610       printf ("const this\n");
611       break;
612     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
613       printf ("vendor type qualifier\n");
614       break;
615     case DEMANGLE_COMPONENT_POINTER:
616       printf ("pointer\n");
617       break;
618     case DEMANGLE_COMPONENT_REFERENCE:
619       printf ("reference\n");
620       break;
621     case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
622       printf ("rvalue reference\n");
623       break;
624     case DEMANGLE_COMPONENT_COMPLEX:
625       printf ("complex\n");
626       break;
627     case DEMANGLE_COMPONENT_IMAGINARY:
628       printf ("imaginary\n");
629       break;
630     case DEMANGLE_COMPONENT_VENDOR_TYPE:
631       printf ("vendor type\n");
632       break;
633     case DEMANGLE_COMPONENT_FUNCTION_TYPE:
634       printf ("function type\n");
635       break;
636     case DEMANGLE_COMPONENT_ARRAY_TYPE:
637       printf ("array type\n");
638       break;
639     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
640       printf ("pointer to member type\n");
641       break;
642     case DEMANGLE_COMPONENT_FIXED_TYPE:
643       printf ("fixed-point type\n");
644       break;
645     case DEMANGLE_COMPONENT_ARGLIST:
646       printf ("argument list\n");
647       break;
648     case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
649       printf ("template argument list\n");
650       break;
651     case DEMANGLE_COMPONENT_INITIALIZER_LIST:
652       printf ("initializer list\n");
653       break;
654     case DEMANGLE_COMPONENT_CAST:
655       printf ("cast\n");
656       break;
657     case DEMANGLE_COMPONENT_NULLARY:
658       printf ("nullary operator\n");
659       break;
660     case DEMANGLE_COMPONENT_UNARY:
661       printf ("unary operator\n");
662       break;
663     case DEMANGLE_COMPONENT_BINARY:
664       printf ("binary operator\n");
665       break;
666     case DEMANGLE_COMPONENT_BINARY_ARGS:
667       printf ("binary operator arguments\n");
668       break;
669     case DEMANGLE_COMPONENT_TRINARY:
670       printf ("trinary operator\n");
671       break;
672     case DEMANGLE_COMPONENT_TRINARY_ARG1:
673       printf ("trinary operator arguments 1\n");
674       break;
675     case DEMANGLE_COMPONENT_TRINARY_ARG2:
676       printf ("trinary operator arguments 1\n");
677       break;
678     case DEMANGLE_COMPONENT_LITERAL:
679       printf ("literal\n");
680       break;
681     case DEMANGLE_COMPONENT_LITERAL_NEG:
682       printf ("negative literal\n");
683       break;
684     case DEMANGLE_COMPONENT_JAVA_RESOURCE:
685       printf ("java resource\n");
686       break;
687     case DEMANGLE_COMPONENT_COMPOUND_NAME:
688       printf ("compound name\n");
689       break;
690     case DEMANGLE_COMPONENT_CHARACTER:
691       printf ("character '%c'\n",  dc->u.s_character.character);
692       return;
693     case DEMANGLE_COMPONENT_DECLTYPE:
694       printf ("decltype\n");
695       break;
696     case DEMANGLE_COMPONENT_PACK_EXPANSION:
697       printf ("pack expansion\n");
698       break;
699     }
700
701   d_dump (d_left (dc), indent + 2);
702   d_dump (d_right (dc), indent + 2);
703 }
704
705 #endif /* CP_DEMANGLE_DEBUG */
706
707 /* Fill in a DEMANGLE_COMPONENT_NAME.  */
708
709 CP_STATIC_IF_GLIBCPP_V3
710 int
711 cplus_demangle_fill_name (struct demangle_component *p, const char *s, int len)
712 {
713   if (p == NULL || s == NULL || len == 0)
714     return 0;
715   p->type = DEMANGLE_COMPONENT_NAME;
716   p->u.s_name.s = s;
717   p->u.s_name.len = len;
718   return 1;
719 }
720
721 /* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR.  */
722
723 CP_STATIC_IF_GLIBCPP_V3
724 int
725 cplus_demangle_fill_extended_operator (struct demangle_component *p, int args,
726                                        struct demangle_component *name)
727 {
728   if (p == NULL || args < 0 || name == NULL)
729     return 0;
730   p->type = DEMANGLE_COMPONENT_EXTENDED_OPERATOR;
731   p->u.s_extended_operator.args = args;
732   p->u.s_extended_operator.name = name;
733   return 1;
734 }
735
736 /* Fill in a DEMANGLE_COMPONENT_CTOR.  */
737
738 CP_STATIC_IF_GLIBCPP_V3
739 int
740 cplus_demangle_fill_ctor (struct demangle_component *p,
741                           enum gnu_v3_ctor_kinds kind,
742                           struct demangle_component *name)
743 {
744   if (p == NULL
745       || name == NULL
746       || (int) kind < gnu_v3_complete_object_ctor
747       || (int) kind > gnu_v3_object_ctor_group)
748     return 0;
749   p->type = DEMANGLE_COMPONENT_CTOR;
750   p->u.s_ctor.kind = kind;
751   p->u.s_ctor.name = name;
752   return 1;
753 }
754
755 /* Fill in a DEMANGLE_COMPONENT_DTOR.  */
756
757 CP_STATIC_IF_GLIBCPP_V3
758 int
759 cplus_demangle_fill_dtor (struct demangle_component *p,
760                           enum gnu_v3_dtor_kinds kind,
761                           struct demangle_component *name)
762 {
763   if (p == NULL
764       || name == NULL
765       || (int) kind < gnu_v3_deleting_dtor
766       || (int) kind > gnu_v3_object_dtor_group)
767     return 0;
768   p->type = DEMANGLE_COMPONENT_DTOR;
769   p->u.s_dtor.kind = kind;
770   p->u.s_dtor.name = name;
771   return 1;
772 }
773
774 /* Add a new component.  */
775
776 static struct demangle_component *
777 d_make_empty (struct d_info *di)
778 {
779   struct demangle_component *p;
780
781   if (di->next_comp >= di->num_comps)
782     return NULL;
783   p = &di->comps[di->next_comp];
784   ++di->next_comp;
785   return p;
786 }
787
788 /* Add a new generic component.  */
789
790 static struct demangle_component *
791 d_make_comp (struct d_info *di, enum demangle_component_type type,
792              struct demangle_component *left,
793              struct demangle_component *right)
794 {
795   struct demangle_component *p;
796
797   /* We check for errors here.  A typical error would be a NULL return
798      from a subroutine.  We catch those here, and return NULL
799      upward.  */
800   switch (type)
801     {
802       /* These types require two parameters.  */
803     case DEMANGLE_COMPONENT_QUAL_NAME:
804     case DEMANGLE_COMPONENT_LOCAL_NAME:
805     case DEMANGLE_COMPONENT_TYPED_NAME:
806     case DEMANGLE_COMPONENT_TEMPLATE:
807     case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
808     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
809     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
810     case DEMANGLE_COMPONENT_UNARY:
811     case DEMANGLE_COMPONENT_BINARY:
812     case DEMANGLE_COMPONENT_BINARY_ARGS:
813     case DEMANGLE_COMPONENT_TRINARY:
814     case DEMANGLE_COMPONENT_TRINARY_ARG1:
815     case DEMANGLE_COMPONENT_LITERAL:
816     case DEMANGLE_COMPONENT_LITERAL_NEG:
817     case DEMANGLE_COMPONENT_COMPOUND_NAME:
818     case DEMANGLE_COMPONENT_VECTOR_TYPE:
819     case DEMANGLE_COMPONENT_CLONE:
820       if (left == NULL || right == NULL)
821         return NULL;
822       break;
823
824       /* These types only require one parameter.  */
825     case DEMANGLE_COMPONENT_VTABLE:
826     case DEMANGLE_COMPONENT_VTT:
827     case DEMANGLE_COMPONENT_TYPEINFO:
828     case DEMANGLE_COMPONENT_TYPEINFO_NAME:
829     case DEMANGLE_COMPONENT_TYPEINFO_FN:
830     case DEMANGLE_COMPONENT_THUNK:
831     case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
832     case DEMANGLE_COMPONENT_COVARIANT_THUNK:
833     case DEMANGLE_COMPONENT_JAVA_CLASS:
834     case DEMANGLE_COMPONENT_GUARD:
835     case DEMANGLE_COMPONENT_REFTEMP:
836     case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
837     case DEMANGLE_COMPONENT_TRANSACTION_CLONE:
838     case DEMANGLE_COMPONENT_NONTRANSACTION_CLONE:
839     case DEMANGLE_COMPONENT_POINTER:
840     case DEMANGLE_COMPONENT_REFERENCE:
841     case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
842     case DEMANGLE_COMPONENT_COMPLEX:
843     case DEMANGLE_COMPONENT_IMAGINARY:
844     case DEMANGLE_COMPONENT_VENDOR_TYPE:
845     case DEMANGLE_COMPONENT_CAST:
846     case DEMANGLE_COMPONENT_JAVA_RESOURCE:
847     case DEMANGLE_COMPONENT_DECLTYPE:
848     case DEMANGLE_COMPONENT_PACK_EXPANSION:
849     case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
850     case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
851     case DEMANGLE_COMPONENT_NULLARY:
852     case DEMANGLE_COMPONENT_TRINARY_ARG2:
853       if (left == NULL)
854         return NULL;
855       break;
856
857       /* This needs a right parameter, but the left parameter can be
858          empty.  */
859     case DEMANGLE_COMPONENT_ARRAY_TYPE:
860     case DEMANGLE_COMPONENT_INITIALIZER_LIST:
861       if (right == NULL)
862         return NULL;
863       break;
864
865       /* These are allowed to have no parameters--in some cases they
866          will be filled in later.  */
867     case DEMANGLE_COMPONENT_FUNCTION_TYPE:
868     case DEMANGLE_COMPONENT_RESTRICT:
869     case DEMANGLE_COMPONENT_VOLATILE:
870     case DEMANGLE_COMPONENT_CONST:
871     case DEMANGLE_COMPONENT_RESTRICT_THIS:
872     case DEMANGLE_COMPONENT_VOLATILE_THIS:
873     case DEMANGLE_COMPONENT_CONST_THIS:
874     case DEMANGLE_COMPONENT_ARGLIST:
875     case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
876       break;
877
878       /* Other types should not be seen here.  */
879     default:
880       return NULL;
881     }
882
883   p = d_make_empty (di);
884   if (p != NULL)
885     {
886       p->type = type;
887       p->u.s_binary.left = left;
888       p->u.s_binary.right = right;
889     }
890   return p;
891 }
892
893 /* Add a new demangle mangled name component.  */
894
895 static struct demangle_component *
896 d_make_demangle_mangled_name (struct d_info *di, const char *s)
897 {
898   if (d_peek_char (di) != '_' || d_peek_next_char (di) != 'Z')
899     return d_make_name (di, s, strlen (s));
900   d_advance (di, 2);
901   return d_encoding (di, 0);
902 }
903
904 /* Add a new name component.  */
905
906 static struct demangle_component *
907 d_make_name (struct d_info *di, const char *s, int len)
908 {
909   struct demangle_component *p;
910
911   p = d_make_empty (di);
912   if (! cplus_demangle_fill_name (p, s, len))
913     return NULL;
914   return p;
915 }
916
917 /* Add a new builtin type component.  */
918
919 static struct demangle_component *
920 d_make_builtin_type (struct d_info *di,
921                      const struct demangle_builtin_type_info *type)
922 {
923   struct demangle_component *p;
924
925   if (type == NULL)
926     return NULL;
927   p = d_make_empty (di);
928   if (p != NULL)
929     {
930       p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE;
931       p->u.s_builtin.type = type;
932     }
933   return p;
934 }
935
936 /* Add a new operator component.  */
937
938 static struct demangle_component *
939 d_make_operator (struct d_info *di, const struct demangle_operator_info *op)
940 {
941   struct demangle_component *p;
942
943   p = d_make_empty (di);
944   if (p != NULL)
945     {
946       p->type = DEMANGLE_COMPONENT_OPERATOR;
947       p->u.s_operator.op = op;
948     }
949   return p;
950 }
951
952 /* Add a new extended operator component.  */
953
954 static struct demangle_component *
955 d_make_extended_operator (struct d_info *di, int args,
956                           struct demangle_component *name)
957 {
958   struct demangle_component *p;
959
960   p = d_make_empty (di);
961   if (! cplus_demangle_fill_extended_operator (p, args, name))
962     return NULL;
963   return p;
964 }
965
966 static struct demangle_component *
967 d_make_default_arg (struct d_info *di, int num,
968                     struct demangle_component *sub)
969 {
970   struct demangle_component *p = d_make_empty (di);
971   if (p)
972     {
973       p->type = DEMANGLE_COMPONENT_DEFAULT_ARG;
974       p->u.s_unary_num.num = num;
975       p->u.s_unary_num.sub = sub;
976     }
977   return p;
978 }
979
980 /* Add a new constructor component.  */
981
982 static struct demangle_component *
983 d_make_ctor (struct d_info *di, enum gnu_v3_ctor_kinds kind,
984              struct demangle_component *name)
985 {
986   struct demangle_component *p;
987
988   p = d_make_empty (di);
989   if (! cplus_demangle_fill_ctor (p, kind, name))
990     return NULL;
991   return p;
992 }
993
994 /* Add a new destructor component.  */
995
996 static struct demangle_component *
997 d_make_dtor (struct d_info *di, enum gnu_v3_dtor_kinds kind,
998              struct demangle_component *name)
999 {
1000   struct demangle_component *p;
1001
1002   p = d_make_empty (di);
1003   if (! cplus_demangle_fill_dtor (p, kind, name))
1004     return NULL;
1005   return p;
1006 }
1007
1008 /* Add a new template parameter.  */
1009
1010 static struct demangle_component *
1011 d_make_template_param (struct d_info *di, long i)
1012 {
1013   struct demangle_component *p;
1014
1015   p = d_make_empty (di);
1016   if (p != NULL)
1017     {
1018       p->type = DEMANGLE_COMPONENT_TEMPLATE_PARAM;
1019       p->u.s_number.number = i;
1020     }
1021   return p;
1022 }
1023
1024 /* Add a new function parameter.  */
1025
1026 static struct demangle_component *
1027 d_make_function_param (struct d_info *di, long i)
1028 {
1029   struct demangle_component *p;
1030
1031   p = d_make_empty (di);
1032   if (p != NULL)
1033     {
1034       p->type = DEMANGLE_COMPONENT_FUNCTION_PARAM;
1035       p->u.s_number.number = i;
1036     }
1037   return p;
1038 }
1039
1040 /* Add a new standard substitution component.  */
1041
1042 static struct demangle_component *
1043 d_make_sub (struct d_info *di, const char *name, int len)
1044 {
1045   struct demangle_component *p;
1046
1047   p = d_make_empty (di);
1048   if (p != NULL)
1049     {
1050       p->type = DEMANGLE_COMPONENT_SUB_STD;
1051       p->u.s_string.string = name;
1052       p->u.s_string.len = len;
1053     }
1054   return p;
1055 }
1056
1057 /* <mangled-name> ::= _Z <encoding> [<clone-suffix>]*
1058
1059    TOP_LEVEL is non-zero when called at the top level.  */
1060
1061 CP_STATIC_IF_GLIBCPP_V3
1062 struct demangle_component *
1063 cplus_demangle_mangled_name (struct d_info *di, int top_level)
1064 {
1065   struct demangle_component *p;
1066
1067   if (! d_check_char (di, '_')
1068       /* Allow missing _ if not at toplevel to work around a
1069          bug in G++ abi-version=2 mangling; see the comment in
1070          write_template_arg.  */
1071       && top_level)
1072     return NULL;
1073   if (! d_check_char (di, 'Z'))
1074     return NULL;
1075   p = d_encoding (di, top_level);
1076
1077   /* If at top level and parsing parameters, check for a clone
1078      suffix.  */
1079   if (top_level && (di->options & DMGL_PARAMS) != 0)
1080     while (d_peek_char (di) == '.'
1081            && (IS_LOWER (d_peek_next_char (di))
1082                || d_peek_next_char (di) == '_'
1083                || IS_DIGIT (d_peek_next_char (di))))
1084       p = d_clone_suffix (di, p);
1085
1086   return p;
1087 }
1088
1089 /* Return whether a function should have a return type.  The argument
1090    is the function name, which may be qualified in various ways.  The
1091    rules are that template functions have return types with some
1092    exceptions, function types which are not part of a function name
1093    mangling have return types with some exceptions, and non-template
1094    function names do not have return types.  The exceptions are that
1095    constructors, destructors, and conversion operators do not have
1096    return types.  */
1097
1098 static int
1099 has_return_type (struct demangle_component *dc)
1100 {
1101   if (dc == NULL)
1102     return 0;
1103   switch (dc->type)
1104     {
1105     default:
1106       return 0;
1107     case DEMANGLE_COMPONENT_TEMPLATE:
1108       return ! is_ctor_dtor_or_conversion (d_left (dc));
1109     case DEMANGLE_COMPONENT_RESTRICT_THIS:
1110     case DEMANGLE_COMPONENT_VOLATILE_THIS:
1111     case DEMANGLE_COMPONENT_CONST_THIS:
1112       return has_return_type (d_left (dc));
1113     }
1114 }
1115
1116 /* Return whether a name is a constructor, a destructor, or a
1117    conversion operator.  */
1118
1119 static int
1120 is_ctor_dtor_or_conversion (struct demangle_component *dc)
1121 {
1122   if (dc == NULL)
1123     return 0;
1124   switch (dc->type)
1125     {
1126     default:
1127       return 0;
1128     case DEMANGLE_COMPONENT_QUAL_NAME:
1129     case DEMANGLE_COMPONENT_LOCAL_NAME:
1130       return is_ctor_dtor_or_conversion (d_right (dc));
1131     case DEMANGLE_COMPONENT_CTOR:
1132     case DEMANGLE_COMPONENT_DTOR:
1133     case DEMANGLE_COMPONENT_CAST:
1134       return 1;
1135     }
1136 }
1137
1138 /* <encoding> ::= <(function) name> <bare-function-type>
1139               ::= <(data) name>
1140               ::= <special-name>
1141
1142    TOP_LEVEL is non-zero when called at the top level, in which case
1143    if DMGL_PARAMS is not set we do not demangle the function
1144    parameters.  We only set this at the top level, because otherwise
1145    we would not correctly demangle names in local scopes.  */
1146
1147 static struct demangle_component *
1148 d_encoding (struct d_info *di, int top_level)
1149 {
1150   char peek = d_peek_char (di);
1151
1152   if (peek == 'G' || peek == 'T')
1153     return d_special_name (di);
1154   else
1155     {
1156       struct demangle_component *dc;
1157
1158       dc = d_name (di);
1159
1160       if (dc != NULL && top_level && (di->options & DMGL_PARAMS) == 0)
1161         {
1162           /* Strip off any initial CV-qualifiers, as they really apply
1163              to the `this' parameter, and they were not output by the
1164              v2 demangler without DMGL_PARAMS.  */
1165           while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
1166                  || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
1167                  || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
1168             dc = d_left (dc);
1169
1170           /* If the top level is a DEMANGLE_COMPONENT_LOCAL_NAME, then
1171              there may be CV-qualifiers on its right argument which
1172              really apply here; this happens when parsing a class
1173              which is local to a function.  */
1174           if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME)
1175             {
1176               struct demangle_component *dcr;
1177
1178               dcr = d_right (dc);
1179               while (dcr->type == DEMANGLE_COMPONENT_RESTRICT_THIS
1180                      || dcr->type == DEMANGLE_COMPONENT_VOLATILE_THIS
1181                      || dcr->type == DEMANGLE_COMPONENT_CONST_THIS)
1182                 dcr = d_left (dcr);
1183               dc->u.s_binary.right = dcr;
1184             }
1185
1186           return dc;
1187         }
1188
1189       peek = d_peek_char (di);
1190       if (dc == NULL || peek == '\0' || peek == 'E')
1191         return dc;
1192       return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc,
1193                           d_bare_function_type (di, has_return_type (dc)));
1194     }
1195 }
1196
1197 /* <name> ::= <nested-name>
1198           ::= <unscoped-name>
1199           ::= <unscoped-template-name> <template-args>
1200           ::= <local-name>
1201
1202    <unscoped-name> ::= <unqualified-name>
1203                    ::= St <unqualified-name>
1204
1205    <unscoped-template-name> ::= <unscoped-name>
1206                             ::= <substitution>
1207 */
1208
1209 static struct demangle_component *
1210 d_name (struct d_info *di)
1211 {
1212   char peek = d_peek_char (di);
1213   struct demangle_component *dc;
1214
1215   switch (peek)
1216     {
1217     case 'N':
1218       return d_nested_name (di);
1219
1220     case 'Z':
1221       return d_local_name (di);
1222
1223     case 'L':
1224     case 'U':
1225       return d_unqualified_name (di);
1226
1227     case 'S':
1228       {
1229         int subst;
1230
1231         if (d_peek_next_char (di) != 't')
1232           {
1233             dc = d_substitution (di, 0);
1234             subst = 1;
1235           }
1236         else
1237           {
1238             d_advance (di, 2);
1239             dc = d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME,
1240                               d_make_name (di, "std", 3),
1241                               d_unqualified_name (di));
1242             di->expansion += 3;
1243             subst = 0;
1244           }
1245
1246         if (d_peek_char (di) != 'I')
1247           {
1248             /* The grammar does not permit this case to occur if we
1249                called d_substitution() above (i.e., subst == 1).  We
1250                don't bother to check.  */
1251           }
1252         else
1253           {
1254             /* This is <template-args>, which means that we just saw
1255                <unscoped-template-name>, which is a substitution
1256                candidate if we didn't just get it from a
1257                substitution.  */
1258             if (! subst)
1259               {
1260                 if (! d_add_substitution (di, dc))
1261                   return NULL;
1262               }
1263             dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
1264                               d_template_args (di));
1265           }
1266
1267         return dc;
1268       }
1269
1270     default:
1271       dc = d_unqualified_name (di);
1272       if (d_peek_char (di) == 'I')
1273         {
1274           /* This is <template-args>, which means that we just saw
1275              <unscoped-template-name>, which is a substitution
1276              candidate.  */
1277           if (! d_add_substitution (di, dc))
1278             return NULL;
1279           dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
1280                             d_template_args (di));
1281         }
1282       return dc;
1283     }
1284 }
1285
1286 /* <nested-name> ::= N [<CV-qualifiers>] <prefix> <unqualified-name> E
1287                  ::= N [<CV-qualifiers>] <template-prefix> <template-args> E
1288 */
1289
1290 static struct demangle_component *
1291 d_nested_name (struct d_info *di)
1292 {
1293   struct demangle_component *ret;
1294   struct demangle_component **pret;
1295
1296   if (! d_check_char (di, 'N'))
1297     return NULL;
1298
1299   pret = d_cv_qualifiers (di, &ret, 1);
1300   if (pret == NULL)
1301     return NULL;
1302
1303   *pret = d_prefix (di);
1304   if (*pret == NULL)
1305     return NULL;
1306
1307   if (! d_check_char (di, 'E'))
1308     return NULL;
1309
1310   return ret;
1311 }
1312
1313 /* <prefix> ::= <prefix> <unqualified-name>
1314             ::= <template-prefix> <template-args>
1315             ::= <template-param>
1316             ::= <decltype>
1317             ::=
1318             ::= <substitution>
1319
1320    <template-prefix> ::= <prefix> <(template) unqualified-name>
1321                      ::= <template-param>
1322                      ::= <substitution>
1323 */
1324
1325 static struct demangle_component *
1326 d_prefix (struct d_info *di)
1327 {
1328   struct demangle_component *ret = NULL;
1329
1330   while (1)
1331     {
1332       char peek;
1333       enum demangle_component_type comb_type;
1334       struct demangle_component *dc;
1335
1336       peek = d_peek_char (di);
1337       if (peek == '\0')
1338         return NULL;
1339
1340       /* The older code accepts a <local-name> here, but I don't see
1341          that in the grammar.  The older code does not accept a
1342          <template-param> here.  */
1343
1344       comb_type = DEMANGLE_COMPONENT_QUAL_NAME;
1345       if (peek == 'D')
1346         {
1347           char peek2 = d_peek_next_char (di);
1348           if (peek2 == 'T' || peek2 == 't')
1349             /* Decltype.  */
1350             dc = cplus_demangle_type (di);
1351           else
1352             /* Destructor name.  */
1353             dc = d_unqualified_name (di);
1354         }
1355       else if (IS_DIGIT (peek)
1356           || IS_LOWER (peek)
1357           || peek == 'C'
1358           || peek == 'U'
1359           || peek == 'L')
1360         dc = d_unqualified_name (di);
1361       else if (peek == 'S')
1362         dc = d_substitution (di, 1);
1363       else if (peek == 'I')
1364         {
1365           if (ret == NULL)
1366             return NULL;
1367           comb_type = DEMANGLE_COMPONENT_TEMPLATE;
1368           dc = d_template_args (di);
1369         }
1370       else if (peek == 'T')
1371         dc = d_template_param (di);
1372       else if (peek == 'E')
1373         return ret;
1374       else if (peek == 'M')
1375         {
1376           /* Initializer scope for a lambda.  We don't need to represent
1377              this; the normal code will just treat the variable as a type
1378              scope, which gives appropriate output.  */
1379           if (ret == NULL)
1380             return NULL;
1381           d_advance (di, 1);
1382           continue;
1383         }
1384       else
1385         return NULL;
1386
1387       if (ret == NULL)
1388         ret = dc;
1389       else
1390         ret = d_make_comp (di, comb_type, ret, dc);
1391
1392       if (peek != 'S' && d_peek_char (di) != 'E')
1393         {
1394           if (! d_add_substitution (di, ret))
1395             return NULL;
1396         }
1397     }
1398 }
1399
1400 /* <unqualified-name> ::= <operator-name>
1401                       ::= <ctor-dtor-name>
1402                       ::= <source-name>
1403                       ::= <local-source-name> 
1404
1405     <local-source-name> ::= L <source-name> <discriminator>
1406 */
1407
1408 static struct demangle_component *
1409 d_unqualified_name (struct d_info *di)
1410 {
1411   char peek;
1412
1413   peek = d_peek_char (di);
1414   if (IS_DIGIT (peek))
1415     return d_source_name (di);
1416   else if (IS_LOWER (peek))
1417     {
1418       struct demangle_component *ret;
1419
1420       ret = d_operator_name (di);
1421       if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR)
1422         di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
1423       return ret;
1424     }
1425   else if (peek == 'C' || peek == 'D')
1426     return d_ctor_dtor_name (di);
1427   else if (peek == 'L')
1428     {
1429       struct demangle_component * ret;
1430
1431       d_advance (di, 1);
1432
1433       ret = d_source_name (di);
1434       if (ret == NULL)
1435         return NULL;
1436       if (! d_discriminator (di))
1437         return NULL;
1438       return ret;
1439     }
1440   else if (peek == 'U')
1441     {
1442       switch (d_peek_next_char (di))
1443         {
1444         case 'l':
1445           return d_lambda (di);
1446         case 't':
1447           return d_unnamed_type (di);
1448         default:
1449           return NULL;
1450         }
1451     }
1452   else
1453     return NULL;
1454 }
1455
1456 /* <source-name> ::= <(positive length) number> <identifier>  */
1457
1458 static struct demangle_component *
1459 d_source_name (struct d_info *di)
1460 {
1461   long len;
1462   struct demangle_component *ret;
1463
1464   len = d_number (di);
1465   if (len <= 0)
1466     return NULL;
1467   ret = d_identifier (di, len);
1468   di->last_name = ret;
1469   return ret;
1470 }
1471
1472 /* number ::= [n] <(non-negative decimal integer)>  */
1473
1474 static long
1475 d_number (struct d_info *di)
1476 {
1477   int negative;
1478   char peek;
1479   long ret;
1480
1481   negative = 0;
1482   peek = d_peek_char (di);
1483   if (peek == 'n')
1484     {
1485       negative = 1;
1486       d_advance (di, 1);
1487       peek = d_peek_char (di);
1488     }
1489
1490   ret = 0;
1491   while (1)
1492     {
1493       if (! IS_DIGIT (peek))
1494         {
1495           if (negative)
1496             ret = - ret;
1497           return ret;
1498         }
1499       ret = ret * 10 + peek - '0';
1500       d_advance (di, 1);
1501       peek = d_peek_char (di);
1502     }
1503 }
1504
1505 /* Like d_number, but returns a demangle_component.  */
1506
1507 static struct demangle_component *
1508 d_number_component (struct d_info *di)
1509 {
1510   struct demangle_component *ret = d_make_empty (di);
1511   if (ret)
1512     {
1513       ret->type = DEMANGLE_COMPONENT_NUMBER;
1514       ret->u.s_number.number = d_number (di);
1515     }
1516   return ret;
1517 }
1518
1519 /* identifier ::= <(unqualified source code identifier)>  */
1520
1521 static struct demangle_component *
1522 d_identifier (struct d_info *di, int len)
1523 {
1524   const char *name;
1525
1526   name = d_str (di);
1527
1528   if (di->send - name < len)
1529     return NULL;
1530
1531   d_advance (di, len);
1532
1533   /* A Java mangled name may have a trailing '$' if it is a C++
1534      keyword.  This '$' is not included in the length count.  We just
1535      ignore the '$'.  */
1536   if ((di->options & DMGL_JAVA) != 0
1537       && d_peek_char (di) == '$')
1538     d_advance (di, 1);
1539
1540   /* Look for something which looks like a gcc encoding of an
1541      anonymous namespace, and replace it with a more user friendly
1542      name.  */
1543   if (len >= (int) ANONYMOUS_NAMESPACE_PREFIX_LEN + 2
1544       && memcmp (name, ANONYMOUS_NAMESPACE_PREFIX,
1545                  ANONYMOUS_NAMESPACE_PREFIX_LEN) == 0)
1546     {
1547       const char *s;
1548
1549       s = name + ANONYMOUS_NAMESPACE_PREFIX_LEN;
1550       if ((*s == '.' || *s == '_' || *s == '$')
1551           && s[1] == 'N')
1552         {
1553           di->expansion -= len - sizeof "(anonymous namespace)";
1554           return d_make_name (di, "(anonymous namespace)",
1555                               sizeof "(anonymous namespace)" - 1);
1556         }
1557     }
1558
1559   return d_make_name (di, name, len);
1560 }
1561
1562 /* operator_name ::= many different two character encodings.
1563                  ::= cv <type>
1564                  ::= v <digit> <source-name>
1565
1566    This list is sorted for binary search.  */
1567
1568 #define NL(s) s, (sizeof s) - 1
1569
1570 CP_STATIC_IF_GLIBCPP_V3
1571 const struct demangle_operator_info cplus_demangle_operators[] =
1572 {
1573   { "aN", NL ("&="),        2 },
1574   { "aS", NL ("="),         2 },
1575   { "aa", NL ("&&"),        2 },
1576   { "ad", NL ("&"),         1 },
1577   { "an", NL ("&"),         2 },
1578   { "at", NL ("alignof "),   1 },
1579   { "az", NL ("alignof "),   1 },
1580   { "cl", NL ("()"),        2 },
1581   { "cm", NL (","),         2 },
1582   { "co", NL ("~"),         1 },
1583   { "dV", NL ("/="),        2 },
1584   { "da", NL ("delete[] "), 1 },
1585   { "de", NL ("*"),         1 },
1586   { "dl", NL ("delete "),   1 },
1587   { "ds", NL (".*"),        2 },
1588   { "dt", NL ("."),         2 },
1589   { "dv", NL ("/"),         2 },
1590   { "eO", NL ("^="),        2 },
1591   { "eo", NL ("^"),         2 },
1592   { "eq", NL ("=="),        2 },
1593   { "ge", NL (">="),        2 },
1594   { "gs", NL ("::"),        1 },
1595   { "gt", NL (">"),         2 },
1596   { "ix", NL ("[]"),        2 },
1597   { "lS", NL ("<<="),       2 },
1598   { "le", NL ("<="),        2 },
1599   { "ls", NL ("<<"),        2 },
1600   { "lt", NL ("<"),         2 },
1601   { "mI", NL ("-="),        2 },
1602   { "mL", NL ("*="),        2 },
1603   { "mi", NL ("-"),         2 },
1604   { "ml", NL ("*"),         2 },
1605   { "mm", NL ("--"),        1 },
1606   { "na", NL ("new[]"),     3 },
1607   { "ne", NL ("!="),        2 },
1608   { "ng", NL ("-"),         1 },
1609   { "nt", NL ("!"),         1 },
1610   { "nw", NL ("new"),       3 },
1611   { "oR", NL ("|="),        2 },
1612   { "oo", NL ("||"),        2 },
1613   { "or", NL ("|"),         2 },
1614   { "pL", NL ("+="),        2 },
1615   { "pl", NL ("+"),         2 },
1616   { "pm", NL ("->*"),       2 },
1617   { "pp", NL ("++"),        1 },
1618   { "ps", NL ("+"),         1 },
1619   { "pt", NL ("->"),        2 },
1620   { "qu", NL ("?"),         3 },
1621   { "rM", NL ("%="),        2 },
1622   { "rS", NL (">>="),       2 },
1623   { "rm", NL ("%"),         2 },
1624   { "rs", NL (">>"),        2 },
1625   { "st", NL ("sizeof "),   1 },
1626   { "sz", NL ("sizeof "),   1 },
1627   { "tr", NL ("throw"),     0 },
1628   { "tw", NL ("throw "),    1 },
1629   { NULL, NULL, 0,          0 }
1630 };
1631
1632 static struct demangle_component *
1633 d_operator_name (struct d_info *di)
1634 {
1635   char c1;
1636   char c2;
1637
1638   c1 = d_next_char (di);
1639   c2 = d_next_char (di);
1640   if (c1 == 'v' && IS_DIGIT (c2))
1641     return d_make_extended_operator (di, c2 - '0', d_source_name (di));
1642   else if (c1 == 'c' && c2 == 'v')
1643     return d_make_comp (di, DEMANGLE_COMPONENT_CAST,
1644                         cplus_demangle_type (di), NULL);
1645   else
1646     {
1647       /* LOW is the inclusive lower bound.  */
1648       int low = 0;
1649       /* HIGH is the exclusive upper bound.  We subtract one to ignore
1650          the sentinel at the end of the array.  */
1651       int high = ((sizeof (cplus_demangle_operators)
1652                    / sizeof (cplus_demangle_operators[0]))
1653                   - 1);
1654
1655       while (1)
1656         {
1657           int i;
1658           const struct demangle_operator_info *p;
1659
1660           i = low + (high - low) / 2;
1661           p = cplus_demangle_operators + i;
1662
1663           if (c1 == p->code[0] && c2 == p->code[1])
1664             return d_make_operator (di, p);
1665
1666           if (c1 < p->code[0] || (c1 == p->code[0] && c2 < p->code[1]))
1667             high = i;
1668           else
1669             low = i + 1;
1670           if (low == high)
1671             return NULL;
1672         }
1673     }
1674 }
1675
1676 static struct demangle_component *
1677 d_make_character (struct d_info *di, int c)
1678 {
1679   struct demangle_component *p;
1680   p = d_make_empty (di);
1681   if (p != NULL)
1682     {
1683       p->type = DEMANGLE_COMPONENT_CHARACTER;
1684       p->u.s_character.character = c;
1685     }
1686   return p;
1687 }
1688
1689 static struct demangle_component *
1690 d_java_resource (struct d_info *di)
1691 {
1692   struct demangle_component *p = NULL;
1693   struct demangle_component *next = NULL;
1694   long len, i;
1695   char c;
1696   const char *str;
1697
1698   len = d_number (di);
1699   if (len <= 1)
1700     return NULL;
1701
1702   /* Eat the leading '_'.  */
1703   if (d_next_char (di) != '_')
1704     return NULL;
1705   len--;
1706
1707   str = d_str (di);
1708   i = 0;
1709
1710   while (len > 0)
1711     {
1712       c = str[i];
1713       if (!c)
1714         return NULL;
1715
1716       /* Each chunk is either a '$' escape...  */
1717       if (c == '$')
1718         {
1719           i++;
1720           switch (str[i++])
1721             {
1722             case 'S':
1723               c = '/';
1724               break;
1725             case '_':
1726               c = '.';
1727               break;
1728             case '$':
1729               c = '$';
1730               break;
1731             default:
1732               return NULL;
1733             }
1734           next = d_make_character (di, c);
1735           d_advance (di, i);
1736           str = d_str (di);
1737           len -= i;
1738           i = 0;
1739           if (next == NULL)
1740             return NULL;
1741         }
1742       /* ... or a sequence of characters.  */
1743       else
1744         {
1745           while (i < len && str[i] && str[i] != '$')
1746             i++;
1747
1748           next = d_make_name (di, str, i);
1749           d_advance (di, i);
1750           str = d_str (di);
1751           len -= i;
1752           i = 0;
1753           if (next == NULL)
1754             return NULL;
1755         }
1756
1757       if (p == NULL)
1758         p = next;
1759       else
1760         {
1761           p = d_make_comp (di, DEMANGLE_COMPONENT_COMPOUND_NAME, p, next);
1762           if (p == NULL)
1763             return NULL;
1764         }
1765     }
1766
1767   p = d_make_comp (di, DEMANGLE_COMPONENT_JAVA_RESOURCE, p, NULL);
1768
1769   return p;
1770 }
1771
1772 /* <special-name> ::= TV <type>
1773                   ::= TT <type>
1774                   ::= TI <type>
1775                   ::= TS <type>
1776                   ::= GV <(object) name>
1777                   ::= T <call-offset> <(base) encoding>
1778                   ::= Tc <call-offset> <call-offset> <(base) encoding>
1779    Also g++ extensions:
1780                   ::= TC <type> <(offset) number> _ <(base) type>
1781                   ::= TF <type>
1782                   ::= TJ <type>
1783                   ::= GR <name>
1784                   ::= GA <encoding>
1785                   ::= Gr <resource name>
1786                   ::= GTt <encoding>
1787                   ::= GTn <encoding>
1788 */
1789
1790 static struct demangle_component *
1791 d_special_name (struct d_info *di)
1792 {
1793   di->expansion += 20;
1794   if (d_check_char (di, 'T'))
1795     {
1796       switch (d_next_char (di))
1797         {
1798         case 'V':
1799           di->expansion -= 5;
1800           return d_make_comp (di, DEMANGLE_COMPONENT_VTABLE,
1801                               cplus_demangle_type (di), NULL);
1802         case 'T':
1803           di->expansion -= 10;
1804           return d_make_comp (di, DEMANGLE_COMPONENT_VTT,
1805                               cplus_demangle_type (di), NULL);
1806         case 'I':
1807           return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO,
1808                               cplus_demangle_type (di), NULL);
1809         case 'S':
1810           return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_NAME,
1811                               cplus_demangle_type (di), NULL);
1812
1813         case 'h':
1814           if (! d_call_offset (di, 'h'))
1815             return NULL;
1816           return d_make_comp (di, DEMANGLE_COMPONENT_THUNK,
1817                               d_encoding (di, 0), NULL);
1818
1819         case 'v':
1820           if (! d_call_offset (di, 'v'))
1821             return NULL;
1822           return d_make_comp (di, DEMANGLE_COMPONENT_VIRTUAL_THUNK,
1823                               d_encoding (di, 0), NULL);
1824
1825         case 'c':
1826           if (! d_call_offset (di, '\0'))
1827             return NULL;
1828           if (! d_call_offset (di, '\0'))
1829             return NULL;
1830           return d_make_comp (di, DEMANGLE_COMPONENT_COVARIANT_THUNK,
1831                               d_encoding (di, 0), NULL);
1832
1833         case 'C':
1834           {
1835             struct demangle_component *derived_type;
1836             long offset;
1837             struct demangle_component *base_type;
1838
1839             derived_type = cplus_demangle_type (di);
1840             offset = d_number (di);
1841             if (offset < 0)
1842               return NULL;
1843             if (! d_check_char (di, '_'))
1844               return NULL;
1845             base_type = cplus_demangle_type (di);
1846             /* We don't display the offset.  FIXME: We should display
1847                it in verbose mode.  */
1848             di->expansion += 5;
1849             return d_make_comp (di, DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
1850                                 base_type, derived_type);
1851           }
1852
1853         case 'F':
1854           return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_FN,
1855                               cplus_demangle_type (di), NULL);
1856         case 'J':
1857           return d_make_comp (di, DEMANGLE_COMPONENT_JAVA_CLASS,
1858                               cplus_demangle_type (di), NULL);
1859
1860         default:
1861           return NULL;
1862         }
1863     }
1864   else if (d_check_char (di, 'G'))
1865     {
1866       switch (d_next_char (di))
1867         {
1868         case 'V':
1869           return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, d_name (di), NULL);
1870
1871         case 'R':
1872           {
1873             struct demangle_component *name = d_name (di);
1874             return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, name,
1875                                 d_number_component (di));
1876           }
1877
1878         case 'A':
1879           return d_make_comp (di, DEMANGLE_COMPONENT_HIDDEN_ALIAS,
1880                               d_encoding (di, 0), NULL);
1881
1882         case 'T':
1883           switch (d_next_char (di))
1884             {
1885             case 'n':
1886               return d_make_comp (di, DEMANGLE_COMPONENT_NONTRANSACTION_CLONE,
1887                                   d_encoding (di, 0), NULL);
1888             default:
1889               /* ??? The proposal is that other letters (such as 'h') stand
1890                  for different variants of transaction cloning, such as
1891                  compiling directly for hardware transaction support.  But
1892                  they still should all be transactional clones of some sort
1893                  so go ahead and call them that.  */
1894             case 't':
1895               return d_make_comp (di, DEMANGLE_COMPONENT_TRANSACTION_CLONE,
1896                                   d_encoding (di, 0), NULL);
1897             }
1898
1899         case 'r':
1900           return d_java_resource (di);
1901
1902         default:
1903           return NULL;
1904         }
1905     }
1906   else
1907     return NULL;
1908 }
1909
1910 /* <call-offset> ::= h <nv-offset> _
1911                  ::= v <v-offset> _
1912
1913    <nv-offset> ::= <(offset) number>
1914
1915    <v-offset> ::= <(offset) number> _ <(virtual offset) number>
1916
1917    The C parameter, if not '\0', is a character we just read which is
1918    the start of the <call-offset>.
1919
1920    We don't display the offset information anywhere.  FIXME: We should
1921    display it in verbose mode.  */
1922
1923 static int
1924 d_call_offset (struct d_info *di, int c)
1925 {
1926   if (c == '\0')
1927     c = d_next_char (di);
1928
1929   if (c == 'h')
1930     d_number (di);
1931   else if (c == 'v')
1932     {
1933       d_number (di);
1934       if (! d_check_char (di, '_'))
1935         return 0;
1936       d_number (di);
1937     }
1938   else
1939     return 0;
1940
1941   if (! d_check_char (di, '_'))
1942     return 0;
1943
1944   return 1;
1945 }
1946
1947 /* <ctor-dtor-name> ::= C1
1948                     ::= C2
1949                     ::= C3
1950                     ::= D0
1951                     ::= D1
1952                     ::= D2
1953 */
1954
1955 static struct demangle_component *
1956 d_ctor_dtor_name (struct d_info *di)
1957 {
1958   if (di->last_name != NULL)
1959     {
1960       if (di->last_name->type == DEMANGLE_COMPONENT_NAME)
1961         di->expansion += di->last_name->u.s_name.len;
1962       else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD)
1963         di->expansion += di->last_name->u.s_string.len;
1964     }
1965   switch (d_peek_char (di))
1966     {
1967     case 'C':
1968       {
1969         enum gnu_v3_ctor_kinds kind;
1970
1971         switch (d_peek_next_char (di))
1972           {
1973           case '1':
1974             kind = gnu_v3_complete_object_ctor;
1975             break;
1976           case '2':
1977             kind = gnu_v3_base_object_ctor;
1978             break;
1979           case '3':
1980             kind = gnu_v3_complete_object_allocating_ctor;
1981             break;
1982           case '5':
1983             kind = gnu_v3_object_ctor_group;
1984             break;
1985           default:
1986             return NULL;
1987           }
1988         d_advance (di, 2);
1989         return d_make_ctor (di, kind, di->last_name);
1990       }
1991
1992     case 'D':
1993       {
1994         enum gnu_v3_dtor_kinds kind;
1995
1996         switch (d_peek_next_char (di))
1997           {
1998           case '0':
1999             kind = gnu_v3_deleting_dtor;
2000             break;
2001           case '1':
2002             kind = gnu_v3_complete_object_dtor;
2003             break;
2004           case '2':
2005             kind = gnu_v3_base_object_dtor;
2006             break;
2007           case '5':
2008             kind = gnu_v3_object_dtor_group;
2009             break;
2010           default:
2011             return NULL;
2012           }
2013         d_advance (di, 2);
2014         return d_make_dtor (di, kind, di->last_name);
2015       }
2016
2017     default:
2018       return NULL;
2019     }
2020 }
2021
2022 /* <type> ::= <builtin-type>
2023           ::= <function-type>
2024           ::= <class-enum-type>
2025           ::= <array-type>
2026           ::= <pointer-to-member-type>
2027           ::= <template-param>
2028           ::= <template-template-param> <template-args>
2029           ::= <substitution>
2030           ::= <CV-qualifiers> <type>
2031           ::= P <type>
2032           ::= R <type>
2033           ::= O <type> (C++0x)
2034           ::= C <type>
2035           ::= G <type>
2036           ::= U <source-name> <type>
2037
2038    <builtin-type> ::= various one letter codes
2039                   ::= u <source-name>
2040 */
2041
2042 CP_STATIC_IF_GLIBCPP_V3
2043 const struct demangle_builtin_type_info
2044 cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT] =
2045 {
2046   /* a */ { NL ("signed char"), NL ("signed char"),     D_PRINT_DEFAULT },
2047   /* b */ { NL ("bool"),        NL ("boolean"),         D_PRINT_BOOL },
2048   /* c */ { NL ("char"),        NL ("byte"),            D_PRINT_DEFAULT },
2049   /* d */ { NL ("double"),      NL ("double"),          D_PRINT_FLOAT },
2050   /* e */ { NL ("long double"), NL ("long double"),     D_PRINT_FLOAT },
2051   /* f */ { NL ("float"),       NL ("float"),           D_PRINT_FLOAT },
2052   /* g */ { NL ("__float128"),  NL ("__float128"),      D_PRINT_FLOAT },
2053   /* h */ { NL ("unsigned char"), NL ("unsigned char"), D_PRINT_DEFAULT },
2054   /* i */ { NL ("int"),         NL ("int"),             D_PRINT_INT },
2055   /* j */ { NL ("unsigned int"), NL ("unsigned"),       D_PRINT_UNSIGNED },
2056   /* k */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
2057   /* l */ { NL ("long"),        NL ("long"),            D_PRINT_LONG },
2058   /* m */ { NL ("unsigned long"), NL ("unsigned long"), D_PRINT_UNSIGNED_LONG },
2059   /* n */ { NL ("__int128"),    NL ("__int128"),        D_PRINT_DEFAULT },
2060   /* o */ { NL ("unsigned __int128"), NL ("unsigned __int128"),
2061             D_PRINT_DEFAULT },
2062   /* p */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
2063   /* q */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
2064   /* r */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
2065   /* s */ { NL ("short"),       NL ("short"),           D_PRINT_DEFAULT },
2066   /* t */ { NL ("unsigned short"), NL ("unsigned short"), D_PRINT_DEFAULT },
2067   /* u */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
2068   /* v */ { NL ("void"),        NL ("void"),            D_PRINT_VOID },
2069   /* w */ { NL ("wchar_t"),     NL ("char"),            D_PRINT_DEFAULT },
2070   /* x */ { NL ("long long"),   NL ("long"),            D_PRINT_LONG_LONG },
2071   /* y */ { NL ("unsigned long long"), NL ("unsigned long long"),
2072             D_PRINT_UNSIGNED_LONG_LONG },
2073   /* z */ { NL ("..."),         NL ("..."),             D_PRINT_DEFAULT },
2074   /* 26 */ { NL ("decimal32"),  NL ("decimal32"),       D_PRINT_DEFAULT },
2075   /* 27 */ { NL ("decimal64"),  NL ("decimal64"),       D_PRINT_DEFAULT },
2076   /* 28 */ { NL ("decimal128"), NL ("decimal128"),      D_PRINT_DEFAULT },
2077   /* 29 */ { NL ("half"),       NL ("half"),            D_PRINT_FLOAT },
2078   /* 30 */ { NL ("char16_t"),   NL ("char16_t"),        D_PRINT_DEFAULT },
2079   /* 31 */ { NL ("char32_t"),   NL ("char32_t"),        D_PRINT_DEFAULT },
2080   /* 32 */ { NL ("decltype(nullptr)"),  NL ("decltype(nullptr)"),
2081              D_PRINT_DEFAULT },
2082 };
2083
2084 CP_STATIC_IF_GLIBCPP_V3
2085 struct demangle_component *
2086 cplus_demangle_type (struct d_info *di)
2087 {
2088   char peek;
2089   struct demangle_component *ret;
2090   int can_subst;
2091
2092   /* The ABI specifies that when CV-qualifiers are used, the base type
2093      is substitutable, and the fully qualified type is substitutable,
2094      but the base type with a strict subset of the CV-qualifiers is
2095      not substitutable.  The natural recursive implementation of the
2096      CV-qualifiers would cause subsets to be substitutable, so instead
2097      we pull them all off now.
2098
2099      FIXME: The ABI says that order-insensitive vendor qualifiers
2100      should be handled in the same way, but we have no way to tell
2101      which vendor qualifiers are order-insensitive and which are
2102      order-sensitive.  So we just assume that they are all
2103      order-sensitive.  g++ 3.4 supports only one vendor qualifier,
2104      __vector, and it treats it as order-sensitive when mangling
2105      names.  */
2106
2107   peek = d_peek_char (di);
2108   if (peek == 'r' || peek == 'V' || peek == 'K')
2109     {
2110       struct demangle_component **pret;
2111
2112       pret = d_cv_qualifiers (di, &ret, 0);
2113       if (pret == NULL)
2114         return NULL;
2115       *pret = cplus_demangle_type (di);
2116       if (! *pret || ! d_add_substitution (di, ret))
2117         return NULL;
2118       return ret;
2119     }
2120
2121   can_subst = 1;
2122
2123   switch (peek)
2124     {
2125     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
2126     case 'h': case 'i': case 'j':           case 'l': case 'm': case 'n':
2127     case 'o':                               case 's': case 't':
2128     case 'v': case 'w': case 'x': case 'y': case 'z':
2129       ret = d_make_builtin_type (di,
2130                                  &cplus_demangle_builtin_types[peek - 'a']);
2131       di->expansion += ret->u.s_builtin.type->len;
2132       can_subst = 0;
2133       d_advance (di, 1);
2134       break;
2135
2136     case 'u':
2137       d_advance (di, 1);
2138       ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE,
2139                          d_source_name (di), NULL);
2140       break;
2141
2142     case 'F':
2143       ret = d_function_type (di);
2144       break;
2145
2146     case '0': case '1': case '2': case '3': case '4':
2147     case '5': case '6': case '7': case '8': case '9':
2148     case 'N':
2149     case 'Z':
2150       ret = d_class_enum_type (di);
2151       break;
2152
2153     case 'A':
2154       ret = d_array_type (di);
2155       break;
2156
2157     case 'M':
2158       ret = d_pointer_to_member_type (di);
2159       break;
2160
2161     case 'T':
2162       ret = d_template_param (di);
2163       if (d_peek_char (di) == 'I')
2164         {
2165           /* This is <template-template-param> <template-args>.  The
2166              <template-template-param> part is a substitution
2167              candidate.  */
2168           if (! d_add_substitution (di, ret))
2169             return NULL;
2170           ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
2171                              d_template_args (di));
2172         }
2173       break;
2174
2175     case 'S':
2176       /* If this is a special substitution, then it is the start of
2177          <class-enum-type>.  */
2178       {
2179         char peek_next;
2180
2181         peek_next = d_peek_next_char (di);
2182         if (IS_DIGIT (peek_next)
2183             || peek_next == '_'
2184             || IS_UPPER (peek_next))
2185           {
2186             ret = d_substitution (di, 0);
2187             /* The substituted name may have been a template name and
2188                may be followed by tepmlate args.  */
2189             if (d_peek_char (di) == 'I')
2190               ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
2191                                  d_template_args (di));
2192             else
2193               can_subst = 0;
2194           }
2195         else
2196           {
2197             ret = d_class_enum_type (di);
2198             /* If the substitution was a complete type, then it is not
2199                a new substitution candidate.  However, if the
2200                substitution was followed by template arguments, then
2201                the whole thing is a substitution candidate.  */
2202             if (ret != NULL && ret->type == DEMANGLE_COMPONENT_SUB_STD)
2203               can_subst = 0;
2204           }
2205       }
2206       break;
2207
2208     case 'O':
2209       d_advance (di, 1);
2210       ret = d_make_comp (di, DEMANGLE_COMPONENT_RVALUE_REFERENCE,
2211                          cplus_demangle_type (di), NULL);
2212       break;
2213
2214     case 'P':
2215       d_advance (di, 1);
2216       ret = d_make_comp (di, DEMANGLE_COMPONENT_POINTER,
2217                          cplus_demangle_type (di), NULL);
2218       break;
2219
2220     case 'R':
2221       d_advance (di, 1);
2222       ret = d_make_comp (di, DEMANGLE_COMPONENT_REFERENCE,
2223                          cplus_demangle_type (di), NULL);
2224       break;
2225
2226     case 'C':
2227       d_advance (di, 1);
2228       ret = d_make_comp (di, DEMANGLE_COMPONENT_COMPLEX,
2229                          cplus_demangle_type (di), NULL);
2230       break;
2231
2232     case 'G':
2233       d_advance (di, 1);
2234       ret = d_make_comp (di, DEMANGLE_COMPONENT_IMAGINARY,
2235                          cplus_demangle_type (di), NULL);
2236       break;
2237
2238     case 'U':
2239       d_advance (di, 1);
2240       ret = d_source_name (di);
2241       ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
2242                          cplus_demangle_type (di), ret);
2243       break;
2244
2245     case 'D':
2246       can_subst = 0;
2247       d_advance (di, 1);
2248       peek = d_next_char (di);
2249       switch (peek)
2250         {
2251         case 'T':
2252         case 't':
2253           /* decltype (expression) */
2254           ret = d_make_comp (di, DEMANGLE_COMPONENT_DECLTYPE,
2255                              d_expression (di), NULL);
2256           if (ret && d_next_char (di) != 'E')
2257             ret = NULL;
2258           can_subst = 1;
2259           break;
2260           
2261         case 'p':
2262           /* Pack expansion.  */
2263           ret = d_make_comp (di, DEMANGLE_COMPONENT_PACK_EXPANSION,
2264                              cplus_demangle_type (di), NULL);
2265           can_subst = 1;
2266           break;
2267           
2268         case 'f':
2269           /* 32-bit decimal floating point */
2270           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[26]);
2271           di->expansion += ret->u.s_builtin.type->len;
2272           break;
2273         case 'd':
2274           /* 64-bit DFP */
2275           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[27]);
2276           di->expansion += ret->u.s_builtin.type->len;
2277           break;
2278         case 'e':
2279           /* 128-bit DFP */
2280           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[28]);
2281           di->expansion += ret->u.s_builtin.type->len;
2282           break;
2283         case 'h':
2284           /* 16-bit half-precision FP */
2285           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[29]);
2286           di->expansion += ret->u.s_builtin.type->len;
2287           break;
2288         case 's':
2289           /* char16_t */
2290           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[30]);
2291           di->expansion += ret->u.s_builtin.type->len;
2292           break;
2293         case 'i':
2294           /* char32_t */
2295           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[31]);
2296           di->expansion += ret->u.s_builtin.type->len;
2297           break;
2298
2299         case 'F':
2300           /* Fixed point types. DF<int bits><length><fract bits><sat>  */
2301           ret = d_make_empty (di);
2302           ret->type = DEMANGLE_COMPONENT_FIXED_TYPE;
2303           if ((ret->u.s_fixed.accum = IS_DIGIT (d_peek_char (di))))
2304             /* For demangling we don't care about the bits.  */
2305             d_number (di);
2306           ret->u.s_fixed.length = cplus_demangle_type (di);
2307           if (ret->u.s_fixed.length == NULL)
2308             return NULL;
2309           d_number (di);
2310           peek = d_next_char (di);
2311           ret->u.s_fixed.sat = (peek == 's');
2312           break;
2313
2314         case 'v':
2315           ret = d_vector_type (di);
2316           can_subst = 1;
2317           break;
2318
2319         case 'n':
2320           /* decltype(nullptr) */
2321           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[32]);
2322           di->expansion += ret->u.s_builtin.type->len;
2323           break;
2324
2325         default:
2326           return NULL;
2327         }
2328       break;
2329
2330     default:
2331       return NULL;
2332     }
2333
2334   if (can_subst)
2335     {
2336       if (! d_add_substitution (di, ret))
2337         return NULL;
2338     }
2339
2340   return ret;
2341 }
2342
2343 /* <CV-qualifiers> ::= [r] [V] [K]  */
2344
2345 static struct demangle_component **
2346 d_cv_qualifiers (struct d_info *di,
2347                  struct demangle_component **pret, int member_fn)
2348 {
2349   struct demangle_component **pstart;
2350   char peek;
2351
2352   pstart = pret;
2353   peek = d_peek_char (di);
2354   while (peek == 'r' || peek == 'V' || peek == 'K')
2355     {
2356       enum demangle_component_type t;
2357
2358       d_advance (di, 1);
2359       if (peek == 'r')
2360         {
2361           t = (member_fn
2362                ? DEMANGLE_COMPONENT_RESTRICT_THIS
2363                : DEMANGLE_COMPONENT_RESTRICT);
2364           di->expansion += sizeof "restrict";
2365         }
2366       else if (peek == 'V')
2367         {
2368           t = (member_fn
2369                ? DEMANGLE_COMPONENT_VOLATILE_THIS
2370                : DEMANGLE_COMPONENT_VOLATILE);
2371           di->expansion += sizeof "volatile";
2372         }
2373       else
2374         {
2375           t = (member_fn
2376                ? DEMANGLE_COMPONENT_CONST_THIS
2377                : DEMANGLE_COMPONENT_CONST);
2378           di->expansion += sizeof "const";
2379         }
2380
2381       *pret = d_make_comp (di, t, NULL, NULL);
2382       if (*pret == NULL)
2383         return NULL;
2384       pret = &d_left (*pret);
2385
2386       peek = d_peek_char (di);
2387     }
2388
2389   if (!member_fn && peek == 'F')
2390     {
2391       while (pstart != pret)
2392         {
2393           switch ((*pstart)->type)
2394             {
2395             case DEMANGLE_COMPONENT_RESTRICT:
2396               (*pstart)->type = DEMANGLE_COMPONENT_RESTRICT_THIS;
2397               break;
2398             case DEMANGLE_COMPONENT_VOLATILE:
2399               (*pstart)->type = DEMANGLE_COMPONENT_VOLATILE_THIS;
2400               break;
2401             case DEMANGLE_COMPONENT_CONST:
2402               (*pstart)->type = DEMANGLE_COMPONENT_CONST_THIS;
2403               break;
2404             default:
2405               break;
2406             }
2407           pstart = &d_left (*pstart);
2408         }
2409     }
2410
2411   return pret;
2412 }
2413
2414 /* <function-type> ::= F [Y] <bare-function-type> E  */
2415
2416 static struct demangle_component *
2417 d_function_type (struct d_info *di)
2418 {
2419   struct demangle_component *ret;
2420
2421   if (! d_check_char (di, 'F'))
2422     return NULL;
2423   if (d_peek_char (di) == 'Y')
2424     {
2425       /* Function has C linkage.  We don't print this information.
2426          FIXME: We should print it in verbose mode.  */
2427       d_advance (di, 1);
2428     }
2429   ret = d_bare_function_type (di, 1);
2430   if (! d_check_char (di, 'E'))
2431     return NULL;
2432   return ret;
2433 }
2434
2435 /* <type>+ */
2436
2437 static struct demangle_component *
2438 d_parmlist (struct d_info *di)
2439 {
2440   struct demangle_component *tl;
2441   struct demangle_component **ptl;
2442
2443   tl = NULL;
2444   ptl = &tl;
2445   while (1)
2446     {
2447       struct demangle_component *type;
2448
2449       char peek = d_peek_char (di);
2450       if (peek == '\0' || peek == 'E' || peek == '.')
2451         break;
2452       type = cplus_demangle_type (di);
2453       if (type == NULL)
2454         return NULL;
2455       *ptl = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, type, NULL);
2456       if (*ptl == NULL)
2457         return NULL;
2458       ptl = &d_right (*ptl);
2459     }
2460
2461   /* There should be at least one parameter type besides the optional
2462      return type.  A function which takes no arguments will have a
2463      single parameter type void.  */
2464   if (tl == NULL)
2465     return NULL;
2466
2467   /* If we have a single parameter type void, omit it.  */
2468   if (d_right (tl) == NULL
2469       && d_left (tl)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
2470       && d_left (tl)->u.s_builtin.type->print == D_PRINT_VOID)
2471     {
2472       di->expansion -= d_left (tl)->u.s_builtin.type->len;
2473       d_left (tl) = NULL;
2474     }
2475
2476   return tl;
2477 }
2478
2479 /* <bare-function-type> ::= [J]<type>+  */
2480
2481 static struct demangle_component *
2482 d_bare_function_type (struct d_info *di, int has_return_type)
2483 {
2484   struct demangle_component *return_type;
2485   struct demangle_component *tl;
2486   char peek;
2487
2488   /* Detect special qualifier indicating that the first argument
2489      is the return type.  */
2490   peek = d_peek_char (di);
2491   if (peek == 'J')
2492     {
2493       d_advance (di, 1);
2494       has_return_type = 1;
2495     }
2496
2497   if (has_return_type)
2498     {
2499       return_type = cplus_demangle_type (di);
2500       if (return_type == NULL)
2501         return NULL;
2502     }
2503   else
2504     return_type = NULL;
2505
2506   tl = d_parmlist (di);
2507   if (tl == NULL)
2508     return NULL;
2509
2510   return d_make_comp (di, DEMANGLE_COMPONENT_FUNCTION_TYPE,
2511                       return_type, tl);
2512 }
2513
2514 /* <class-enum-type> ::= <name>  */
2515
2516 static struct demangle_component *
2517 d_class_enum_type (struct d_info *di)
2518 {
2519   return d_name (di);
2520 }
2521
2522 /* <array-type> ::= A <(positive dimension) number> _ <(element) type>
2523                 ::= A [<(dimension) expression>] _ <(element) type>
2524 */
2525
2526 static struct demangle_component *
2527 d_array_type (struct d_info *di)
2528 {
2529   char peek;
2530   struct demangle_component *dim;
2531
2532   if (! d_check_char (di, 'A'))
2533     return NULL;
2534
2535   peek = d_peek_char (di);
2536   if (peek == '_')
2537     dim = NULL;
2538   else if (IS_DIGIT (peek))
2539     {
2540       const char *s;
2541
2542       s = d_str (di);
2543       do
2544         {
2545           d_advance (di, 1);
2546           peek = d_peek_char (di);
2547         }
2548       while (IS_DIGIT (peek));
2549       dim = d_make_name (di, s, d_str (di) - s);
2550       if (dim == NULL)
2551         return NULL;
2552     }
2553   else
2554     {
2555       dim = d_expression (di);
2556       if (dim == NULL)
2557         return NULL;
2558     }
2559
2560   if (! d_check_char (di, '_'))
2561     return NULL;
2562
2563   return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim,
2564                       cplus_demangle_type (di));
2565 }
2566
2567 /* <vector-type> ::= Dv <number> _ <type>
2568                  ::= Dv _ <expression> _ <type> */
2569
2570 static struct demangle_component *
2571 d_vector_type (struct d_info *di)
2572 {
2573   char peek;
2574   struct demangle_component *dim;
2575
2576   peek = d_peek_char (di);
2577   if (peek == '_')
2578     {
2579       d_advance (di, 1);
2580       dim = d_expression (di);
2581     }
2582   else
2583     dim = d_number_component (di);
2584
2585   if (dim == NULL)
2586     return NULL;
2587
2588   if (! d_check_char (di, '_'))
2589     return NULL;
2590
2591   return d_make_comp (di, DEMANGLE_COMPONENT_VECTOR_TYPE, dim,
2592                       cplus_demangle_type (di));
2593 }
2594
2595 /* <pointer-to-member-type> ::= M <(class) type> <(member) type>  */
2596
2597 static struct demangle_component *
2598 d_pointer_to_member_type (struct d_info *di)
2599 {
2600   struct demangle_component *cl;
2601   struct demangle_component *mem;
2602   struct demangle_component **pmem;
2603
2604   if (! d_check_char (di, 'M'))
2605     return NULL;
2606
2607   cl = cplus_demangle_type (di);
2608
2609   /* The ABI specifies that any type can be a substitution source, and
2610      that M is followed by two types, and that when a CV-qualified
2611      type is seen both the base type and the CV-qualified types are
2612      substitution sources.  The ABI also specifies that for a pointer
2613      to a CV-qualified member function, the qualifiers are attached to
2614      the second type.  Given the grammar, a plain reading of the ABI
2615      suggests that both the CV-qualified member function and the
2616      non-qualified member function are substitution sources.  However,
2617      g++ does not work that way.  g++ treats only the CV-qualified
2618      member function as a substitution source.  FIXME.  So to work
2619      with g++, we need to pull off the CV-qualifiers here, in order to
2620      avoid calling add_substitution() in cplus_demangle_type().  But
2621      for a CV-qualified member which is not a function, g++ does
2622      follow the ABI, so we need to handle that case here by calling
2623      d_add_substitution ourselves.  */
2624
2625   pmem = d_cv_qualifiers (di, &mem, 1);
2626   if (pmem == NULL)
2627     return NULL;
2628   *pmem = cplus_demangle_type (di);
2629   if (*pmem == NULL)
2630     return NULL;
2631
2632   if (pmem != &mem && (*pmem)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
2633     {
2634       if (! d_add_substitution (di, mem))
2635         return NULL;
2636     }
2637
2638   return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem);
2639 }
2640
2641 /* <non-negative number> _ */
2642
2643 static long
2644 d_compact_number (struct d_info *di)
2645 {
2646   long num;
2647   if (d_peek_char (di) == '_')
2648     num = 0;
2649   else if (d_peek_char (di) == 'n')
2650     return -1;
2651   else
2652     num = d_number (di) + 1;
2653
2654   if (! d_check_char (di, '_'))
2655     return -1;
2656   return num;
2657 }
2658
2659 /* <template-param> ::= T_
2660                     ::= T <(parameter-2 non-negative) number> _
2661 */
2662
2663 static struct demangle_component *
2664 d_template_param (struct d_info *di)
2665 {
2666   long param;
2667
2668   if (! d_check_char (di, 'T'))
2669     return NULL;
2670
2671   param = d_compact_number (di);
2672   if (param < 0)
2673     return NULL;
2674
2675   ++di->did_subs;
2676
2677   return d_make_template_param (di, param);
2678 }
2679
2680 /* <template-args> ::= I <template-arg>+ E  */
2681
2682 static struct demangle_component *
2683 d_template_args (struct d_info *di)
2684 {
2685   struct demangle_component *hold_last_name;
2686   struct demangle_component *al;
2687   struct demangle_component **pal;
2688
2689   /* Preserve the last name we saw--don't let the template arguments
2690      clobber it, as that would give us the wrong name for a subsequent
2691      constructor or destructor.  */
2692   hold_last_name = di->last_name;
2693
2694   if (d_peek_char (di) != 'I'
2695       && d_peek_char (di) != 'J')
2696     return NULL;
2697   d_advance (di, 1);
2698
2699   if (d_peek_char (di) == 'E')
2700     {
2701       /* An argument pack can be empty.  */
2702       d_advance (di, 1);
2703       return d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, NULL, NULL);
2704     }
2705
2706   al = NULL;
2707   pal = &al;
2708   while (1)
2709     {
2710       struct demangle_component *a;
2711
2712       a = d_template_arg (di);
2713       if (a == NULL)
2714         return NULL;
2715
2716       *pal = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, a, NULL);
2717       if (*pal == NULL)
2718         return NULL;
2719       pal = &d_right (*pal);
2720
2721       if (d_peek_char (di) == 'E')
2722         {
2723           d_advance (di, 1);
2724           break;
2725         }
2726     }
2727
2728   di->last_name = hold_last_name;
2729
2730   return al;
2731 }
2732
2733 /* <template-arg> ::= <type>
2734                   ::= X <expression> E
2735                   ::= <expr-primary>
2736 */
2737
2738 static struct demangle_component *
2739 d_template_arg (struct d_info *di)
2740 {
2741   struct demangle_component *ret;
2742
2743   switch (d_peek_char (di))
2744     {
2745     case 'X':
2746       d_advance (di, 1);
2747       ret = d_expression (di);
2748       if (! d_check_char (di, 'E'))
2749         return NULL;
2750       return ret;
2751
2752     case 'L':
2753       return d_expr_primary (di);
2754
2755     case 'I':
2756     case 'J':
2757       /* An argument pack.  */
2758       return d_template_args (di);
2759
2760     default:
2761       return cplus_demangle_type (di);
2762     }
2763 }
2764
2765 /* Parse a sequence of expressions until we hit the terminator
2766    character.  */
2767
2768 static struct demangle_component *
2769 d_exprlist (struct d_info *di, char terminator)
2770 {
2771   struct demangle_component *list = NULL;
2772   struct demangle_component **p = &list;
2773
2774   if (d_peek_char (di) == terminator)
2775     {
2776       d_advance (di, 1);
2777       return d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, NULL, NULL);
2778     }
2779
2780   while (1)
2781     {
2782       struct demangle_component *arg = d_expression (di);
2783       if (arg == NULL)
2784         return NULL;
2785
2786       *p = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, arg, NULL);
2787       if (*p == NULL)
2788         return NULL;
2789       p = &d_right (*p);
2790
2791       if (d_peek_char (di) == terminator)
2792         {
2793           d_advance (di, 1);
2794           break;
2795         }
2796     }
2797
2798   return list;
2799 }
2800
2801 /* <expression> ::= <(unary) operator-name> <expression>
2802                 ::= <(binary) operator-name> <expression> <expression>
2803                 ::= <(trinary) operator-name> <expression> <expression> <expression>
2804                 ::= cl <expression>+ E
2805                 ::= st <type>
2806                 ::= <template-param>
2807                 ::= sr <type> <unqualified-name>
2808                 ::= sr <type> <unqualified-name> <template-args>
2809                 ::= <expr-primary>
2810 */
2811
2812 static struct demangle_component *
2813 d_expression (struct d_info *di)
2814 {
2815   char peek;
2816
2817   peek = d_peek_char (di);
2818   if (peek == 'L')
2819     return d_expr_primary (di);
2820   else if (peek == 'T')
2821     return d_template_param (di);
2822   else if (peek == 's' && d_peek_next_char (di) == 'r')
2823     {
2824       struct demangle_component *type;
2825       struct demangle_component *name;
2826
2827       d_advance (di, 2);
2828       type = cplus_demangle_type (di);
2829       name = d_unqualified_name (di);
2830       if (d_peek_char (di) != 'I')
2831         return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, name);
2832       else
2833         return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type,
2834                             d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name,
2835                                          d_template_args (di)));
2836     }
2837   else if (peek == 's' && d_peek_next_char (di) == 'p')
2838     {
2839       d_advance (di, 2);
2840       return d_make_comp (di, DEMANGLE_COMPONENT_PACK_EXPANSION,
2841                           d_expression (di), NULL);
2842     }
2843   else if (peek == 'f' && d_peek_next_char (di) == 'p')
2844     {
2845       /* Function parameter used in a late-specified return type.  */
2846       int index;
2847       d_advance (di, 2);
2848       if (d_peek_char (di) == 'T')
2849         {
2850           /* 'this' parameter.  */
2851           d_advance (di, 1);
2852           index = 0;
2853         }
2854       else
2855         {
2856           index = d_compact_number (di) + 1;
2857           if (index == 0)
2858             return NULL;
2859         }
2860       return d_make_function_param (di, index);
2861     }
2862   else if (IS_DIGIT (peek)
2863            || (peek == 'o' && d_peek_next_char (di) == 'n'))
2864     {
2865       /* We can get an unqualified name as an expression in the case of
2866          a dependent function call, i.e. decltype(f(t)).  */
2867       struct demangle_component *name;
2868
2869       if (peek == 'o')
2870         /* operator-function-id, i.e. operator+(t).  */
2871         d_advance (di, 2);
2872
2873       name = d_unqualified_name (di);
2874       if (name == NULL)
2875         return NULL;
2876       if (d_peek_char (di) == 'I')
2877         return d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name,
2878                             d_template_args (di));
2879       else
2880         return name;
2881     }
2882   else if ((peek == 'i' || peek == 't')
2883            && d_peek_next_char (di) == 'l')
2884     {
2885       /* Brace-enclosed initializer list, untyped or typed.  */
2886       struct demangle_component *type = NULL;
2887       if (peek == 't')
2888         type = cplus_demangle_type (di);
2889       d_advance (di, 2);
2890       return d_make_comp (di, DEMANGLE_COMPONENT_INITIALIZER_LIST,
2891                           type, d_exprlist (di, 'E'));
2892     }
2893   else
2894     {
2895       struct demangle_component *op;
2896       const char *code = NULL;
2897       int args;
2898
2899       op = d_operator_name (di);
2900       if (op == NULL)
2901         return NULL;
2902
2903       if (op->type == DEMANGLE_COMPONENT_OPERATOR)
2904         {
2905           code = op->u.s_operator.op->code;
2906           di->expansion += op->u.s_operator.op->len - 2;
2907           if (strcmp (code, "st") == 0)
2908             return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
2909                                 cplus_demangle_type (di));
2910         }
2911
2912       switch (op->type)
2913         {
2914         default:
2915           return NULL;
2916         case DEMANGLE_COMPONENT_OPERATOR:
2917           args = op->u.s_operator.op->args;
2918           break;
2919         case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
2920           args = op->u.s_extended_operator.args;
2921           break;
2922         case DEMANGLE_COMPONENT_CAST:
2923           args = 1;
2924           break;
2925         }
2926
2927       switch (args)
2928         {
2929         case 0:
2930           return d_make_comp (di, DEMANGLE_COMPONENT_NULLARY, op, NULL);
2931
2932         case 1:
2933           {
2934             struct demangle_component *operand;
2935             int suffix = 0;
2936
2937             if (code && (code[0] == 'p' || code[0] == 'm')
2938                 && code[1] == code[0])
2939               /* pp_ and mm_ are the prefix variants.  */
2940               suffix = !d_check_char (di, '_');
2941
2942             if (op->type == DEMANGLE_COMPONENT_CAST
2943                 && d_check_char (di, '_'))
2944               operand = d_exprlist (di, 'E');
2945             else
2946               operand = d_expression (di);
2947
2948             if (suffix)
2949               /* Indicate the suffix variant for d_print_comp.  */
2950               return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
2951                                   d_make_comp (di,
2952                                                DEMANGLE_COMPONENT_BINARY_ARGS,
2953                                                operand, operand));
2954             else
2955               return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
2956                                   operand);
2957           }
2958         case 2:
2959           {
2960             struct demangle_component *left;
2961             struct demangle_component *right;
2962
2963             left = d_expression (di);
2964             if (!strcmp (code, "cl"))
2965               right = d_exprlist (di, 'E');
2966             else if (!strcmp (code, "dt") || !strcmp (code, "pt"))
2967               {
2968                 right = d_unqualified_name (di);
2969                 if (d_peek_char (di) == 'I')
2970                   right = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE,
2971                                        right, d_template_args (di));
2972               }
2973             else
2974               right = d_expression (di);
2975
2976             return d_make_comp (di, DEMANGLE_COMPONENT_BINARY, op,
2977                                 d_make_comp (di,
2978                                              DEMANGLE_COMPONENT_BINARY_ARGS,
2979                                              left, right));
2980           }
2981         case 3:
2982           {
2983             struct demangle_component *first;
2984             struct demangle_component *second;
2985             struct demangle_component *third;
2986
2987             if (!strcmp (code, "qu"))
2988               {
2989                 /* ?: expression.  */
2990                 first = d_expression (di);
2991                 second = d_expression (di);
2992                 third = d_expression (di);
2993               }
2994             else if (code[0] == 'n')
2995               {
2996                 /* new-expression.  */
2997                 if (code[1] != 'w' && code[1] != 'a')
2998                   return NULL;
2999                 first = d_exprlist (di, '_');
3000                 second = cplus_demangle_type (di);
3001                 if (d_peek_char (di) == 'E')
3002                   {
3003                     d_advance (di, 1);
3004                     third = NULL;
3005                   }
3006                 else if (d_peek_char (di) == 'p'
3007                          && d_peek_next_char (di) == 'i')
3008                   {
3009                     /* Parenthesized initializer.  */
3010                     d_advance (di, 2);
3011                     third = d_exprlist (di, 'E');
3012                   }
3013                 else if (d_peek_char (di) == 'i'
3014                          && d_peek_next_char (di) == 'l')
3015                   /* initializer-list.  */
3016                   third = d_expression (di);
3017                 else
3018                   return NULL;
3019               }
3020             else
3021               return NULL;
3022             return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op,
3023                                 d_make_comp (di,
3024                                              DEMANGLE_COMPONENT_TRINARY_ARG1,
3025                                              first,
3026                                              d_make_comp (di,
3027                                                           DEMANGLE_COMPONENT_TRINARY_ARG2,
3028                                                           second, third)));
3029           }
3030         default:
3031           return NULL;
3032         }
3033     }
3034 }
3035
3036 /* <expr-primary> ::= L <type> <(value) number> E
3037                   ::= L <type> <(value) float> E
3038                   ::= L <mangled-name> E
3039 */
3040
3041 static struct demangle_component *
3042 d_expr_primary (struct d_info *di)
3043 {
3044   struct demangle_component *ret;
3045
3046   if (! d_check_char (di, 'L'))
3047     return NULL;
3048   if (d_peek_char (di) == '_'
3049       /* Workaround for G++ bug; see comment in write_template_arg.  */
3050       || d_peek_char (di) == 'Z')
3051     ret = cplus_demangle_mangled_name (di, 0);
3052   else
3053     {
3054       struct demangle_component *type;
3055       enum demangle_component_type t;
3056       const char *s;
3057
3058       type = cplus_demangle_type (di);
3059       if (type == NULL)
3060         return NULL;
3061
3062       /* If we have a type we know how to print, we aren't going to
3063          print the type name itself.  */
3064       if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
3065           && type->u.s_builtin.type->print != D_PRINT_DEFAULT)
3066         di->expansion -= type->u.s_builtin.type->len;
3067
3068       /* Rather than try to interpret the literal value, we just
3069          collect it as a string.  Note that it's possible to have a
3070          floating point literal here.  The ABI specifies that the
3071          format of such literals is machine independent.  That's fine,
3072          but what's not fine is that versions of g++ up to 3.2 with
3073          -fabi-version=1 used upper case letters in the hex constant,
3074          and dumped out gcc's internal representation.  That makes it
3075          hard to tell where the constant ends, and hard to dump the
3076          constant in any readable form anyhow.  We don't attempt to
3077          handle these cases.  */
3078
3079       t = DEMANGLE_COMPONENT_LITERAL;
3080       if (d_peek_char (di) == 'n')
3081         {
3082           t = DEMANGLE_COMPONENT_LITERAL_NEG;
3083           d_advance (di, 1);
3084         }
3085       s = d_str (di);
3086       while (d_peek_char (di) != 'E')
3087         {
3088           if (d_peek_char (di) == '\0')
3089             return NULL;
3090           d_advance (di, 1);
3091         }
3092       ret = d_make_comp (di, t, type, d_make_name (di, s, d_str (di) - s));
3093     }
3094   if (! d_check_char (di, 'E'))
3095     return NULL;
3096   return ret;
3097 }
3098
3099 /* <local-name> ::= Z <(function) encoding> E <(entity) name> [<discriminator>]
3100                 ::= Z <(function) encoding> E s [<discriminator>]
3101 */
3102
3103 static struct demangle_component *
3104 d_local_name (struct d_info *di)
3105 {
3106   struct demangle_component *function;
3107
3108   if (! d_check_char (di, 'Z'))
3109     return NULL;
3110
3111   function = d_encoding (di, 0);
3112
3113   if (! d_check_char (di, 'E'))
3114     return NULL;
3115
3116   if (d_peek_char (di) == 's')
3117     {
3118       d_advance (di, 1);
3119       if (! d_discriminator (di))
3120         return NULL;
3121       return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function,
3122                           d_make_name (di, "string literal",
3123                                        sizeof "string literal" - 1));
3124     }
3125   else
3126     {
3127       struct demangle_component *name;
3128       int num = -1;
3129
3130       if (d_peek_char (di) == 'd')
3131         {
3132           /* Default argument scope: d <number> _.  */
3133           d_advance (di, 1);
3134           num = d_compact_number (di);
3135           if (num < 0)
3136             return NULL;
3137         }
3138
3139       name = d_name (di);
3140       if (name)
3141         switch (name->type)
3142           {
3143             /* Lambdas and unnamed types have internal discriminators.  */
3144           case DEMANGLE_COMPONENT_LAMBDA:
3145           case DEMANGLE_COMPONENT_UNNAMED_TYPE:
3146             break;
3147           default:
3148             if (! d_discriminator (di))
3149               return NULL;
3150           }
3151       if (num >= 0)
3152         name = d_make_default_arg (di, num, name);
3153       return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
3154     }
3155 }
3156
3157 /* <discriminator> ::= _ <(non-negative) number>
3158
3159    We demangle the discriminator, but we don't print it out.  FIXME:
3160    We should print it out in verbose mode.  */
3161
3162 static int
3163 d_discriminator (struct d_info *di)
3164 {
3165   long discrim;
3166
3167   if (d_peek_char (di) != '_')
3168     return 1;
3169   d_advance (di, 1);
3170   discrim = d_number (di);
3171   if (discrim < 0)
3172     return 0;
3173   return 1;
3174 }
3175
3176 /* <closure-type-name> ::= Ul <lambda-sig> E [ <nonnegative number> ] _ */
3177
3178 static struct demangle_component *
3179 d_lambda (struct d_info *di)
3180 {
3181   struct demangle_component *tl;
3182   struct demangle_component *ret;
3183   int num;
3184
3185   if (! d_check_char (di, 'U'))
3186     return NULL;
3187   if (! d_check_char (di, 'l'))
3188     return NULL;
3189
3190   tl = d_parmlist (di);
3191   if (tl == NULL)
3192     return NULL;
3193
3194   if (! d_check_char (di, 'E'))
3195     return NULL;
3196
3197   num = d_compact_number (di);
3198   if (num < 0)
3199     return NULL;
3200
3201   ret = d_make_empty (di);
3202   if (ret)
3203     {
3204       ret->type = DEMANGLE_COMPONENT_LAMBDA;
3205       ret->u.s_unary_num.sub = tl;
3206       ret->u.s_unary_num.num = num;
3207     }
3208
3209   if (! d_add_substitution (di, ret))
3210     return NULL;
3211
3212   return ret;
3213 }
3214
3215 /* <unnamed-type-name> ::= Ut [ <nonnegative number> ] _ */
3216
3217 static struct demangle_component *
3218 d_unnamed_type (struct d_info *di)
3219 {
3220   struct demangle_component *ret;
3221   long num;
3222
3223   if (! d_check_char (di, 'U'))
3224     return NULL;
3225   if (! d_check_char (di, 't'))
3226     return NULL;
3227
3228   num = d_compact_number (di);
3229   if (num < 0)
3230     return NULL;
3231
3232   ret = d_make_empty (di);
3233   if (ret)
3234     {
3235       ret->type = DEMANGLE_COMPONENT_UNNAMED_TYPE;
3236       ret->u.s_number.number = num;
3237     }
3238
3239   if (! d_add_substitution (di, ret))
3240     return NULL;
3241
3242   return ret;
3243 }
3244
3245 /* <clone-suffix> ::= [ . <clone-type-identifier> ] [ . <nonnegative number> ]*
3246 */
3247
3248 static struct demangle_component *
3249 d_clone_suffix (struct d_info *di, struct demangle_component *encoding)
3250 {
3251   const char *suffix = d_str (di);
3252   const char *pend = suffix;
3253   struct demangle_component *n;
3254
3255   if (*pend == '.' && (IS_LOWER (pend[1]) || pend[1] == '_'))
3256     {
3257       pend += 2;
3258       while (IS_LOWER (*pend) || *pend == '_')
3259         ++pend;
3260     }
3261   while (*pend == '.' && IS_DIGIT (pend[1]))
3262     {
3263       pend += 2;
3264       while (IS_DIGIT (*pend))
3265         ++pend;
3266     }
3267   d_advance (di, pend - suffix);
3268   n = d_make_name (di, suffix, pend - suffix);
3269   return d_make_comp (di, DEMANGLE_COMPONENT_CLONE, encoding, n);
3270 }
3271
3272 /* Add a new substitution.  */
3273
3274 static int
3275 d_add_substitution (struct d_info *di, struct demangle_component *dc)
3276 {
3277   if (dc == NULL)
3278     return 0;
3279   if (di->next_sub >= di->num_subs)
3280     return 0;
3281   di->subs[di->next_sub] = dc;
3282   ++di->next_sub;
3283   return 1;
3284 }
3285
3286 /* <substitution> ::= S <seq-id> _
3287                   ::= S_
3288                   ::= St
3289                   ::= Sa
3290                   ::= Sb
3291                   ::= Ss
3292                   ::= Si
3293                   ::= So
3294                   ::= Sd
3295
3296    If PREFIX is non-zero, then this type is being used as a prefix in
3297    a qualified name.  In this case, for the standard substitutions, we
3298    need to check whether we are being used as a prefix for a
3299    constructor or destructor, and return a full template name.
3300    Otherwise we will get something like std::iostream::~iostream()
3301    which does not correspond particularly well to any function which
3302    actually appears in the source.
3303 */
3304
3305 static const struct d_standard_sub_info standard_subs[] =
3306 {
3307   { 't', NL ("std"),
3308     NL ("std"),
3309     NULL, 0 },
3310   { 'a', NL ("std::allocator"),
3311     NL ("std::allocator"),
3312     NL ("allocator") },
3313   { 'b', NL ("std::basic_string"),
3314     NL ("std::basic_string"),
3315     NL ("basic_string") },
3316   { 's', NL ("std::string"),
3317     NL ("std::basic_string<char, std::char_traits<char>, std::allocator<char> >"),
3318     NL ("basic_string") },
3319   { 'i', NL ("std::istream"),
3320     NL ("std::basic_istream<char, std::char_traits<char> >"),
3321     NL ("basic_istream") },
3322   { 'o', NL ("std::ostream"),
3323     NL ("std::basic_ostream<char, std::char_traits<char> >"),
3324     NL ("basic_ostream") },
3325   { 'd', NL ("std::iostream"),
3326     NL ("std::basic_iostream<char, std::char_traits<char> >"),
3327     NL ("basic_iostream") }
3328 };
3329
3330 static struct demangle_component *
3331 d_substitution (struct d_info *di, int prefix)
3332 {
3333   char c;
3334
3335   if (! d_check_char (di, 'S'))
3336     return NULL;
3337
3338   c = d_next_char (di);
3339   if (c == '_' || IS_DIGIT (c) || IS_UPPER (c))
3340     {
3341       unsigned int id;
3342
3343       id = 0;
3344       if (c != '_')
3345         {
3346           do
3347             {
3348               unsigned int new_id;
3349
3350               if (IS_DIGIT (c))
3351                 new_id = id * 36 + c - '0';
3352               else if (IS_UPPER (c))
3353                 new_id = id * 36 + c - 'A' + 10;
3354               else
3355                 return NULL;
3356               if (new_id < id)
3357                 return NULL;
3358               id = new_id;
3359               c = d_next_char (di);
3360             }
3361           while (c != '_');
3362
3363           ++id;
3364         }
3365
3366       if (id >= (unsigned int) di->next_sub)
3367         return NULL;
3368
3369       ++di->did_subs;
3370
3371       return di->subs[id];
3372     }
3373   else
3374     {
3375       int verbose;
3376       const struct d_standard_sub_info *p;
3377       const struct d_standard_sub_info *pend;
3378
3379       verbose = (di->options & DMGL_VERBOSE) != 0;
3380       if (! verbose && prefix)
3381         {
3382           char peek;
3383
3384           peek = d_peek_char (di);
3385           if (peek == 'C' || peek == 'D')
3386             verbose = 1;
3387         }
3388
3389       pend = (&standard_subs[0]
3390               + sizeof standard_subs / sizeof standard_subs[0]);
3391       for (p = &standard_subs[0]; p < pend; ++p)
3392         {
3393           if (c == p->code)
3394             {
3395               const char *s;
3396               int len;
3397
3398               if (p->set_last_name != NULL)
3399                 di->last_name = d_make_sub (di, p->set_last_name,
3400                                             p->set_last_name_len);
3401               if (verbose)
3402                 {
3403                   s = p->full_expansion;
3404                   len = p->full_len;
3405                 }
3406               else
3407                 {
3408                   s = p->simple_expansion;
3409                   len = p->simple_len;
3410                 }
3411               di->expansion += len;
3412               return d_make_sub (di, s, len);
3413             }
3414         }
3415
3416       return NULL;
3417     }
3418 }
3419
3420 /* Initialize a growable string.  */
3421
3422 static void
3423 d_growable_string_init (struct d_growable_string *dgs, size_t estimate)
3424 {
3425   dgs->buf = NULL;
3426   dgs->len = 0;
3427   dgs->alc = 0;
3428   dgs->allocation_failure = 0;
3429
3430   if (estimate > 0)
3431     d_growable_string_resize (dgs, estimate);
3432 }
3433
3434 /* Grow a growable string to a given size.  */
3435
3436 static inline void
3437 d_growable_string_resize (struct d_growable_string *dgs, size_t need)
3438 {
3439   size_t newalc;
3440   char *newbuf;
3441
3442   if (dgs->allocation_failure)
3443     return;
3444
3445   /* Start allocation at two bytes to avoid any possibility of confusion
3446      with the special value of 1 used as a return in *palc to indicate
3447      allocation failures.  */
3448   newalc = dgs->alc > 0 ? dgs->alc : 2;
3449   while (newalc < need)
3450     newalc <<= 1;
3451
3452   newbuf = (char *) realloc (dgs->buf, newalc);
3453   if (newbuf == NULL)
3454     {
3455       free (dgs->buf);
3456       dgs->buf = NULL;
3457       dgs->len = 0;
3458       dgs->alc = 0;
3459       dgs->allocation_failure = 1;
3460       return;
3461     }
3462   dgs->buf = newbuf;
3463   dgs->alc = newalc;
3464 }
3465
3466 /* Append a buffer to a growable string.  */
3467
3468 static inline void
3469 d_growable_string_append_buffer (struct d_growable_string *dgs,
3470                                  const char *s, size_t l)
3471 {
3472   size_t need;
3473
3474   need = dgs->len + l + 1;
3475   if (need > dgs->alc)
3476     d_growable_string_resize (dgs, need);
3477
3478   if (dgs->allocation_failure)
3479     return;
3480
3481   memcpy (dgs->buf + dgs->len, s, l);
3482   dgs->buf[dgs->len + l] = '\0';
3483   dgs->len += l;
3484 }
3485
3486 /* Bridge growable strings to the callback mechanism.  */
3487
3488 static void
3489 d_growable_string_callback_adapter (const char *s, size_t l, void *opaque)
3490 {
3491   struct d_growable_string *dgs = (struct d_growable_string*) opaque;
3492
3493   d_growable_string_append_buffer (dgs, s, l);
3494 }
3495
3496 /* Initialize a print information structure.  */
3497
3498 static void
3499 d_print_init (struct d_print_info *dpi, demangle_callbackref callback,
3500               void *opaque)
3501 {
3502   dpi->len = 0;
3503   dpi->last_char = '\0';
3504   dpi->templates = NULL;
3505   dpi->modifiers = NULL;
3506   dpi->pack_index = 0;
3507   dpi->flush_count = 0;
3508
3509   dpi->callback = callback;
3510   dpi->opaque = opaque;
3511
3512   dpi->demangle_failure = 0;
3513 }
3514
3515 /* Indicate that an error occurred during printing, and test for error.  */
3516
3517 static inline void
3518 d_print_error (struct d_print_info *dpi)
3519 {
3520   dpi->demangle_failure = 1;
3521 }
3522
3523 static inline int
3524 d_print_saw_error (struct d_print_info *dpi)
3525 {
3526   return dpi->demangle_failure != 0;
3527 }
3528
3529 /* Flush buffered characters to the callback.  */
3530
3531 static inline void
3532 d_print_flush (struct d_print_info *dpi)
3533 {
3534   dpi->buf[dpi->len] = '\0';
3535   dpi->callback (dpi->buf, dpi->len, dpi->opaque);
3536   dpi->len = 0;
3537   dpi->flush_count++;
3538 }
3539
3540 /* Append characters and buffers for printing.  */
3541
3542 static inline void
3543 d_append_char (struct d_print_info *dpi, char c)
3544 {
3545   if (dpi->len == sizeof (dpi->buf) - 1)
3546     d_print_flush (dpi);
3547
3548   dpi->buf[dpi->len++] = c;
3549   dpi->last_char = c;
3550 }
3551
3552 static inline void
3553 d_append_buffer (struct d_print_info *dpi, const char *s, size_t l)
3554 {
3555   size_t i;
3556
3557   for (i = 0; i < l; i++)
3558     d_append_char (dpi, s[i]);
3559 }
3560
3561 static inline void
3562 d_append_string (struct d_print_info *dpi, const char *s)
3563 {
3564   d_append_buffer (dpi, s, strlen (s));
3565 }
3566
3567 static inline void
3568 d_append_num (struct d_print_info *dpi, long l)
3569 {
3570   char buf[25];
3571   sprintf (buf,"%ld", l);
3572   d_append_string (dpi, buf);
3573 }
3574
3575 static inline char
3576 d_last_char (struct d_print_info *dpi)
3577 {
3578   return dpi->last_char;
3579 }
3580
3581 /* Turn components into a human readable string.  OPTIONS is the
3582    options bits passed to the demangler.  DC is the tree to print.
3583    CALLBACK is a function to call to flush demangled string segments
3584    as they fill the intermediate buffer, and OPAQUE is a generalized
3585    callback argument.  On success, this returns 1.  On failure,
3586    it returns 0, indicating a bad parse.  It does not use heap
3587    memory to build an output string, so cannot encounter memory
3588    allocation failure.  */
3589
3590 CP_STATIC_IF_GLIBCPP_V3
3591 int
3592 cplus_demangle_print_callback (int options,
3593                                const struct demangle_component *dc,
3594                                demangle_callbackref callback, void *opaque)
3595 {
3596   struct d_print_info dpi;
3597
3598   d_print_init (&dpi, callback, opaque);
3599
3600   d_print_comp (&dpi, options, dc);
3601
3602   d_print_flush (&dpi);
3603
3604   return ! d_print_saw_error (&dpi);
3605 }
3606
3607 /* Turn components into a human readable string.  OPTIONS is the
3608    options bits passed to the demangler.  DC is the tree to print.
3609    ESTIMATE is a guess at the length of the result.  This returns a
3610    string allocated by malloc, or NULL on error.  On success, this
3611    sets *PALC to the size of the allocated buffer.  On failure, this
3612    sets *PALC to 0 for a bad parse, or to 1 for a memory allocation
3613    failure.  */
3614
3615 CP_STATIC_IF_GLIBCPP_V3
3616 char *
3617 cplus_demangle_print (int options, const struct demangle_component *dc,
3618                       int estimate, size_t *palc)
3619 {
3620   struct d_growable_string dgs;
3621
3622   d_growable_string_init (&dgs, estimate);
3623
3624   if (! cplus_demangle_print_callback (options, dc,
3625                                        d_growable_string_callback_adapter,
3626                                        &dgs))
3627     {
3628       free (dgs.buf);
3629       *palc = 0;
3630       return NULL;
3631     }
3632
3633   *palc = dgs.allocation_failure ? 1 : dgs.alc;
3634   return dgs.buf;
3635 }
3636
3637 /* Returns the I'th element of the template arglist ARGS, or NULL on
3638    failure.  */
3639
3640 static struct demangle_component *
3641 d_index_template_argument (struct demangle_component *args, int i)
3642 {
3643   struct demangle_component *a;
3644
3645   for (a = args;
3646        a != NULL;
3647        a = d_right (a))
3648     {
3649       if (a->type != DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
3650         return NULL;
3651       if (i <= 0)
3652         break;
3653       --i;
3654     }
3655   if (i != 0 || a == NULL)
3656     return NULL;
3657
3658   return d_left (a);
3659 }
3660
3661 /* Returns the template argument from the current context indicated by DC,
3662    which is a DEMANGLE_COMPONENT_TEMPLATE_PARAM, or NULL.  */
3663
3664 static struct demangle_component *
3665 d_lookup_template_argument (struct d_print_info *dpi,
3666                             const struct demangle_component *dc)
3667 {
3668   if (dpi->templates == NULL)
3669     {
3670       d_print_error (dpi);
3671       return NULL;
3672     }
3673         
3674   return d_index_template_argument
3675     (d_right (dpi->templates->template_decl),
3676      dc->u.s_number.number);
3677 }
3678
3679 /* Returns a template argument pack used in DC (any will do), or NULL.  */
3680
3681 static struct demangle_component *
3682 d_find_pack (struct d_print_info *dpi,
3683              const struct demangle_component *dc)
3684 {
3685   struct demangle_component *a;
3686   if (dc == NULL)
3687     return NULL;
3688
3689   switch (dc->type)
3690     {
3691     case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
3692       a = d_lookup_template_argument (dpi, dc);
3693       if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
3694         return a;
3695       return NULL;
3696
3697     case DEMANGLE_COMPONENT_PACK_EXPANSION:
3698       return NULL;
3699       
3700     case DEMANGLE_COMPONENT_LAMBDA:
3701     case DEMANGLE_COMPONENT_NAME:
3702     case DEMANGLE_COMPONENT_OPERATOR:
3703     case DEMANGLE_COMPONENT_BUILTIN_TYPE:
3704     case DEMANGLE_COMPONENT_SUB_STD:
3705     case DEMANGLE_COMPONENT_CHARACTER:
3706     case DEMANGLE_COMPONENT_FUNCTION_PARAM:
3707       return NULL;
3708
3709     case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
3710       return d_find_pack (dpi, dc->u.s_extended_operator.name);
3711     case DEMANGLE_COMPONENT_CTOR:
3712       return d_find_pack (dpi, dc->u.s_ctor.name);
3713     case DEMANGLE_COMPONENT_DTOR:
3714       return d_find_pack (dpi, dc->u.s_dtor.name);
3715
3716     default:
3717       a = d_find_pack (dpi, d_left (dc));
3718       if (a)
3719         return a;
3720       return d_find_pack (dpi, d_right (dc));
3721     }
3722 }
3723
3724 /* Returns the length of the template argument pack DC.  */
3725
3726 static int
3727 d_pack_length (const struct demangle_component *dc)
3728 {
3729   int count = 0;
3730   while (dc && dc->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST
3731          && d_left (dc) != NULL)
3732     {
3733       ++count;
3734       dc = d_right (dc);
3735     }
3736   return count;
3737 }
3738
3739 /* DC is a component of a mangled expression.  Print it, wrapped in parens
3740    if needed.  */
3741
3742 static void
3743 d_print_subexpr (struct d_print_info *dpi, int options,
3744                  const struct demangle_component *dc)
3745 {
3746   int simple = 0;
3747   if (dc->type == DEMANGLE_COMPONENT_NAME
3748       || dc->type == DEMANGLE_COMPONENT_QUAL_NAME
3749       || dc->type == DEMANGLE_COMPONENT_INITIALIZER_LIST
3750       || dc->type == DEMANGLE_COMPONENT_FUNCTION_PARAM)
3751     simple = 1;
3752   if (!simple)
3753     d_append_char (dpi, '(');
3754   d_print_comp (dpi, options, dc);
3755   if (!simple)
3756     d_append_char (dpi, ')');
3757 }
3758
3759 /* Subroutine to handle components.  */
3760
3761 static void
3762 d_print_comp (struct d_print_info *dpi, int options,
3763               const struct demangle_component *dc)
3764 {
3765   /* Magic variable to let reference smashing skip over the next modifier
3766      without needing to modify *dc.  */
3767   const struct demangle_component *mod_inner = NULL;
3768
3769   if (dc == NULL)
3770     {
3771       d_print_error (dpi);
3772       return;
3773     }
3774   if (d_print_saw_error (dpi))
3775     return;
3776
3777   switch (dc->type)
3778     {
3779     case DEMANGLE_COMPONENT_NAME:
3780       if ((options & DMGL_JAVA) == 0)
3781         d_append_buffer (dpi, dc->u.s_name.s, dc->u.s_name.len);
3782       else
3783         d_print_java_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len);
3784       return;
3785
3786     case DEMANGLE_COMPONENT_QUAL_NAME:
3787     case DEMANGLE_COMPONENT_LOCAL_NAME:
3788       d_print_comp (dpi, options, d_left (dc));
3789       if ((options & DMGL_JAVA) == 0)
3790         d_append_string (dpi, "::");
3791       else
3792         d_append_char (dpi, '.');
3793       d_print_comp (dpi, options, d_right (dc));
3794       return;
3795
3796     case DEMANGLE_COMPONENT_TYPED_NAME:
3797       {
3798         struct d_print_mod *hold_modifiers;
3799         struct demangle_component *typed_name;
3800         struct d_print_mod adpm[4];
3801         unsigned int i;
3802         struct d_print_template dpt;
3803
3804         /* Pass the name down to the type so that it can be printed in
3805            the right place for the type.  We also have to pass down
3806            any CV-qualifiers, which apply to the this parameter.  */
3807         hold_modifiers = dpi->modifiers;
3808         dpi->modifiers = 0;
3809         i = 0;
3810         typed_name = d_left (dc);
3811         while (typed_name != NULL)
3812           {
3813             if (i >= sizeof adpm / sizeof adpm[0])
3814               {
3815                 d_print_error (dpi);
3816                 return;
3817               }
3818
3819             adpm[i].next = dpi->modifiers;
3820             dpi->modifiers = &adpm[i];
3821             adpm[i].mod = typed_name;
3822             adpm[i].printed = 0;
3823             adpm[i].templates = dpi->templates;
3824             ++i;
3825
3826             if (typed_name->type != DEMANGLE_COMPONENT_RESTRICT_THIS
3827                 && typed_name->type != DEMANGLE_COMPONENT_VOLATILE_THIS
3828                 && typed_name->type != DEMANGLE_COMPONENT_CONST_THIS)
3829               break;
3830
3831             typed_name = d_left (typed_name);
3832           }
3833
3834         if (typed_name == NULL)
3835           {
3836             d_print_error (dpi);
3837             return;
3838           }
3839
3840         /* If typed_name is a template, then it applies to the
3841            function type as well.  */
3842         if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
3843           {
3844             dpt.next = dpi->templates;
3845             dpi->templates = &dpt;
3846             dpt.template_decl = typed_name;
3847           }
3848
3849         /* If typed_name is a DEMANGLE_COMPONENT_LOCAL_NAME, then
3850            there may be CV-qualifiers on its right argument which
3851            really apply here; this happens when parsing a class which
3852            is local to a function.  */
3853         if (typed_name->type == DEMANGLE_COMPONENT_LOCAL_NAME)
3854           {
3855             struct demangle_component *local_name;
3856
3857             local_name = d_right (typed_name);
3858             if (local_name->type == DEMANGLE_COMPONENT_DEFAULT_ARG)
3859               local_name = local_name->u.s_unary_num.sub;
3860             while (local_name->type == DEMANGLE_COMPONENT_RESTRICT_THIS
3861                    || local_name->type == DEMANGLE_COMPONENT_VOLATILE_THIS
3862                    || local_name->type == DEMANGLE_COMPONENT_CONST_THIS)
3863               {
3864                 if (i >= sizeof adpm / sizeof adpm[0])
3865                   {
3866                     d_print_error (dpi);
3867                     return;
3868                   }
3869
3870                 adpm[i] = adpm[i - 1];
3871                 adpm[i].next = &adpm[i - 1];
3872                 dpi->modifiers = &adpm[i];
3873
3874                 adpm[i - 1].mod = local_name;
3875                 adpm[i - 1].printed = 0;
3876                 adpm[i - 1].templates = dpi->templates;
3877                 ++i;
3878
3879                 local_name = d_left (local_name);
3880               }
3881           }
3882
3883         d_print_comp (dpi, options, d_right (dc));
3884
3885         if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
3886           dpi->templates = dpt.next;
3887
3888         /* If the modifiers didn't get printed by the type, print them
3889            now.  */
3890         while (i > 0)
3891           {
3892             --i;
3893             if (! adpm[i].printed)
3894               {
3895                 d_append_char (dpi, ' ');
3896                 d_print_mod (dpi, options, adpm[i].mod);
3897               }
3898           }
3899
3900         dpi->modifiers = hold_modifiers;
3901
3902         return;
3903       }
3904
3905     case DEMANGLE_COMPONENT_TEMPLATE:
3906       {
3907         struct d_print_mod *hold_dpm;
3908         struct demangle_component *dcl;
3909
3910         /* Don't push modifiers into a template definition.  Doing so
3911            could give the wrong definition for a template argument.
3912            Instead, treat the template essentially as a name.  */
3913
3914         hold_dpm = dpi->modifiers;
3915         dpi->modifiers = NULL;
3916
3917         dcl = d_left (dc);
3918
3919         if ((options & DMGL_JAVA) != 0
3920             && dcl->type == DEMANGLE_COMPONENT_NAME
3921             && dcl->u.s_name.len == 6
3922             && strncmp (dcl->u.s_name.s, "JArray", 6) == 0)
3923           {
3924             /* Special-case Java arrays, so that JArray<TYPE> appears
3925                instead as TYPE[].  */
3926
3927             d_print_comp (dpi, options, d_right (dc));
3928             d_append_string (dpi, "[]");
3929           }
3930         else
3931           {
3932             d_print_comp (dpi, options, dcl);
3933             if (d_last_char (dpi) == '<')
3934               d_append_char (dpi, ' ');
3935             d_append_char (dpi, '<');
3936             d_print_comp (dpi, options, d_right (dc));
3937             /* Avoid generating two consecutive '>' characters, to avoid
3938                the C++ syntactic ambiguity.  */
3939             if (d_last_char (dpi) == '>')
3940               d_append_char (dpi, ' ');
3941             d_append_char (dpi, '>');
3942           }
3943
3944         dpi->modifiers = hold_dpm;
3945
3946         return;
3947       }
3948
3949     case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
3950       {
3951         struct d_print_template *hold_dpt;
3952         struct demangle_component *a = d_lookup_template_argument (dpi, dc);
3953
3954         if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
3955           a = d_index_template_argument (a, dpi->pack_index);
3956
3957         if (a == NULL)
3958           {
3959             d_print_error (dpi);
3960             return;
3961           }
3962
3963         /* While processing this parameter, we need to pop the list of
3964            templates.  This is because the template parameter may
3965            itself be a reference to a parameter of an outer
3966            template.  */
3967
3968         hold_dpt = dpi->templates;
3969         dpi->templates = hold_dpt->next;
3970
3971         d_print_comp (dpi, options, a);
3972
3973         dpi->templates = hold_dpt;
3974
3975         return;
3976       }
3977
3978     case DEMANGLE_COMPONENT_CTOR:
3979       d_print_comp (dpi, options, dc->u.s_ctor.name);
3980       return;
3981
3982     case DEMANGLE_COMPONENT_DTOR:
3983       d_append_char (dpi, '~');
3984       d_print_comp (dpi, options, dc->u.s_dtor.name);
3985       return;
3986
3987     case DEMANGLE_COMPONENT_VTABLE:
3988       d_append_string (dpi, "vtable for ");
3989       d_print_comp (dpi, options, d_left (dc));
3990       return;
3991
3992     case DEMANGLE_COMPONENT_VTT:
3993       d_append_string (dpi, "VTT for ");
3994       d_print_comp (dpi, options, d_left (dc));
3995       return;
3996
3997     case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
3998       d_append_string (dpi, "construction vtable for ");
3999       d_print_comp (dpi, options, d_left (dc));
4000       d_append_string (dpi, "-in-");
4001       d_print_comp (dpi, options, d_right (dc));
4002       return;
4003
4004     case DEMANGLE_COMPONENT_TYPEINFO:
4005       d_append_string (dpi, "typeinfo for ");
4006       d_print_comp (dpi, options, d_left (dc));
4007       return;
4008
4009     case DEMANGLE_COMPONENT_TYPEINFO_NAME:
4010       d_append_string (dpi, "typeinfo name for ");
4011       d_print_comp (dpi, options, d_left (dc));
4012       return;
4013
4014     case DEMANGLE_COMPONENT_TYPEINFO_FN:
4015       d_append_string (dpi, "typeinfo fn for ");
4016       d_print_comp (dpi, options, d_left (dc));
4017       return;
4018
4019     case DEMANGLE_COMPONENT_THUNK:
4020       d_append_string (dpi, "non-virtual thunk to ");
4021       d_print_comp (dpi, options, d_left (dc));
4022       return;
4023
4024     case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
4025       d_append_string (dpi, "virtual thunk to ");
4026       d_print_comp (dpi, options, d_left (dc));
4027       return;
4028
4029     case DEMANGLE_COMPONENT_COVARIANT_THUNK:
4030       d_append_string (dpi, "covariant return thunk to ");
4031       d_print_comp (dpi, options, d_left (dc));
4032       return;
4033
4034     case DEMANGLE_COMPONENT_JAVA_CLASS:
4035       d_append_string (dpi, "java Class for ");
4036       d_print_comp (dpi, options, d_left (dc));
4037       return;
4038
4039     case DEMANGLE_COMPONENT_GUARD:
4040       d_append_string (dpi, "guard variable for ");
4041       d_print_comp (dpi, options, d_left (dc));
4042       return;
4043
4044     case DEMANGLE_COMPONENT_REFTEMP:
4045       d_append_string (dpi, "reference temporary #");
4046       d_print_comp (dpi, options, d_right (dc));
4047       d_append_string (dpi, " for ");
4048       d_print_comp (dpi, options, d_left (dc));
4049       return;
4050
4051     case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
4052       d_append_string (dpi, "hidden alias for ");
4053       d_print_comp (dpi, options, d_left (dc));
4054       return;
4055
4056     case DEMANGLE_COMPONENT_TRANSACTION_CLONE:
4057       d_append_string (dpi, "transaction clone for ");
4058       d_print_comp (dpi, options, d_left (dc));
4059       return;
4060
4061     case DEMANGLE_COMPONENT_NONTRANSACTION_CLONE:
4062       d_append_string (dpi, "non-transaction clone for ");
4063       d_print_comp (dpi, options, d_left (dc));
4064       return;
4065
4066     case DEMANGLE_COMPONENT_SUB_STD:
4067       d_append_buffer (dpi, dc->u.s_string.string, dc->u.s_string.len);
4068       return;
4069
4070     case DEMANGLE_COMPONENT_RESTRICT:
4071     case DEMANGLE_COMPONENT_VOLATILE:
4072     case DEMANGLE_COMPONENT_CONST:
4073       {
4074         struct d_print_mod *pdpm;
4075
4076         /* When printing arrays, it's possible to have cases where the
4077            same CV-qualifier gets pushed on the stack multiple times.
4078            We only need to print it once.  */
4079
4080         for (pdpm = dpi->modifiers; pdpm != NULL; pdpm = pdpm->next)
4081           {
4082             if (! pdpm->printed)
4083               {
4084                 if (pdpm->mod->type != DEMANGLE_COMPONENT_RESTRICT
4085                     && pdpm->mod->type != DEMANGLE_COMPONENT_VOLATILE
4086                     && pdpm->mod->type != DEMANGLE_COMPONENT_CONST)
4087                   break;
4088                 if (pdpm->mod->type == dc->type)
4089                   {
4090                     d_print_comp (dpi, options, d_left (dc));
4091                     return;
4092                   }
4093               }
4094           }
4095       }
4096       goto modifier;
4097
4098     case DEMANGLE_COMPONENT_REFERENCE:
4099     case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
4100       {
4101         /* Handle reference smashing: & + && = &.  */
4102         const struct demangle_component *sub = d_left (dc);
4103         if (sub->type == DEMANGLE_COMPONENT_TEMPLATE_PARAM)
4104           {
4105             struct demangle_component *a = d_lookup_template_argument (dpi, sub);
4106             if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
4107               a = d_index_template_argument (a, dpi->pack_index);
4108
4109             if (a == NULL)
4110               {
4111                 d_print_error (dpi);
4112                 return;
4113               }
4114
4115             sub = a;
4116           }
4117
4118         if (sub->type == DEMANGLE_COMPONENT_REFERENCE
4119             || sub->type == dc->type)
4120           dc = sub;
4121         else if (sub->type == DEMANGLE_COMPONENT_RVALUE_REFERENCE)
4122           mod_inner = d_left (sub);
4123       }
4124       /* Fall through.  */
4125
4126     case DEMANGLE_COMPONENT_RESTRICT_THIS:
4127     case DEMANGLE_COMPONENT_VOLATILE_THIS:
4128     case DEMANGLE_COMPONENT_CONST_THIS:
4129     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
4130     case DEMANGLE_COMPONENT_POINTER:
4131     case DEMANGLE_COMPONENT_COMPLEX:
4132     case DEMANGLE_COMPONENT_IMAGINARY:
4133     modifier:
4134       {
4135         /* We keep a list of modifiers on the stack.  */
4136         struct d_print_mod dpm;
4137
4138         dpm.next = dpi->modifiers;
4139         dpi->modifiers = &dpm;
4140         dpm.mod = dc;
4141         dpm.printed = 0;
4142         dpm.templates = dpi->templates;
4143
4144         if (!mod_inner)
4145           mod_inner = d_left (dc);
4146
4147         d_print_comp (dpi, options, mod_inner);
4148
4149         /* If the modifier didn't get printed by the type, print it
4150            now.  */
4151         if (! dpm.printed)
4152           d_print_mod (dpi, options, dc);
4153
4154         dpi->modifiers = dpm.next;
4155
4156         return;
4157       }
4158
4159     case DEMANGLE_COMPONENT_BUILTIN_TYPE:
4160       if ((options & DMGL_JAVA) == 0)
4161         d_append_buffer (dpi, dc->u.s_builtin.type->name,
4162                          dc->u.s_builtin.type->len);
4163       else
4164         d_append_buffer (dpi, dc->u.s_builtin.type->java_name,
4165                          dc->u.s_builtin.type->java_len);
4166       return;
4167
4168     case DEMANGLE_COMPONENT_VENDOR_TYPE:
4169       d_print_comp (dpi, options, d_left (dc));
4170       return;
4171
4172     case DEMANGLE_COMPONENT_FUNCTION_TYPE:
4173       {
4174         if ((options & DMGL_RET_POSTFIX) != 0)
4175           d_print_function_type (dpi,
4176                                  options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
4177                                  dc, dpi->modifiers);
4178
4179         /* Print return type if present */
4180         if (d_left (dc) != NULL && (options & DMGL_RET_POSTFIX) != 0)
4181           d_print_comp (dpi, options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
4182                         d_left (dc));
4183         else if (d_left (dc) != NULL && (options & DMGL_RET_DROP) == 0)
4184           {
4185             struct d_print_mod dpm;
4186
4187             /* We must pass this type down as a modifier in order to
4188                print it in the right location.  */
4189             dpm.next = dpi->modifiers;
4190             dpi->modifiers = &dpm;
4191             dpm.mod = dc;
4192             dpm.printed = 0;
4193             dpm.templates = dpi->templates;
4194
4195             d_print_comp (dpi, options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
4196                           d_left (dc));
4197
4198             dpi->modifiers = dpm.next;
4199
4200             if (dpm.printed)
4201               return;
4202
4203             /* In standard prefix notation, there is a space between the
4204                return type and the function signature.  */
4205             if ((options & DMGL_RET_POSTFIX) == 0)
4206               d_append_char (dpi, ' ');
4207           }
4208
4209         if ((options & DMGL_RET_POSTFIX) == 0)
4210           d_print_function_type (dpi,
4211                                  options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
4212                                  dc, dpi->modifiers);
4213
4214         return;
4215       }
4216
4217     case DEMANGLE_COMPONENT_ARRAY_TYPE:
4218       {
4219         struct d_print_mod *hold_modifiers;
4220         struct d_print_mod adpm[4];
4221         unsigned int i;
4222         struct d_print_mod *pdpm;
4223
4224         /* We must pass this type down as a modifier in order to print
4225            multi-dimensional arrays correctly.  If the array itself is
4226            CV-qualified, we act as though the element type were
4227            CV-qualified.  We do this by copying the modifiers down
4228            rather than fiddling pointers, so that we don't wind up
4229            with a d_print_mod higher on the stack pointing into our
4230            stack frame after we return.  */
4231
4232         hold_modifiers = dpi->modifiers;
4233
4234         adpm[0].next = hold_modifiers;
4235         dpi->modifiers = &adpm[0];
4236         adpm[0].mod = dc;
4237         adpm[0].printed = 0;
4238         adpm[0].templates = dpi->templates;
4239
4240         i = 1;
4241         pdpm = hold_modifiers;
4242         while (pdpm != NULL
4243                && (pdpm->mod->type == DEMANGLE_COMPONENT_RESTRICT
4244                    || pdpm->mod->type == DEMANGLE_COMPONENT_VOLATILE
4245                    || pdpm->mod->type == DEMANGLE_COMPONENT_CONST))
4246           {
4247             if (! pdpm->printed)
4248               {
4249                 if (i >= sizeof adpm / sizeof adpm[0])
4250                   {
4251                     d_print_error (dpi);
4252                     return;
4253                   }
4254
4255                 adpm[i] = *pdpm;
4256                 adpm[i].next = dpi->modifiers;
4257                 dpi->modifiers = &adpm[i];
4258                 pdpm->printed = 1;
4259                 ++i;
4260               }
4261
4262             pdpm = pdpm->next;
4263           }
4264
4265         d_print_comp (dpi, options, d_right (dc));
4266
4267         dpi->modifiers = hold_modifiers;
4268
4269         if (adpm[0].printed)
4270           return;
4271
4272         while (i > 1)
4273           {
4274             --i;
4275             d_print_mod (dpi, options, adpm[i].mod);
4276           }
4277
4278         d_print_array_type (dpi, options, dc, dpi->modifiers);
4279
4280         return;
4281       }
4282
4283     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
4284     case DEMANGLE_COMPONENT_VECTOR_TYPE:
4285       {
4286         struct d_print_mod dpm;
4287
4288         dpm.next = dpi->modifiers;
4289         dpi->modifiers = &dpm;
4290         dpm.mod = dc;
4291         dpm.printed = 0;
4292         dpm.templates = dpi->templates;
4293
4294         d_print_comp (dpi, options, d_right (dc));
4295
4296         /* If the modifier didn't get printed by the type, print it
4297            now.  */
4298         if (! dpm.printed)
4299           d_print_mod (dpi, options, dc);
4300
4301         dpi->modifiers = dpm.next;
4302
4303         return;
4304       }
4305
4306     case DEMANGLE_COMPONENT_FIXED_TYPE:
4307       if (dc->u.s_fixed.sat)
4308         d_append_string (dpi, "_Sat ");
4309       /* Don't print "int _Accum".  */
4310       if (dc->u.s_fixed.length->u.s_builtin.type
4311           != &cplus_demangle_builtin_types['i'-'a'])
4312         {
4313           d_print_comp (dpi, options, dc->u.s_fixed.length);
4314           d_append_char (dpi, ' ');
4315         }
4316       if (dc->u.s_fixed.accum)
4317         d_append_string (dpi, "_Accum");
4318       else
4319         d_append_string (dpi, "_Fract");
4320       return;
4321
4322     case DEMANGLE_COMPONENT_ARGLIST:
4323     case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
4324       if (d_left (dc) != NULL)
4325         d_print_comp (dpi, options, d_left (dc));
4326       if (d_right (dc) != NULL)
4327         {
4328           size_t len;
4329           unsigned long int flush_count;
4330           /* Make sure ", " isn't flushed by d_append_string, otherwise
4331              dpi->len -= 2 wouldn't work.  */
4332           if (dpi->len >= sizeof (dpi->buf) - 2)
4333             d_print_flush (dpi);
4334           d_append_string (dpi, ", ");
4335           len = dpi->len;
4336           flush_count = dpi->flush_count;
4337           d_print_comp (dpi, options, d_right (dc));
4338           /* If that didn't print anything (which can happen with empty
4339              template argument packs), remove the comma and space.  */
4340           if (dpi->flush_count == flush_count && dpi->len == len)
4341             dpi->len -= 2;
4342         }
4343       return;
4344
4345     case DEMANGLE_COMPONENT_INITIALIZER_LIST:
4346       {
4347         struct demangle_component *type = d_left (dc);
4348         struct demangle_component *list = d_right (dc);
4349
4350         if (type)
4351           d_print_comp (dpi, options, type);
4352         d_append_char (dpi, '{');
4353         d_print_comp (dpi, options, list);
4354         d_append_char (dpi, '}');
4355       }
4356       return;
4357
4358     case DEMANGLE_COMPONENT_OPERATOR:
4359       {
4360         char c;
4361
4362         d_append_string (dpi, "operator");
4363         c = dc->u.s_operator.op->name[0];
4364         if (IS_LOWER (c))
4365           d_append_char (dpi, ' ');
4366         d_append_buffer (dpi, dc->u.s_operator.op->name,
4367                          dc->u.s_operator.op->len);
4368         return;
4369       }
4370
4371     case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
4372       d_append_string (dpi, "operator ");
4373       d_print_comp (dpi, options, dc->u.s_extended_operator.name);
4374       return;
4375
4376     case DEMANGLE_COMPONENT_CAST:
4377       d_append_string (dpi, "operator ");
4378       d_print_cast (dpi, options, dc);
4379       return;
4380
4381     case DEMANGLE_COMPONENT_NULLARY:
4382       d_print_expr_op (dpi, options, d_left (dc));
4383       return;
4384
4385     case DEMANGLE_COMPONENT_UNARY:
4386       {
4387         struct demangle_component *op = d_left (dc);
4388         struct demangle_component *operand = d_right (dc);
4389         const char *code = NULL;
4390
4391         if (op->type == DEMANGLE_COMPONENT_OPERATOR)
4392           {
4393             code = op->u.s_operator.op->code;
4394             if (!strcmp (code, "ad"))
4395               {
4396                 /* Don't print the argument list for the address of a
4397                    function.  */
4398                 if (operand->type == DEMANGLE_COMPONENT_TYPED_NAME
4399                     && d_left (operand)->type == DEMANGLE_COMPONENT_QUAL_NAME
4400                     && d_right (operand)->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
4401                   operand = d_left (operand);
4402               }
4403             if (operand->type == DEMANGLE_COMPONENT_BINARY_ARGS)
4404               {
4405                 /* This indicates a suffix operator.  */
4406                 operand = d_left (operand);
4407                 d_print_subexpr (dpi, options, operand);
4408                 d_print_expr_op (dpi, options, op);
4409                 return;
4410               }
4411           }
4412
4413         if (op->type != DEMANGLE_COMPONENT_CAST)
4414           d_print_expr_op (dpi, options, op);
4415         else
4416           {
4417             d_append_char (dpi, '(');
4418             d_print_cast (dpi, options, op);
4419             d_append_char (dpi, ')');
4420           }
4421         if (code && !strcmp (code, "gs"))
4422           /* Avoid parens after '::'.  */
4423           d_print_comp (dpi, options, operand);
4424         else if (code && !strcmp (code, "st"))
4425           /* Always print parens for sizeof (type).  */
4426           {
4427             d_append_char (dpi, '(');
4428             d_print_comp (dpi, options, operand);
4429             d_append_char (dpi, ')');
4430           }
4431         else
4432           d_print_subexpr (dpi, options, operand);
4433       }
4434       return;
4435
4436     case DEMANGLE_COMPONENT_BINARY:
4437       if (d_right (dc)->type != DEMANGLE_COMPONENT_BINARY_ARGS)
4438         {
4439           d_print_error (dpi);
4440           return;
4441         }
4442
4443       /* We wrap an expression which uses the greater-than operator in
4444          an extra layer of parens so that it does not get confused
4445          with the '>' which ends the template parameters.  */
4446       if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
4447           && d_left (dc)->u.s_operator.op->len == 1
4448           && d_left (dc)->u.s_operator.op->name[0] == '>')
4449         d_append_char (dpi, '(');
4450
4451       if (strcmp (d_left (dc)->u.s_operator.op->code, "cl") == 0
4452           && d_left (d_right (dc))->type == DEMANGLE_COMPONENT_TYPED_NAME)
4453         {
4454           /* Function call used in an expression should not have printed types
4455              of the function arguments.  Values of the function arguments still
4456              get printed below.  */
4457
4458           const struct demangle_component *func = d_left (d_right (dc));
4459
4460           if (d_right (func)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
4461             d_print_error (dpi);
4462           d_print_subexpr (dpi, options, d_left (func));
4463         }
4464       else
4465         d_print_subexpr (dpi, options, d_left (d_right (dc)));
4466       if (strcmp (d_left (dc)->u.s_operator.op->code, "ix") == 0)
4467         {
4468           d_append_char (dpi, '[');
4469           d_print_comp (dpi, options, d_right (d_right (dc)));
4470           d_append_char (dpi, ']');
4471         }
4472       else
4473         {
4474           if (strcmp (d_left (dc)->u.s_operator.op->code, "cl") != 0)
4475             d_print_expr_op (dpi, options, d_left (dc));
4476           d_print_subexpr (dpi, options, d_right (d_right (dc)));
4477         }
4478
4479       if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
4480           && d_left (dc)->u.s_operator.op->len == 1
4481           && d_left (dc)->u.s_operator.op->name[0] == '>')
4482         d_append_char (dpi, ')');
4483
4484       return;
4485
4486     case DEMANGLE_COMPONENT_BINARY_ARGS:
4487       /* We should only see this as part of DEMANGLE_COMPONENT_BINARY.  */
4488       d_print_error (dpi);
4489       return;
4490
4491     case DEMANGLE_COMPONENT_TRINARY:
4492       if (d_right (dc)->type != DEMANGLE_COMPONENT_TRINARY_ARG1
4493           || d_right (d_right (dc))->type != DEMANGLE_COMPONENT_TRINARY_ARG2)
4494         {
4495           d_print_error (dpi);
4496           return;
4497         }
4498       {
4499         struct demangle_component *op = d_left (dc);
4500         struct demangle_component *first = d_left (d_right (dc));
4501         struct demangle_component *second = d_left (d_right (d_right (dc)));
4502         struct demangle_component *third = d_right (d_right (d_right (dc)));
4503
4504         if (!strcmp (op->u.s_operator.op->code, "qu"))
4505           {
4506             d_print_subexpr (dpi, options, first);
4507             d_print_expr_op (dpi, options, op);
4508             d_print_subexpr (dpi, options, second);
4509             d_append_string (dpi, " : ");
4510             d_print_subexpr (dpi, options, third);
4511           }
4512         else
4513           {
4514             d_append_string (dpi, "new ");
4515             if (d_left (first) != NULL)
4516               {
4517                 d_print_subexpr (dpi, options, first);
4518                 d_append_char (dpi, ' ');
4519               }
4520             d_print_comp (dpi, options, second);
4521             if (third)
4522               d_print_subexpr (dpi, options, third);
4523           }
4524       }
4525       return;
4526
4527     case DEMANGLE_COMPONENT_TRINARY_ARG1:
4528     case DEMANGLE_COMPONENT_TRINARY_ARG2:
4529       /* We should only see these are part of DEMANGLE_COMPONENT_TRINARY.  */
4530       d_print_error (dpi);
4531       return;
4532
4533     case DEMANGLE_COMPONENT_LITERAL:
4534     case DEMANGLE_COMPONENT_LITERAL_NEG:
4535       {
4536         enum d_builtin_type_print tp;
4537
4538         /* For some builtin types, produce simpler output.  */
4539         tp = D_PRINT_DEFAULT;
4540         if (d_left (dc)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE)
4541           {
4542             tp = d_left (dc)->u.s_builtin.type->print;
4543             switch (tp)
4544               {
4545               case D_PRINT_INT:
4546               case D_PRINT_UNSIGNED:
4547               case D_PRINT_LONG:
4548               case D_PRINT_UNSIGNED_LONG:
4549               case D_PRINT_LONG_LONG:
4550               case D_PRINT_UNSIGNED_LONG_LONG:
4551                 if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME)
4552                   {
4553                     if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
4554                       d_append_char (dpi, '-');
4555                     d_print_comp (dpi, options, d_right (dc));
4556                     switch (tp)
4557                       {
4558                       default:
4559                         break;
4560                       case D_PRINT_UNSIGNED:
4561                         d_append_char (dpi, 'u');
4562                         break;
4563                       case D_PRINT_LONG:
4564                         d_append_char (dpi, 'l');
4565                         break;
4566                       case D_PRINT_UNSIGNED_LONG:
4567                         d_append_string (dpi, "ul");
4568                         break;
4569                       case D_PRINT_LONG_LONG:
4570                         d_append_string (dpi, "ll");
4571                         break;
4572                       case D_PRINT_UNSIGNED_LONG_LONG:
4573                         d_append_string (dpi, "ull");
4574                         break;
4575                       }
4576                     return;
4577                   }
4578                 break;
4579
4580               case D_PRINT_BOOL:
4581                 if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME
4582                     && d_right (dc)->u.s_name.len == 1
4583                     && dc->type == DEMANGLE_COMPONENT_LITERAL)
4584                   {
4585                     switch (d_right (dc)->u.s_name.s[0])
4586                       {
4587                       case '0':
4588                         d_append_string (dpi, "false");
4589                         return;
4590                       case '1':
4591                         d_append_string (dpi, "true");
4592                         return;
4593                       default:
4594                         break;
4595                       }
4596                   }
4597                 break;
4598
4599               default:
4600                 break;
4601               }
4602           }
4603
4604         d_append_char (dpi, '(');
4605         d_print_comp (dpi, options, d_left (dc));
4606         d_append_char (dpi, ')');
4607         if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
4608           d_append_char (dpi, '-');
4609         if (tp == D_PRINT_FLOAT)
4610           d_append_char (dpi, '[');
4611         d_print_comp (dpi, options, d_right (dc));
4612         if (tp == D_PRINT_FLOAT)
4613           d_append_char (dpi, ']');
4614       }
4615       return;
4616
4617     case DEMANGLE_COMPONENT_NUMBER:
4618       d_append_num (dpi, dc->u.s_number.number);
4619       return;
4620
4621     case DEMANGLE_COMPONENT_JAVA_RESOURCE:
4622       d_append_string (dpi, "java resource ");
4623       d_print_comp (dpi, options, d_left (dc));
4624       return;
4625
4626     case DEMANGLE_COMPONENT_COMPOUND_NAME:
4627       d_print_comp (dpi, options, d_left (dc));
4628       d_print_comp (dpi, options, d_right (dc));
4629       return;
4630
4631     case DEMANGLE_COMPONENT_CHARACTER:
4632       d_append_char (dpi, dc->u.s_character.character);
4633       return;
4634
4635     case DEMANGLE_COMPONENT_DECLTYPE:
4636       d_append_string (dpi, "decltype (");
4637       d_print_comp (dpi, options, d_left (dc));
4638       d_append_char (dpi, ')');
4639       return;
4640
4641     case DEMANGLE_COMPONENT_PACK_EXPANSION:
4642       {
4643         int len;
4644         int i;
4645         struct demangle_component *a = d_find_pack (dpi, d_left (dc));
4646         if (a == NULL)
4647           {
4648             /* d_find_pack won't find anything if the only packs involved
4649                in this expansion are function parameter packs; in that
4650                case, just print the pattern and "...".  */
4651             d_print_subexpr (dpi, options, d_left (dc));
4652             d_append_string (dpi, "...");
4653             return;
4654           }
4655
4656         len = d_pack_length (a);
4657         dc = d_left (dc);
4658         for (i = 0; i < len; ++i)
4659           {
4660             dpi->pack_index = i;
4661             d_print_comp (dpi, options, dc);
4662             if (i < len-1)
4663               d_append_string (dpi, ", ");
4664           }
4665       }
4666       return;
4667
4668     case DEMANGLE_COMPONENT_FUNCTION_PARAM:
4669       {
4670         long num = dc->u.s_number.number;
4671         if (num == 0)
4672           d_append_string (dpi, "this");
4673         else
4674           {
4675             d_append_string (dpi, "{parm#");
4676             d_append_num (dpi, num);
4677             d_append_char (dpi, '}');
4678           }
4679       }
4680       return;
4681
4682     case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
4683       d_append_string (dpi, "global constructors keyed to ");
4684       d_print_comp (dpi, options, dc->u.s_binary.left);
4685       return;
4686
4687     case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
4688       d_append_string (dpi, "global destructors keyed to ");
4689       d_print_comp (dpi, options, dc->u.s_binary.left);
4690       return;
4691
4692     case DEMANGLE_COMPONENT_LAMBDA:
4693       d_append_string (dpi, "{lambda(");
4694       d_print_comp (dpi, options, dc->u.s_unary_num.sub);
4695       d_append_string (dpi, ")#");
4696       d_append_num (dpi, dc->u.s_unary_num.num + 1);
4697       d_append_char (dpi, '}');
4698       return;
4699
4700     case DEMANGLE_COMPONENT_UNNAMED_TYPE:
4701       d_append_string (dpi, "{unnamed type#");
4702       d_append_num (dpi, dc->u.s_number.number + 1);
4703       d_append_char (dpi, '}');
4704       return;
4705
4706     case DEMANGLE_COMPONENT_CLONE:
4707       d_print_comp (dpi, options, d_left (dc));
4708       d_append_string (dpi, " [clone ");
4709       d_print_comp (dpi, options, d_right (dc));
4710       d_append_char (dpi, ']');
4711       return;
4712
4713     default:
4714       d_print_error (dpi);
4715       return;
4716     }
4717 }
4718
4719 /* Print a Java dentifier.  For Java we try to handle encoded extended
4720    Unicode characters.  The C++ ABI doesn't mention Unicode encoding,
4721    so we don't it for C++.  Characters are encoded as
4722    __U<hex-char>+_.  */
4723
4724 static void
4725 d_print_java_identifier (struct d_print_info *dpi, const char *name, int len)
4726 {
4727   const char *p;
4728   const char *end;
4729
4730   end = name + len;
4731   for (p = name; p < end; ++p)
4732     {
4733       if (end - p > 3
4734           && p[0] == '_'
4735           && p[1] == '_'
4736           && p[2] == 'U')
4737         {
4738           unsigned long c;
4739           const char *q;
4740
4741           c = 0;
4742           for (q = p + 3; q < end; ++q)
4743             {
4744               int dig;
4745
4746               if (IS_DIGIT (*q))
4747                 dig = *q - '0';
4748               else if (*q >= 'A' && *q <= 'F')
4749                 dig = *q - 'A' + 10;
4750               else if (*q >= 'a' && *q <= 'f')
4751                 dig = *q - 'a' + 10;
4752               else
4753                 break;
4754
4755               c = c * 16 + dig;
4756             }
4757           /* If the Unicode character is larger than 256, we don't try
4758              to deal with it here.  FIXME.  */
4759           if (q < end && *q == '_' && c < 256)
4760             {
4761               d_append_char (dpi, c);
4762               p = q;
4763               continue;
4764             }
4765         }
4766
4767       d_append_char (dpi, *p);
4768     }
4769 }
4770
4771 /* Print a list of modifiers.  SUFFIX is 1 if we are printing
4772    qualifiers on this after printing a function.  */
4773
4774 static void
4775 d_print_mod_list (struct d_print_info *dpi, int options,
4776                   struct d_print_mod *mods, int suffix)
4777 {
4778   struct d_print_template *hold_dpt;
4779
4780   if (mods == NULL || d_print_saw_error (dpi))
4781     return;
4782
4783   if (mods->printed
4784       || (! suffix
4785           && (mods->mod->type == DEMANGLE_COMPONENT_RESTRICT_THIS
4786               || mods->mod->type == DEMANGLE_COMPONENT_VOLATILE_THIS
4787               || mods->mod->type == DEMANGLE_COMPONENT_CONST_THIS)))
4788     {
4789       d_print_mod_list (dpi, options, mods->next, suffix);
4790       return;
4791     }
4792
4793   mods->printed = 1;
4794
4795   hold_dpt = dpi->templates;
4796   dpi->templates = mods->templates;
4797
4798   if (mods->mod->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
4799     {
4800       d_print_function_type (dpi, options, mods->mod, mods->next);
4801       dpi->templates = hold_dpt;
4802       return;
4803     }
4804   else if (mods->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
4805     {
4806       d_print_array_type (dpi, options, mods->mod, mods->next);
4807       dpi->templates = hold_dpt;
4808       return;
4809     }
4810   else if (mods->mod->type == DEMANGLE_COMPONENT_LOCAL_NAME)
4811     {
4812       struct d_print_mod *hold_modifiers;
4813       struct demangle_component *dc;
4814
4815       /* When this is on the modifier stack, we have pulled any
4816          qualifiers off the right argument already.  Otherwise, we
4817          print it as usual, but don't let the left argument see any
4818          modifiers.  */
4819
4820       hold_modifiers = dpi->modifiers;
4821       dpi->modifiers = NULL;
4822       d_print_comp (dpi, options, d_left (mods->mod));
4823       dpi->modifiers = hold_modifiers;
4824
4825       if ((options & DMGL_JAVA) == 0)
4826         d_append_string (dpi, "::");
4827       else
4828         d_append_char (dpi, '.');
4829
4830       dc = d_right (mods->mod);
4831
4832       if (dc->type == DEMANGLE_COMPONENT_DEFAULT_ARG)
4833         {
4834           d_append_string (dpi, "{default arg#");
4835           d_append_num (dpi, dc->u.s_unary_num.num + 1);
4836           d_append_string (dpi, "}::");
4837           dc = dc->u.s_unary_num.sub;
4838         }
4839
4840       while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
4841              || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
4842              || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
4843         dc = d_left (dc);
4844
4845       d_print_comp (dpi, options, dc);
4846
4847       dpi->templates = hold_dpt;
4848       return;
4849     }
4850
4851   d_print_mod (dpi, options, mods->mod);
4852
4853   dpi->templates = hold_dpt;
4854
4855   d_print_mod_list (dpi, options, mods->next, suffix);
4856 }
4857
4858 /* Print a modifier.  */
4859
4860 static void
4861 d_print_mod (struct d_print_info *dpi, int options,
4862              const struct demangle_component *mod)
4863 {
4864   switch (mod->type)
4865     {
4866     case DEMANGLE_COMPONENT_RESTRICT:
4867     case DEMANGLE_COMPONENT_RESTRICT_THIS:
4868       d_append_string (dpi, " restrict");
4869       return;
4870     case DEMANGLE_COMPONENT_VOLATILE:
4871     case DEMANGLE_COMPONENT_VOLATILE_THIS:
4872       d_append_string (dpi, " volatile");
4873       return;
4874     case DEMANGLE_COMPONENT_CONST:
4875     case DEMANGLE_COMPONENT_CONST_THIS:
4876       d_append_string (dpi, " const");
4877       return;
4878     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
4879       d_append_char (dpi, ' ');
4880       d_print_comp (dpi, options, d_right (mod));
4881       return;
4882     case DEMANGLE_COMPONENT_POINTER:
4883       /* There is no pointer symbol in Java.  */
4884       if ((options & DMGL_JAVA) == 0)
4885         d_append_char (dpi, '*');
4886       return;
4887     case DEMANGLE_COMPONENT_REFERENCE:
4888       d_append_char (dpi, '&');
4889       return;
4890     case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
4891       d_append_string (dpi, "&&");
4892       return;
4893     case DEMANGLE_COMPONENT_COMPLEX:
4894       d_append_string (dpi, "complex ");
4895       return;
4896     case DEMANGLE_COMPONENT_IMAGINARY:
4897       d_append_string (dpi, "imaginary ");
4898       return;
4899     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
4900       if (d_last_char (dpi) != '(')
4901         d_append_char (dpi, ' ');
4902       d_print_comp (dpi, options, d_left (mod));
4903       d_append_string (dpi, "::*");
4904       return;
4905     case DEMANGLE_COMPONENT_TYPED_NAME:
4906       d_print_comp (dpi, options, d_left (mod));
4907       return;
4908     case DEMANGLE_COMPONENT_VECTOR_TYPE:
4909       d_append_string (dpi, " __vector(");
4910       d_print_comp (dpi, options, d_left (mod));
4911       d_append_char (dpi, ')');
4912       return;
4913
4914     default:
4915       /* Otherwise, we have something that won't go back on the
4916          modifier stack, so we can just print it.  */
4917       d_print_comp (dpi, options, mod);
4918       return;
4919     }
4920 }
4921
4922 /* Print a function type, except for the return type.  */
4923
4924 static void
4925 d_print_function_type (struct d_print_info *dpi, int options,
4926                        const struct demangle_component *dc,
4927                        struct d_print_mod *mods)
4928 {
4929   int need_paren;
4930   int need_space;
4931   struct d_print_mod *p;
4932   struct d_print_mod *hold_modifiers;
4933
4934   need_paren = 0;
4935   need_space = 0;
4936   for (p = mods; p != NULL; p = p->next)
4937     {
4938       if (p->printed)
4939         break;
4940
4941       switch (p->mod->type)
4942         {
4943         case DEMANGLE_COMPONENT_POINTER:
4944         case DEMANGLE_COMPONENT_REFERENCE:
4945         case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
4946           need_paren = 1;
4947           break;
4948         case DEMANGLE_COMPONENT_RESTRICT:
4949         case DEMANGLE_COMPONENT_VOLATILE:
4950         case DEMANGLE_COMPONENT_CONST:
4951         case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
4952         case DEMANGLE_COMPONENT_COMPLEX:
4953         case DEMANGLE_COMPONENT_IMAGINARY:
4954         case DEMANGLE_COMPONENT_PTRMEM_TYPE:
4955           need_space = 1;
4956           need_paren = 1;
4957           break;
4958         case DEMANGLE_COMPONENT_RESTRICT_THIS:
4959         case DEMANGLE_COMPONENT_VOLATILE_THIS:
4960         case DEMANGLE_COMPONENT_CONST_THIS:
4961           break;
4962         default:
4963           break;
4964         }
4965       if (need_paren)
4966         break;
4967     }
4968
4969   if (need_paren)
4970     {
4971       if (! need_space)
4972         {
4973           if (d_last_char (dpi) != '('
4974               && d_last_char (dpi) != '*')
4975             need_space = 1;
4976         }
4977       if (need_space && d_last_char (dpi) != ' ')
4978         d_append_char (dpi, ' ');
4979       d_append_char (dpi, '(');
4980     }
4981
4982   hold_modifiers = dpi->modifiers;
4983   dpi->modifiers = NULL;
4984
4985   d_print_mod_list (dpi, options, mods, 0);
4986
4987   if (need_paren)
4988     d_append_char (dpi, ')');
4989
4990   d_append_char (dpi, '(');
4991
4992   if (d_right (dc) != NULL)
4993     d_print_comp (dpi, options, d_right (dc));
4994
4995   d_append_char (dpi, ')');
4996
4997   d_print_mod_list (dpi, options, mods, 1);
4998
4999   dpi->modifiers = hold_modifiers;
5000 }
5001
5002 /* Print an array type, except for the element type.  */
5003
5004 static void
5005 d_print_array_type (struct d_print_info *dpi, int options,
5006                     const struct demangle_component *dc,
5007                     struct d_print_mod *mods)
5008 {
5009   int need_space;
5010
5011   need_space = 1;
5012   if (mods != NULL)
5013     {
5014       int need_paren;
5015       struct d_print_mod *p;
5016
5017       need_paren = 0;
5018       for (p = mods; p != NULL; p = p->next)
5019         {
5020           if (! p->printed)
5021             {
5022               if (p->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
5023                 {
5024                   need_space = 0;
5025                   break;
5026                 }
5027               else
5028                 {
5029                   need_paren = 1;
5030                   need_space = 1;
5031                   break;
5032                 }
5033             }
5034         }
5035
5036       if (need_paren)
5037         d_append_string (dpi, " (");
5038
5039       d_print_mod_list (dpi, options, mods, 0);
5040
5041       if (need_paren)
5042         d_append_char (dpi, ')');
5043     }
5044
5045   if (need_space)
5046     d_append_char (dpi, ' ');
5047
5048   d_append_char (dpi, '[');
5049
5050   if (d_left (dc) != NULL)
5051     d_print_comp (dpi, options, d_left (dc));
5052
5053   d_append_char (dpi, ']');
5054 }
5055
5056 /* Print an operator in an expression.  */
5057
5058 static void
5059 d_print_expr_op (struct d_print_info *dpi, int options,
5060                  const struct demangle_component *dc)
5061 {
5062   if (dc->type == DEMANGLE_COMPONENT_OPERATOR)
5063     d_append_buffer (dpi, dc->u.s_operator.op->name,
5064                      dc->u.s_operator.op->len);
5065   else
5066     d_print_comp (dpi, options, dc);
5067 }
5068
5069 /* Print a cast.  */
5070
5071 static void
5072 d_print_cast (struct d_print_info *dpi, int options,
5073               const struct demangle_component *dc)
5074 {
5075   if (d_left (dc)->type != DEMANGLE_COMPONENT_TEMPLATE)
5076     d_print_comp (dpi, options, d_left (dc));
5077   else
5078     {
5079       struct d_print_mod *hold_dpm;
5080       struct d_print_template dpt;
5081
5082       /* It appears that for a templated cast operator, we need to put
5083          the template parameters in scope for the operator name, but
5084          not for the parameters.  The effect is that we need to handle
5085          the template printing here.  */
5086
5087       hold_dpm = dpi->modifiers;
5088       dpi->modifiers = NULL;
5089
5090       dpt.next = dpi->templates;
5091       dpi->templates = &dpt;
5092       dpt.template_decl = d_left (dc);
5093
5094       d_print_comp (dpi, options, d_left (d_left (dc)));
5095
5096       dpi->templates = dpt.next;
5097
5098       if (d_last_char (dpi) == '<')
5099         d_append_char (dpi, ' ');
5100       d_append_char (dpi, '<');
5101       d_print_comp (dpi, options, d_right (d_left (dc)));
5102       /* Avoid generating two consecutive '>' characters, to avoid
5103          the C++ syntactic ambiguity.  */
5104       if (d_last_char (dpi) == '>')
5105         d_append_char (dpi, ' ');
5106       d_append_char (dpi, '>');
5107
5108       dpi->modifiers = hold_dpm;
5109     }
5110 }
5111
5112 /* Initialize the information structure we use to pass around
5113    information.  */
5114
5115 CP_STATIC_IF_GLIBCPP_V3
5116 void
5117 cplus_demangle_init_info (const char *mangled, int options, size_t len,
5118                           struct d_info *di)
5119 {
5120   di->s = mangled;
5121   di->send = mangled + len;
5122   di->options = options;
5123
5124   di->n = mangled;
5125
5126   /* We can not need more components than twice the number of chars in
5127      the mangled string.  Most components correspond directly to
5128      chars, but the ARGLIST types are exceptions.  */
5129   di->num_comps = 2 * len;
5130   di->next_comp = 0;
5131
5132   /* Similarly, we can not need more substitutions than there are
5133      chars in the mangled string.  */
5134   di->num_subs = len;
5135   di->next_sub = 0;
5136   di->did_subs = 0;
5137
5138   di->last_name = NULL;
5139
5140   di->expansion = 0;
5141 }
5142
5143 /* Internal implementation for the demangler.  If MANGLED is a g++ v3 ABI
5144    mangled name, return strings in repeated callback giving the demangled
5145    name.  OPTIONS is the usual libiberty demangler options.  On success,
5146    this returns 1.  On failure, returns 0.  */
5147
5148 static int
5149 d_demangle_callback (const char *mangled, int options,
5150                      demangle_callbackref callback, void *opaque)
5151 {
5152   enum
5153     {
5154       DCT_TYPE,
5155       DCT_MANGLED,
5156       DCT_GLOBAL_CTORS,
5157       DCT_GLOBAL_DTORS
5158     }
5159   type;
5160   struct d_info di;
5161   struct demangle_component *dc;
5162   int status;
5163
5164   if (mangled[0] == '_' && mangled[1] == 'Z')
5165     type = DCT_MANGLED;
5166   else if (strncmp (mangled, "_GLOBAL_", 8) == 0
5167            && (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$')
5168            && (mangled[9] == 'D' || mangled[9] == 'I')
5169            && mangled[10] == '_')
5170     type = mangled[9] == 'I' ? DCT_GLOBAL_CTORS : DCT_GLOBAL_DTORS;
5171   else
5172     {
5173       if ((options & DMGL_TYPES) == 0)
5174         return 0;
5175       type = DCT_TYPE;
5176     }
5177
5178   cplus_demangle_init_info (mangled, options, strlen (mangled), &di);
5179
5180   {
5181 #ifdef CP_DYNAMIC_ARRAYS
5182     __extension__ struct demangle_component comps[di.num_comps];
5183     __extension__ struct demangle_component *subs[di.num_subs];
5184
5185     di.comps = comps;
5186     di.subs = subs;
5187 #else
5188     di.comps = alloca (di.num_comps * sizeof (*di.comps));
5189     di.subs = alloca (di.num_subs * sizeof (*di.subs));
5190 #endif
5191
5192     switch (type)
5193       {
5194       case DCT_TYPE:
5195         dc = cplus_demangle_type (&di);
5196         break;
5197       case DCT_MANGLED:
5198         dc = cplus_demangle_mangled_name (&di, 1);
5199         break;
5200       case DCT_GLOBAL_CTORS:
5201       case DCT_GLOBAL_DTORS:
5202         d_advance (&di, 11);
5203         dc = d_make_comp (&di,
5204                           (type == DCT_GLOBAL_CTORS
5205                            ? DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS
5206                            : DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS),
5207                           d_make_demangle_mangled_name (&di, d_str (&di)),
5208                           NULL);
5209         d_advance (&di, strlen (d_str (&di)));
5210         break;
5211       }
5212
5213     /* If DMGL_PARAMS is set, then if we didn't consume the entire
5214        mangled string, then we didn't successfully demangle it.  If
5215        DMGL_PARAMS is not set, we didn't look at the trailing
5216        parameters.  */
5217     if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0')
5218       dc = NULL;
5219
5220 #ifdef CP_DEMANGLE_DEBUG
5221     d_dump (dc, 0);
5222 #endif
5223
5224     status = (dc != NULL)
5225              ? cplus_demangle_print_callback (options, dc, callback, opaque)
5226              : 0;
5227   }
5228
5229   return status;
5230 }
5231
5232 /* Entry point for the demangler.  If MANGLED is a g++ v3 ABI mangled
5233    name, return a buffer allocated with malloc holding the demangled
5234    name.  OPTIONS is the usual libiberty demangler options.  On
5235    success, this sets *PALC to the allocated size of the returned
5236    buffer.  On failure, this sets *PALC to 0 for a bad name, or 1 for
5237    a memory allocation failure, and returns NULL.  */
5238
5239 static char *
5240 d_demangle (const char *mangled, int options, size_t *palc)
5241 {
5242   struct d_growable_string dgs;
5243   int status;
5244
5245   d_growable_string_init (&dgs, 0);
5246
5247   status = d_demangle_callback (mangled, options,
5248                                 d_growable_string_callback_adapter, &dgs);
5249   if (status == 0)
5250     {
5251       free (dgs.buf);
5252       *palc = 0;
5253       return NULL;
5254     }
5255
5256   *palc = dgs.allocation_failure ? 1 : dgs.alc;
5257   return dgs.buf;
5258 }
5259
5260 #if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3)
5261
5262 extern char *__cxa_demangle (const char *, char *, size_t *, int *);
5263
5264 /* ia64 ABI-mandated entry point in the C++ runtime library for
5265    performing demangling.  MANGLED_NAME is a NUL-terminated character
5266    string containing the name to be demangled.
5267
5268    OUTPUT_BUFFER is a region of memory, allocated with malloc, of
5269    *LENGTH bytes, into which the demangled name is stored.  If
5270    OUTPUT_BUFFER is not long enough, it is expanded using realloc.
5271    OUTPUT_BUFFER may instead be NULL; in that case, the demangled name
5272    is placed in a region of memory allocated with malloc.
5273
5274    If LENGTH is non-NULL, the length of the buffer containing the
5275    demangled name, is placed in *LENGTH.
5276
5277    The return value is a pointer to the start of the NUL-terminated
5278    demangled name, or NULL if the demangling fails.  The caller is
5279    responsible for deallocating this memory using free.
5280
5281    *STATUS is set to one of the following values:
5282       0: The demangling operation succeeded.
5283      -1: A memory allocation failure occurred.
5284      -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
5285      -3: One of the arguments is invalid.
5286
5287    The demangling is performed using the C++ ABI mangling rules, with
5288    GNU extensions.  */
5289
5290 char *
5291 __cxa_demangle (const char *mangled_name, char *output_buffer,
5292                 size_t *length, int *status)
5293 {
5294   char *demangled;
5295   size_t alc;
5296
5297   if (mangled_name == NULL)
5298     {
5299       if (status != NULL)
5300         *status = -3;
5301       return NULL;
5302     }
5303
5304   if (output_buffer != NULL && length == NULL)
5305     {
5306       if (status != NULL)
5307         *status = -3;
5308       return NULL;
5309     }
5310
5311   demangled = d_demangle (mangled_name, DMGL_PARAMS | DMGL_TYPES, &alc);
5312
5313   if (demangled == NULL)
5314     {
5315       if (status != NULL)
5316         {
5317           if (alc == 1)
5318             *status = -1;
5319           else
5320             *status = -2;
5321         }
5322       return NULL;
5323     }
5324
5325   if (output_buffer == NULL)
5326     {
5327       if (length != NULL)
5328         *length = alc;
5329     }
5330   else
5331     {
5332       if (strlen (demangled) < *length)
5333         {
5334           strcpy (output_buffer, demangled);
5335           free (demangled);
5336           demangled = output_buffer;
5337         }
5338       else
5339         {
5340           free (output_buffer);
5341           *length = alc;
5342         }
5343     }
5344
5345   if (status != NULL)
5346     *status = 0;
5347
5348   return demangled;
5349 }
5350
5351 extern int __gcclibcxx_demangle_callback (const char *,
5352                                           void (*)
5353                                             (const char *, size_t, void *),
5354                                           void *);
5355
5356 /* Alternative, allocationless entry point in the C++ runtime library
5357    for performing demangling.  MANGLED_NAME is a NUL-terminated character
5358    string containing the name to be demangled.
5359
5360    CALLBACK is a callback function, called with demangled string
5361    segments as demangling progresses; it is called at least once,
5362    but may be called more than once.  OPAQUE is a generalized pointer
5363    used as a callback argument.
5364
5365    The return code is one of the following values, equivalent to
5366    the STATUS values of __cxa_demangle() (excluding -1, since this
5367    function performs no memory allocations):
5368       0: The demangling operation succeeded.
5369      -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
5370      -3: One of the arguments is invalid.
5371
5372    The demangling is performed using the C++ ABI mangling rules, with
5373    GNU extensions.  */
5374
5375 int
5376 __gcclibcxx_demangle_callback (const char *mangled_name,
5377                                void (*callback) (const char *, size_t, void *),
5378                                void *opaque)
5379 {
5380   int status;
5381
5382   if (mangled_name == NULL || callback == NULL)
5383     return -3;
5384
5385   status = d_demangle_callback (mangled_name, DMGL_PARAMS | DMGL_TYPES,
5386                                 callback, opaque);
5387   if (status == 0)
5388     return -2;
5389
5390   return 0;
5391 }
5392
5393 #else /* ! (IN_LIBGCC2 || IN_GLIBCPP_V3) */
5394
5395 /* Entry point for libiberty demangler.  If MANGLED is a g++ v3 ABI
5396    mangled name, return a buffer allocated with malloc holding the
5397    demangled name.  Otherwise, return NULL.  */
5398
5399 char *
5400 cplus_demangle_v3 (const char *mangled, int options)
5401 {
5402   size_t alc;
5403
5404   return d_demangle (mangled, options, &alc);
5405 }
5406
5407 int
5408 cplus_demangle_v3_callback (const char *mangled, int options,
5409                             demangle_callbackref callback, void *opaque)
5410 {
5411   return d_demangle_callback (mangled, options, callback, opaque);
5412 }
5413
5414 /* Demangle a Java symbol.  Java uses a subset of the V3 ABI C++ mangling 
5415    conventions, but the output formatting is a little different.
5416    This instructs the C++ demangler not to emit pointer characters ("*"), to
5417    use Java's namespace separator symbol ("." instead of "::"), and to output
5418    JArray<TYPE> as TYPE[].  */
5419
5420 char *
5421 java_demangle_v3 (const char *mangled)
5422 {
5423   size_t alc;
5424
5425   return d_demangle (mangled, DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX, &alc);
5426 }
5427
5428 int
5429 java_demangle_v3_callback (const char *mangled,
5430                            demangle_callbackref callback, void *opaque)
5431 {
5432   return d_demangle_callback (mangled,
5433                               DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX,
5434                               callback, opaque);
5435 }
5436
5437 #endif /* IN_LIBGCC2 || IN_GLIBCPP_V3 */
5438
5439 #ifndef IN_GLIBCPP_V3
5440
5441 /* Demangle a string in order to find out whether it is a constructor
5442    or destructor.  Return non-zero on success.  Set *CTOR_KIND and
5443    *DTOR_KIND appropriately.  */
5444
5445 static int
5446 is_ctor_or_dtor (const char *mangled,
5447                  enum gnu_v3_ctor_kinds *ctor_kind,
5448                  enum gnu_v3_dtor_kinds *dtor_kind)
5449 {
5450   struct d_info di;
5451   struct demangle_component *dc;
5452   int ret;
5453
5454   *ctor_kind = (enum gnu_v3_ctor_kinds) 0;
5455   *dtor_kind = (enum gnu_v3_dtor_kinds) 0;
5456
5457   cplus_demangle_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di);
5458
5459   {
5460 #ifdef CP_DYNAMIC_ARRAYS
5461     __extension__ struct demangle_component comps[di.num_comps];
5462     __extension__ struct demangle_component *subs[di.num_subs];
5463
5464     di.comps = comps;
5465     di.subs = subs;
5466 #else
5467     di.comps = alloca (di.num_comps * sizeof (*di.comps));
5468     di.subs = alloca (di.num_subs * sizeof (*di.subs));
5469 #endif
5470
5471     dc = cplus_demangle_mangled_name (&di, 1);
5472
5473     /* Note that because we did not pass DMGL_PARAMS, we don't expect
5474        to demangle the entire string.  */
5475
5476     ret = 0;
5477     while (dc != NULL)
5478       {
5479         switch (dc->type)
5480           {
5481           default:
5482             dc = NULL;
5483             break;
5484           case DEMANGLE_COMPONENT_TYPED_NAME:
5485           case DEMANGLE_COMPONENT_TEMPLATE:
5486           case DEMANGLE_COMPONENT_RESTRICT_THIS:
5487           case DEMANGLE_COMPONENT_VOLATILE_THIS:
5488           case DEMANGLE_COMPONENT_CONST_THIS:
5489             dc = d_left (dc);
5490             break;
5491           case DEMANGLE_COMPONENT_QUAL_NAME:
5492           case DEMANGLE_COMPONENT_LOCAL_NAME:
5493             dc = d_right (dc);
5494             break;
5495           case DEMANGLE_COMPONENT_CTOR:
5496             *ctor_kind = dc->u.s_ctor.kind;
5497             ret = 1;
5498             dc = NULL;
5499             break;
5500           case DEMANGLE_COMPONENT_DTOR:
5501             *dtor_kind = dc->u.s_dtor.kind;
5502             ret = 1;
5503             dc = NULL;
5504             break;
5505           }
5506       }
5507   }
5508
5509   return ret;
5510 }
5511
5512 /* Return whether NAME is the mangled form of a g++ V3 ABI constructor
5513    name.  A non-zero return indicates the type of constructor.  */
5514
5515 enum gnu_v3_ctor_kinds
5516 is_gnu_v3_mangled_ctor (const char *name)
5517 {
5518   enum gnu_v3_ctor_kinds ctor_kind;
5519   enum gnu_v3_dtor_kinds dtor_kind;
5520
5521   if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
5522     return (enum gnu_v3_ctor_kinds) 0;
5523   return ctor_kind;
5524 }
5525
5526
5527 /* Return whether NAME is the mangled form of a g++ V3 ABI destructor
5528    name.  A non-zero return indicates the type of destructor.  */
5529
5530 enum gnu_v3_dtor_kinds
5531 is_gnu_v3_mangled_dtor (const char *name)
5532 {
5533   enum gnu_v3_ctor_kinds ctor_kind;
5534   enum gnu_v3_dtor_kinds dtor_kind;
5535
5536   if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
5537     return (enum gnu_v3_dtor_kinds) 0;
5538   return dtor_kind;
5539 }
5540
5541 #endif /* IN_GLIBCPP_V3 */
5542
5543 #ifdef STANDALONE_DEMANGLER
5544
5545 #include "getopt.h"
5546 #include "dyn-string.h"
5547
5548 static void print_usage (FILE* fp, int exit_value);
5549
5550 #define IS_ALPHA(CHAR)                                                  \
5551   (((CHAR) >= 'a' && (CHAR) <= 'z')                                     \
5552    || ((CHAR) >= 'A' && (CHAR) <= 'Z'))
5553
5554 /* Non-zero if CHAR is a character than can occur in a mangled name.  */
5555 #define is_mangled_char(CHAR)                                           \
5556   (IS_ALPHA (CHAR) || IS_DIGIT (CHAR)                                   \
5557    || (CHAR) == '_' || (CHAR) == '.' || (CHAR) == '$')
5558
5559 /* The name of this program, as invoked.  */
5560 const char* program_name;
5561
5562 /* Prints usage summary to FP and then exits with EXIT_VALUE.  */
5563
5564 static void
5565 print_usage (FILE* fp, int exit_value)
5566 {
5567   fprintf (fp, "Usage: %s [options] [names ...]\n", program_name);
5568   fprintf (fp, "Options:\n");
5569   fprintf (fp, "  -h,--help       Display this message.\n");
5570   fprintf (fp, "  -p,--no-params  Don't display function parameters\n");
5571   fprintf (fp, "  -v,--verbose    Produce verbose demanglings.\n");
5572   fprintf (fp, "If names are provided, they are demangled.  Otherwise filters standard input.\n");
5573
5574   exit (exit_value);
5575 }
5576
5577 /* Option specification for getopt_long.  */
5578 static const struct option long_options[] = 
5579 {
5580   { "help",      no_argument, NULL, 'h' },
5581   { "no-params", no_argument, NULL, 'p' },
5582   { "verbose",   no_argument, NULL, 'v' },
5583   { NULL,        no_argument, NULL, 0   },
5584 };
5585
5586 /* Main entry for a demangling filter executable.  It will demangle
5587    its command line arguments, if any.  If none are provided, it will
5588    filter stdin to stdout, replacing any recognized mangled C++ names
5589    with their demangled equivalents.  */
5590
5591 int
5592 main (int argc, char *argv[])
5593 {
5594   int i;
5595   int opt_char;
5596   int options = DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES;
5597
5598   /* Use the program name of this program, as invoked.  */
5599   program_name = argv[0];
5600
5601   /* Parse options.  */
5602   do 
5603     {
5604       opt_char = getopt_long (argc, argv, "hpv", long_options, NULL);
5605       switch (opt_char)
5606         {
5607         case '?':  /* Unrecognized option.  */
5608           print_usage (stderr, 1);
5609           break;
5610
5611         case 'h':
5612           print_usage (stdout, 0);
5613           break;
5614
5615         case 'p':
5616           options &= ~ DMGL_PARAMS;
5617           break;
5618
5619         case 'v':
5620           options |= DMGL_VERBOSE;
5621           break;
5622         }
5623     }
5624   while (opt_char != -1);
5625
5626   if (optind == argc) 
5627     /* No command line arguments were provided.  Filter stdin.  */
5628     {
5629       dyn_string_t mangled = dyn_string_new (3);
5630       char *s;
5631
5632       /* Read all of input.  */
5633       while (!feof (stdin))
5634         {
5635           char c;
5636
5637           /* Pile characters into mangled until we hit one that can't
5638              occur in a mangled name.  */
5639           c = getchar ();
5640           while (!feof (stdin) && is_mangled_char (c))
5641             {
5642               dyn_string_append_char (mangled, c);
5643               if (feof (stdin))
5644                 break;
5645               c = getchar ();
5646             }
5647
5648           if (dyn_string_length (mangled) > 0)
5649             {
5650 #ifdef IN_GLIBCPP_V3
5651               s = __cxa_demangle (dyn_string_buf (mangled), NULL, NULL, NULL);
5652 #else
5653               s = cplus_demangle_v3 (dyn_string_buf (mangled), options);
5654 #endif
5655
5656               if (s != NULL)
5657                 {
5658                   fputs (s, stdout);
5659                   free (s);
5660                 }
5661               else
5662                 {
5663                   /* It might not have been a mangled name.  Print the
5664                      original text.  */
5665                   fputs (dyn_string_buf (mangled), stdout);
5666                 }
5667
5668               dyn_string_clear (mangled);
5669             }
5670
5671           /* If we haven't hit EOF yet, we've read one character that
5672              can't occur in a mangled name, so print it out.  */
5673           if (!feof (stdin))
5674             putchar (c);
5675         }
5676
5677       dyn_string_delete (mangled);
5678     }
5679   else
5680     /* Demangle command line arguments.  */
5681     {
5682       /* Loop over command line arguments.  */
5683       for (i = optind; i < argc; ++i)
5684         {
5685           char *s;
5686 #ifdef IN_GLIBCPP_V3
5687           int status;
5688 #endif
5689
5690           /* Attempt to demangle.  */
5691 #ifdef IN_GLIBCPP_V3
5692           s = __cxa_demangle (argv[i], NULL, NULL, &status);
5693 #else
5694           s = cplus_demangle_v3 (argv[i], options);
5695 #endif
5696
5697           /* If it worked, print the demangled name.  */
5698           if (s != NULL)
5699             {
5700               printf ("%s\n", s);
5701               free (s);
5702             }
5703           else
5704             {
5705 #ifdef IN_GLIBCPP_V3
5706               fprintf (stderr, "Failed: %s (status %d)\n", argv[i], status);
5707 #else
5708               fprintf (stderr, "Failed: %s\n", argv[i]);
5709 #endif
5710             }
5711         }
5712     }
5713
5714   return 0;
5715 }
5716
5717 #endif /* STANDALONE_DEMANGLER */