OSDN Git Service

Latest updates from FSF 4.7 branch
[pf3gnuchains/gcc-fork.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         {
1423           di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
1424           if (!strcmp (ret->u.s_operator.op->code, "li"))
1425             ret = d_make_comp (di, DEMANGLE_COMPONENT_UNARY, ret,
1426                                d_source_name (di));
1427         }
1428       return ret;
1429     }
1430   else if (peek == 'C' || peek == 'D')
1431     return d_ctor_dtor_name (di);
1432   else if (peek == 'L')
1433     {
1434       struct demangle_component * ret;
1435
1436       d_advance (di, 1);
1437
1438       ret = d_source_name (di);
1439       if (ret == NULL)
1440         return NULL;
1441       if (! d_discriminator (di))
1442         return NULL;
1443       return ret;
1444     }
1445   else if (peek == 'U')
1446     {
1447       switch (d_peek_next_char (di))
1448         {
1449         case 'l':
1450           return d_lambda (di);
1451         case 't':
1452           return d_unnamed_type (di);
1453         default:
1454           return NULL;
1455         }
1456     }
1457   else
1458     return NULL;
1459 }
1460
1461 /* <source-name> ::= <(positive length) number> <identifier>  */
1462
1463 static struct demangle_component *
1464 d_source_name (struct d_info *di)
1465 {
1466   long len;
1467   struct demangle_component *ret;
1468
1469   len = d_number (di);
1470   if (len <= 0)
1471     return NULL;
1472   ret = d_identifier (di, len);
1473   di->last_name = ret;
1474   return ret;
1475 }
1476
1477 /* number ::= [n] <(non-negative decimal integer)>  */
1478
1479 static long
1480 d_number (struct d_info *di)
1481 {
1482   int negative;
1483   char peek;
1484   long ret;
1485
1486   negative = 0;
1487   peek = d_peek_char (di);
1488   if (peek == 'n')
1489     {
1490       negative = 1;
1491       d_advance (di, 1);
1492       peek = d_peek_char (di);
1493     }
1494
1495   ret = 0;
1496   while (1)
1497     {
1498       if (! IS_DIGIT (peek))
1499         {
1500           if (negative)
1501             ret = - ret;
1502           return ret;
1503         }
1504       ret = ret * 10 + peek - '0';
1505       d_advance (di, 1);
1506       peek = d_peek_char (di);
1507     }
1508 }
1509
1510 /* Like d_number, but returns a demangle_component.  */
1511
1512 static struct demangle_component *
1513 d_number_component (struct d_info *di)
1514 {
1515   struct demangle_component *ret = d_make_empty (di);
1516   if (ret)
1517     {
1518       ret->type = DEMANGLE_COMPONENT_NUMBER;
1519       ret->u.s_number.number = d_number (di);
1520     }
1521   return ret;
1522 }
1523
1524 /* identifier ::= <(unqualified source code identifier)>  */
1525
1526 static struct demangle_component *
1527 d_identifier (struct d_info *di, int len)
1528 {
1529   const char *name;
1530
1531   name = d_str (di);
1532
1533   if (di->send - name < len)
1534     return NULL;
1535
1536   d_advance (di, len);
1537
1538   /* A Java mangled name may have a trailing '$' if it is a C++
1539      keyword.  This '$' is not included in the length count.  We just
1540      ignore the '$'.  */
1541   if ((di->options & DMGL_JAVA) != 0
1542       && d_peek_char (di) == '$')
1543     d_advance (di, 1);
1544
1545   /* Look for something which looks like a gcc encoding of an
1546      anonymous namespace, and replace it with a more user friendly
1547      name.  */
1548   if (len >= (int) ANONYMOUS_NAMESPACE_PREFIX_LEN + 2
1549       && memcmp (name, ANONYMOUS_NAMESPACE_PREFIX,
1550                  ANONYMOUS_NAMESPACE_PREFIX_LEN) == 0)
1551     {
1552       const char *s;
1553
1554       s = name + ANONYMOUS_NAMESPACE_PREFIX_LEN;
1555       if ((*s == '.' || *s == '_' || *s == '$')
1556           && s[1] == 'N')
1557         {
1558           di->expansion -= len - sizeof "(anonymous namespace)";
1559           return d_make_name (di, "(anonymous namespace)",
1560                               sizeof "(anonymous namespace)" - 1);
1561         }
1562     }
1563
1564   return d_make_name (di, name, len);
1565 }
1566
1567 /* operator_name ::= many different two character encodings.
1568                  ::= cv <type>
1569                  ::= v <digit> <source-name>
1570
1571    This list is sorted for binary search.  */
1572
1573 #define NL(s) s, (sizeof s) - 1
1574
1575 CP_STATIC_IF_GLIBCPP_V3
1576 const struct demangle_operator_info cplus_demangle_operators[] =
1577 {
1578   { "aN", NL ("&="),        2 },
1579   { "aS", NL ("="),         2 },
1580   { "aa", NL ("&&"),        2 },
1581   { "ad", NL ("&"),         1 },
1582   { "an", NL ("&"),         2 },
1583   { "at", NL ("alignof "),   1 },
1584   { "az", NL ("alignof "),   1 },
1585   { "cc", NL ("const_cast"), 2 },
1586   { "cl", NL ("()"),        2 },
1587   { "cm", NL (","),         2 },
1588   { "co", NL ("~"),         1 },
1589   { "dV", NL ("/="),        2 },
1590   { "da", NL ("delete[] "), 1 },
1591   { "dc", NL ("dynamic_cast"), 2 },
1592   { "de", NL ("*"),         1 },
1593   { "dl", NL ("delete "),   1 },
1594   { "ds", NL (".*"),        2 },
1595   { "dt", NL ("."),         2 },
1596   { "dv", NL ("/"),         2 },
1597   { "eO", NL ("^="),        2 },
1598   { "eo", NL ("^"),         2 },
1599   { "eq", NL ("=="),        2 },
1600   { "ge", NL (">="),        2 },
1601   { "gs", NL ("::"),        1 },
1602   { "gt", NL (">"),         2 },
1603   { "ix", NL ("[]"),        2 },
1604   { "lS", NL ("<<="),       2 },
1605   { "le", NL ("<="),        2 },
1606   { "li", NL ("operator\"\" "), 1 },
1607   { "ls", NL ("<<"),        2 },
1608   { "lt", NL ("<"),         2 },
1609   { "mI", NL ("-="),        2 },
1610   { "mL", NL ("*="),        2 },
1611   { "mi", NL ("-"),         2 },
1612   { "ml", NL ("*"),         2 },
1613   { "mm", NL ("--"),        1 },
1614   { "na", NL ("new[]"),     3 },
1615   { "ne", NL ("!="),        2 },
1616   { "ng", NL ("-"),         1 },
1617   { "nt", NL ("!"),         1 },
1618   { "nw", NL ("new"),       3 },
1619   { "oR", NL ("|="),        2 },
1620   { "oo", NL ("||"),        2 },
1621   { "or", NL ("|"),         2 },
1622   { "pL", NL ("+="),        2 },
1623   { "pl", NL ("+"),         2 },
1624   { "pm", NL ("->*"),       2 },
1625   { "pp", NL ("++"),        1 },
1626   { "ps", NL ("+"),         1 },
1627   { "pt", NL ("->"),        2 },
1628   { "qu", NL ("?"),         3 },
1629   { "rM", NL ("%="),        2 },
1630   { "rS", NL (">>="),       2 },
1631   { "rc", NL ("reinterpret_cast"), 2 },
1632   { "rm", NL ("%"),         2 },
1633   { "rs", NL (">>"),        2 },
1634   { "sc", NL ("static_cast"), 2 },
1635   { "st", NL ("sizeof "),   1 },
1636   { "sz", NL ("sizeof "),   1 },
1637   { "tr", NL ("throw"),     0 },
1638   { "tw", NL ("throw "),    1 },
1639   { NULL, NULL, 0,          0 }
1640 };
1641
1642 static struct demangle_component *
1643 d_operator_name (struct d_info *di)
1644 {
1645   char c1;
1646   char c2;
1647
1648   c1 = d_next_char (di);
1649   c2 = d_next_char (di);
1650   if (c1 == 'v' && IS_DIGIT (c2))
1651     return d_make_extended_operator (di, c2 - '0', d_source_name (di));
1652   else if (c1 == 'c' && c2 == 'v')
1653     return d_make_comp (di, DEMANGLE_COMPONENT_CAST,
1654                         cplus_demangle_type (di), NULL);
1655   else
1656     {
1657       /* LOW is the inclusive lower bound.  */
1658       int low = 0;
1659       /* HIGH is the exclusive upper bound.  We subtract one to ignore
1660          the sentinel at the end of the array.  */
1661       int high = ((sizeof (cplus_demangle_operators)
1662                    / sizeof (cplus_demangle_operators[0]))
1663                   - 1);
1664
1665       while (1)
1666         {
1667           int i;
1668           const struct demangle_operator_info *p;
1669
1670           i = low + (high - low) / 2;
1671           p = cplus_demangle_operators + i;
1672
1673           if (c1 == p->code[0] && c2 == p->code[1])
1674             return d_make_operator (di, p);
1675
1676           if (c1 < p->code[0] || (c1 == p->code[0] && c2 < p->code[1]))
1677             high = i;
1678           else
1679             low = i + 1;
1680           if (low == high)
1681             return NULL;
1682         }
1683     }
1684 }
1685
1686 static struct demangle_component *
1687 d_make_character (struct d_info *di, int c)
1688 {
1689   struct demangle_component *p;
1690   p = d_make_empty (di);
1691   if (p != NULL)
1692     {
1693       p->type = DEMANGLE_COMPONENT_CHARACTER;
1694       p->u.s_character.character = c;
1695     }
1696   return p;
1697 }
1698
1699 static struct demangle_component *
1700 d_java_resource (struct d_info *di)
1701 {
1702   struct demangle_component *p = NULL;
1703   struct demangle_component *next = NULL;
1704   long len, i;
1705   char c;
1706   const char *str;
1707
1708   len = d_number (di);
1709   if (len <= 1)
1710     return NULL;
1711
1712   /* Eat the leading '_'.  */
1713   if (d_next_char (di) != '_')
1714     return NULL;
1715   len--;
1716
1717   str = d_str (di);
1718   i = 0;
1719
1720   while (len > 0)
1721     {
1722       c = str[i];
1723       if (!c)
1724         return NULL;
1725
1726       /* Each chunk is either a '$' escape...  */
1727       if (c == '$')
1728         {
1729           i++;
1730           switch (str[i++])
1731             {
1732             case 'S':
1733               c = '/';
1734               break;
1735             case '_':
1736               c = '.';
1737               break;
1738             case '$':
1739               c = '$';
1740               break;
1741             default:
1742               return NULL;
1743             }
1744           next = d_make_character (di, c);
1745           d_advance (di, i);
1746           str = d_str (di);
1747           len -= i;
1748           i = 0;
1749           if (next == NULL)
1750             return NULL;
1751         }
1752       /* ... or a sequence of characters.  */
1753       else
1754         {
1755           while (i < len && str[i] && str[i] != '$')
1756             i++;
1757
1758           next = d_make_name (di, str, i);
1759           d_advance (di, i);
1760           str = d_str (di);
1761           len -= i;
1762           i = 0;
1763           if (next == NULL)
1764             return NULL;
1765         }
1766
1767       if (p == NULL)
1768         p = next;
1769       else
1770         {
1771           p = d_make_comp (di, DEMANGLE_COMPONENT_COMPOUND_NAME, p, next);
1772           if (p == NULL)
1773             return NULL;
1774         }
1775     }
1776
1777   p = d_make_comp (di, DEMANGLE_COMPONENT_JAVA_RESOURCE, p, NULL);
1778
1779   return p;
1780 }
1781
1782 /* <special-name> ::= TV <type>
1783                   ::= TT <type>
1784                   ::= TI <type>
1785                   ::= TS <type>
1786                   ::= GV <(object) name>
1787                   ::= T <call-offset> <(base) encoding>
1788                   ::= Tc <call-offset> <call-offset> <(base) encoding>
1789    Also g++ extensions:
1790                   ::= TC <type> <(offset) number> _ <(base) type>
1791                   ::= TF <type>
1792                   ::= TJ <type>
1793                   ::= GR <name>
1794                   ::= GA <encoding>
1795                   ::= Gr <resource name>
1796                   ::= GTt <encoding>
1797                   ::= GTn <encoding>
1798 */
1799
1800 static struct demangle_component *
1801 d_special_name (struct d_info *di)
1802 {
1803   di->expansion += 20;
1804   if (d_check_char (di, 'T'))
1805     {
1806       switch (d_next_char (di))
1807         {
1808         case 'V':
1809           di->expansion -= 5;
1810           return d_make_comp (di, DEMANGLE_COMPONENT_VTABLE,
1811                               cplus_demangle_type (di), NULL);
1812         case 'T':
1813           di->expansion -= 10;
1814           return d_make_comp (di, DEMANGLE_COMPONENT_VTT,
1815                               cplus_demangle_type (di), NULL);
1816         case 'I':
1817           return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO,
1818                               cplus_demangle_type (di), NULL);
1819         case 'S':
1820           return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_NAME,
1821                               cplus_demangle_type (di), NULL);
1822
1823         case 'h':
1824           if (! d_call_offset (di, 'h'))
1825             return NULL;
1826           return d_make_comp (di, DEMANGLE_COMPONENT_THUNK,
1827                               d_encoding (di, 0), NULL);
1828
1829         case 'v':
1830           if (! d_call_offset (di, 'v'))
1831             return NULL;
1832           return d_make_comp (di, DEMANGLE_COMPONENT_VIRTUAL_THUNK,
1833                               d_encoding (di, 0), NULL);
1834
1835         case 'c':
1836           if (! d_call_offset (di, '\0'))
1837             return NULL;
1838           if (! d_call_offset (di, '\0'))
1839             return NULL;
1840           return d_make_comp (di, DEMANGLE_COMPONENT_COVARIANT_THUNK,
1841                               d_encoding (di, 0), NULL);
1842
1843         case 'C':
1844           {
1845             struct demangle_component *derived_type;
1846             long offset;
1847             struct demangle_component *base_type;
1848
1849             derived_type = cplus_demangle_type (di);
1850             offset = d_number (di);
1851             if (offset < 0)
1852               return NULL;
1853             if (! d_check_char (di, '_'))
1854               return NULL;
1855             base_type = cplus_demangle_type (di);
1856             /* We don't display the offset.  FIXME: We should display
1857                it in verbose mode.  */
1858             di->expansion += 5;
1859             return d_make_comp (di, DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
1860                                 base_type, derived_type);
1861           }
1862
1863         case 'F':
1864           return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_FN,
1865                               cplus_demangle_type (di), NULL);
1866         case 'J':
1867           return d_make_comp (di, DEMANGLE_COMPONENT_JAVA_CLASS,
1868                               cplus_demangle_type (di), NULL);
1869
1870         default:
1871           return NULL;
1872         }
1873     }
1874   else if (d_check_char (di, 'G'))
1875     {
1876       switch (d_next_char (di))
1877         {
1878         case 'V':
1879           return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, d_name (di), NULL);
1880
1881         case 'R':
1882           {
1883             struct demangle_component *name = d_name (di);
1884             return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, name,
1885                                 d_number_component (di));
1886           }
1887
1888         case 'A':
1889           return d_make_comp (di, DEMANGLE_COMPONENT_HIDDEN_ALIAS,
1890                               d_encoding (di, 0), NULL);
1891
1892         case 'T':
1893           switch (d_next_char (di))
1894             {
1895             case 'n':
1896               return d_make_comp (di, DEMANGLE_COMPONENT_NONTRANSACTION_CLONE,
1897                                   d_encoding (di, 0), NULL);
1898             default:
1899               /* ??? The proposal is that other letters (such as 'h') stand
1900                  for different variants of transaction cloning, such as
1901                  compiling directly for hardware transaction support.  But
1902                  they still should all be transactional clones of some sort
1903                  so go ahead and call them that.  */
1904             case 't':
1905               return d_make_comp (di, DEMANGLE_COMPONENT_TRANSACTION_CLONE,
1906                                   d_encoding (di, 0), NULL);
1907             }
1908
1909         case 'r':
1910           return d_java_resource (di);
1911
1912         default:
1913           return NULL;
1914         }
1915     }
1916   else
1917     return NULL;
1918 }
1919
1920 /* <call-offset> ::= h <nv-offset> _
1921                  ::= v <v-offset> _
1922
1923    <nv-offset> ::= <(offset) number>
1924
1925    <v-offset> ::= <(offset) number> _ <(virtual offset) number>
1926
1927    The C parameter, if not '\0', is a character we just read which is
1928    the start of the <call-offset>.
1929
1930    We don't display the offset information anywhere.  FIXME: We should
1931    display it in verbose mode.  */
1932
1933 static int
1934 d_call_offset (struct d_info *di, int c)
1935 {
1936   if (c == '\0')
1937     c = d_next_char (di);
1938
1939   if (c == 'h')
1940     d_number (di);
1941   else if (c == 'v')
1942     {
1943       d_number (di);
1944       if (! d_check_char (di, '_'))
1945         return 0;
1946       d_number (di);
1947     }
1948   else
1949     return 0;
1950
1951   if (! d_check_char (di, '_'))
1952     return 0;
1953
1954   return 1;
1955 }
1956
1957 /* <ctor-dtor-name> ::= C1
1958                     ::= C2
1959                     ::= C3
1960                     ::= D0
1961                     ::= D1
1962                     ::= D2
1963 */
1964
1965 static struct demangle_component *
1966 d_ctor_dtor_name (struct d_info *di)
1967 {
1968   if (di->last_name != NULL)
1969     {
1970       if (di->last_name->type == DEMANGLE_COMPONENT_NAME)
1971         di->expansion += di->last_name->u.s_name.len;
1972       else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD)
1973         di->expansion += di->last_name->u.s_string.len;
1974     }
1975   switch (d_peek_char (di))
1976     {
1977     case 'C':
1978       {
1979         enum gnu_v3_ctor_kinds kind;
1980
1981         switch (d_peek_next_char (di))
1982           {
1983           case '1':
1984             kind = gnu_v3_complete_object_ctor;
1985             break;
1986           case '2':
1987             kind = gnu_v3_base_object_ctor;
1988             break;
1989           case '3':
1990             kind = gnu_v3_complete_object_allocating_ctor;
1991             break;
1992           case '5':
1993             kind = gnu_v3_object_ctor_group;
1994             break;
1995           default:
1996             return NULL;
1997           }
1998         d_advance (di, 2);
1999         return d_make_ctor (di, kind, di->last_name);
2000       }
2001
2002     case 'D':
2003       {
2004         enum gnu_v3_dtor_kinds kind;
2005
2006         switch (d_peek_next_char (di))
2007           {
2008           case '0':
2009             kind = gnu_v3_deleting_dtor;
2010             break;
2011           case '1':
2012             kind = gnu_v3_complete_object_dtor;
2013             break;
2014           case '2':
2015             kind = gnu_v3_base_object_dtor;
2016             break;
2017           case '5':
2018             kind = gnu_v3_object_dtor_group;
2019             break;
2020           default:
2021             return NULL;
2022           }
2023         d_advance (di, 2);
2024         return d_make_dtor (di, kind, di->last_name);
2025       }
2026
2027     default:
2028       return NULL;
2029     }
2030 }
2031
2032 /* <type> ::= <builtin-type>
2033           ::= <function-type>
2034           ::= <class-enum-type>
2035           ::= <array-type>
2036           ::= <pointer-to-member-type>
2037           ::= <template-param>
2038           ::= <template-template-param> <template-args>
2039           ::= <substitution>
2040           ::= <CV-qualifiers> <type>
2041           ::= P <type>
2042           ::= R <type>
2043           ::= O <type> (C++0x)
2044           ::= C <type>
2045           ::= G <type>
2046           ::= U <source-name> <type>
2047
2048    <builtin-type> ::= various one letter codes
2049                   ::= u <source-name>
2050 */
2051
2052 CP_STATIC_IF_GLIBCPP_V3
2053 const struct demangle_builtin_type_info
2054 cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT] =
2055 {
2056   /* a */ { NL ("signed char"), NL ("signed char"),     D_PRINT_DEFAULT },
2057   /* b */ { NL ("bool"),        NL ("boolean"),         D_PRINT_BOOL },
2058   /* c */ { NL ("char"),        NL ("byte"),            D_PRINT_DEFAULT },
2059   /* d */ { NL ("double"),      NL ("double"),          D_PRINT_FLOAT },
2060   /* e */ { NL ("long double"), NL ("long double"),     D_PRINT_FLOAT },
2061   /* f */ { NL ("float"),       NL ("float"),           D_PRINT_FLOAT },
2062   /* g */ { NL ("__float128"),  NL ("__float128"),      D_PRINT_FLOAT },
2063   /* h */ { NL ("unsigned char"), NL ("unsigned char"), D_PRINT_DEFAULT },
2064   /* i */ { NL ("int"),         NL ("int"),             D_PRINT_INT },
2065   /* j */ { NL ("unsigned int"), NL ("unsigned"),       D_PRINT_UNSIGNED },
2066   /* k */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
2067   /* l */ { NL ("long"),        NL ("long"),            D_PRINT_LONG },
2068   /* m */ { NL ("unsigned long"), NL ("unsigned long"), D_PRINT_UNSIGNED_LONG },
2069   /* n */ { NL ("__int128"),    NL ("__int128"),        D_PRINT_DEFAULT },
2070   /* o */ { NL ("unsigned __int128"), NL ("unsigned __int128"),
2071             D_PRINT_DEFAULT },
2072   /* p */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
2073   /* q */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
2074   /* r */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
2075   /* s */ { NL ("short"),       NL ("short"),           D_PRINT_DEFAULT },
2076   /* t */ { NL ("unsigned short"), NL ("unsigned short"), D_PRINT_DEFAULT },
2077   /* u */ { NULL, 0,            NULL, 0,                D_PRINT_DEFAULT },
2078   /* v */ { NL ("void"),        NL ("void"),            D_PRINT_VOID },
2079   /* w */ { NL ("wchar_t"),     NL ("char"),            D_PRINT_DEFAULT },
2080   /* x */ { NL ("long long"),   NL ("long"),            D_PRINT_LONG_LONG },
2081   /* y */ { NL ("unsigned long long"), NL ("unsigned long long"),
2082             D_PRINT_UNSIGNED_LONG_LONG },
2083   /* z */ { NL ("..."),         NL ("..."),             D_PRINT_DEFAULT },
2084   /* 26 */ { NL ("decimal32"),  NL ("decimal32"),       D_PRINT_DEFAULT },
2085   /* 27 */ { NL ("decimal64"),  NL ("decimal64"),       D_PRINT_DEFAULT },
2086   /* 28 */ { NL ("decimal128"), NL ("decimal128"),      D_PRINT_DEFAULT },
2087   /* 29 */ { NL ("half"),       NL ("half"),            D_PRINT_FLOAT },
2088   /* 30 */ { NL ("char16_t"),   NL ("char16_t"),        D_PRINT_DEFAULT },
2089   /* 31 */ { NL ("char32_t"),   NL ("char32_t"),        D_PRINT_DEFAULT },
2090   /* 32 */ { NL ("decltype(nullptr)"),  NL ("decltype(nullptr)"),
2091              D_PRINT_DEFAULT },
2092 };
2093
2094 CP_STATIC_IF_GLIBCPP_V3
2095 struct demangle_component *
2096 cplus_demangle_type (struct d_info *di)
2097 {
2098   char peek;
2099   struct demangle_component *ret;
2100   int can_subst;
2101
2102   /* The ABI specifies that when CV-qualifiers are used, the base type
2103      is substitutable, and the fully qualified type is substitutable,
2104      but the base type with a strict subset of the CV-qualifiers is
2105      not substitutable.  The natural recursive implementation of the
2106      CV-qualifiers would cause subsets to be substitutable, so instead
2107      we pull them all off now.
2108
2109      FIXME: The ABI says that order-insensitive vendor qualifiers
2110      should be handled in the same way, but we have no way to tell
2111      which vendor qualifiers are order-insensitive and which are
2112      order-sensitive.  So we just assume that they are all
2113      order-sensitive.  g++ 3.4 supports only one vendor qualifier,
2114      __vector, and it treats it as order-sensitive when mangling
2115      names.  */
2116
2117   peek = d_peek_char (di);
2118   if (peek == 'r' || peek == 'V' || peek == 'K')
2119     {
2120       struct demangle_component **pret;
2121
2122       pret = d_cv_qualifiers (di, &ret, 0);
2123       if (pret == NULL)
2124         return NULL;
2125       *pret = cplus_demangle_type (di);
2126       if (! *pret || ! d_add_substitution (di, ret))
2127         return NULL;
2128       return ret;
2129     }
2130
2131   can_subst = 1;
2132
2133   switch (peek)
2134     {
2135     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
2136     case 'h': case 'i': case 'j':           case 'l': case 'm': case 'n':
2137     case 'o':                               case 's': case 't':
2138     case 'v': case 'w': case 'x': case 'y': case 'z':
2139       ret = d_make_builtin_type (di,
2140                                  &cplus_demangle_builtin_types[peek - 'a']);
2141       di->expansion += ret->u.s_builtin.type->len;
2142       can_subst = 0;
2143       d_advance (di, 1);
2144       break;
2145
2146     case 'u':
2147       d_advance (di, 1);
2148       ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE,
2149                          d_source_name (di), NULL);
2150       break;
2151
2152     case 'F':
2153       ret = d_function_type (di);
2154       break;
2155
2156     case '0': case '1': case '2': case '3': case '4':
2157     case '5': case '6': case '7': case '8': case '9':
2158     case 'N':
2159     case 'Z':
2160       ret = d_class_enum_type (di);
2161       break;
2162
2163     case 'A':
2164       ret = d_array_type (di);
2165       break;
2166
2167     case 'M':
2168       ret = d_pointer_to_member_type (di);
2169       break;
2170
2171     case 'T':
2172       ret = d_template_param (di);
2173       if (d_peek_char (di) == 'I')
2174         {
2175           /* This is <template-template-param> <template-args>.  The
2176              <template-template-param> part is a substitution
2177              candidate.  */
2178           if (! d_add_substitution (di, ret))
2179             return NULL;
2180           ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
2181                              d_template_args (di));
2182         }
2183       break;
2184
2185     case 'S':
2186       /* If this is a special substitution, then it is the start of
2187          <class-enum-type>.  */
2188       {
2189         char peek_next;
2190
2191         peek_next = d_peek_next_char (di);
2192         if (IS_DIGIT (peek_next)
2193             || peek_next == '_'
2194             || IS_UPPER (peek_next))
2195           {
2196             ret = d_substitution (di, 0);
2197             /* The substituted name may have been a template name and
2198                may be followed by tepmlate args.  */
2199             if (d_peek_char (di) == 'I')
2200               ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
2201                                  d_template_args (di));
2202             else
2203               can_subst = 0;
2204           }
2205         else
2206           {
2207             ret = d_class_enum_type (di);
2208             /* If the substitution was a complete type, then it is not
2209                a new substitution candidate.  However, if the
2210                substitution was followed by template arguments, then
2211                the whole thing is a substitution candidate.  */
2212             if (ret != NULL && ret->type == DEMANGLE_COMPONENT_SUB_STD)
2213               can_subst = 0;
2214           }
2215       }
2216       break;
2217
2218     case 'O':
2219       d_advance (di, 1);
2220       ret = d_make_comp (di, DEMANGLE_COMPONENT_RVALUE_REFERENCE,
2221                          cplus_demangle_type (di), NULL);
2222       break;
2223
2224     case 'P':
2225       d_advance (di, 1);
2226       ret = d_make_comp (di, DEMANGLE_COMPONENT_POINTER,
2227                          cplus_demangle_type (di), NULL);
2228       break;
2229
2230     case 'R':
2231       d_advance (di, 1);
2232       ret = d_make_comp (di, DEMANGLE_COMPONENT_REFERENCE,
2233                          cplus_demangle_type (di), NULL);
2234       break;
2235
2236     case 'C':
2237       d_advance (di, 1);
2238       ret = d_make_comp (di, DEMANGLE_COMPONENT_COMPLEX,
2239                          cplus_demangle_type (di), NULL);
2240       break;
2241
2242     case 'G':
2243       d_advance (di, 1);
2244       ret = d_make_comp (di, DEMANGLE_COMPONENT_IMAGINARY,
2245                          cplus_demangle_type (di), NULL);
2246       break;
2247
2248     case 'U':
2249       d_advance (di, 1);
2250       ret = d_source_name (di);
2251       ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
2252                          cplus_demangle_type (di), ret);
2253       break;
2254
2255     case 'D':
2256       can_subst = 0;
2257       d_advance (di, 1);
2258       peek = d_next_char (di);
2259       switch (peek)
2260         {
2261         case 'T':
2262         case 't':
2263           /* decltype (expression) */
2264           ret = d_make_comp (di, DEMANGLE_COMPONENT_DECLTYPE,
2265                              d_expression (di), NULL);
2266           if (ret && d_next_char (di) != 'E')
2267             ret = NULL;
2268           can_subst = 1;
2269           break;
2270           
2271         case 'p':
2272           /* Pack expansion.  */
2273           ret = d_make_comp (di, DEMANGLE_COMPONENT_PACK_EXPANSION,
2274                              cplus_demangle_type (di), NULL);
2275           can_subst = 1;
2276           break;
2277
2278         case 'a':
2279           /* auto */
2280           ret = d_make_name (di, "auto", 4);
2281           break;
2282           
2283         case 'f':
2284           /* 32-bit decimal floating point */
2285           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[26]);
2286           di->expansion += ret->u.s_builtin.type->len;
2287           break;
2288         case 'd':
2289           /* 64-bit DFP */
2290           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[27]);
2291           di->expansion += ret->u.s_builtin.type->len;
2292           break;
2293         case 'e':
2294           /* 128-bit DFP */
2295           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[28]);
2296           di->expansion += ret->u.s_builtin.type->len;
2297           break;
2298         case 'h':
2299           /* 16-bit half-precision FP */
2300           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[29]);
2301           di->expansion += ret->u.s_builtin.type->len;
2302           break;
2303         case 's':
2304           /* char16_t */
2305           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[30]);
2306           di->expansion += ret->u.s_builtin.type->len;
2307           break;
2308         case 'i':
2309           /* char32_t */
2310           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[31]);
2311           di->expansion += ret->u.s_builtin.type->len;
2312           break;
2313
2314         case 'F':
2315           /* Fixed point types. DF<int bits><length><fract bits><sat>  */
2316           ret = d_make_empty (di);
2317           ret->type = DEMANGLE_COMPONENT_FIXED_TYPE;
2318           if ((ret->u.s_fixed.accum = IS_DIGIT (d_peek_char (di))))
2319             /* For demangling we don't care about the bits.  */
2320             d_number (di);
2321           ret->u.s_fixed.length = cplus_demangle_type (di);
2322           if (ret->u.s_fixed.length == NULL)
2323             return NULL;
2324           d_number (di);
2325           peek = d_next_char (di);
2326           ret->u.s_fixed.sat = (peek == 's');
2327           break;
2328
2329         case 'v':
2330           ret = d_vector_type (di);
2331           can_subst = 1;
2332           break;
2333
2334         case 'n':
2335           /* decltype(nullptr) */
2336           ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[32]);
2337           di->expansion += ret->u.s_builtin.type->len;
2338           break;
2339
2340         default:
2341           return NULL;
2342         }
2343       break;
2344
2345     default:
2346       return NULL;
2347     }
2348
2349   if (can_subst)
2350     {
2351       if (! d_add_substitution (di, ret))
2352         return NULL;
2353     }
2354
2355   return ret;
2356 }
2357
2358 /* <CV-qualifiers> ::= [r] [V] [K]  */
2359
2360 static struct demangle_component **
2361 d_cv_qualifiers (struct d_info *di,
2362                  struct demangle_component **pret, int member_fn)
2363 {
2364   struct demangle_component **pstart;
2365   char peek;
2366
2367   pstart = pret;
2368   peek = d_peek_char (di);
2369   while (peek == 'r' || peek == 'V' || peek == 'K')
2370     {
2371       enum demangle_component_type t;
2372
2373       d_advance (di, 1);
2374       if (peek == 'r')
2375         {
2376           t = (member_fn
2377                ? DEMANGLE_COMPONENT_RESTRICT_THIS
2378                : DEMANGLE_COMPONENT_RESTRICT);
2379           di->expansion += sizeof "restrict";
2380         }
2381       else if (peek == 'V')
2382         {
2383           t = (member_fn
2384                ? DEMANGLE_COMPONENT_VOLATILE_THIS
2385                : DEMANGLE_COMPONENT_VOLATILE);
2386           di->expansion += sizeof "volatile";
2387         }
2388       else
2389         {
2390           t = (member_fn
2391                ? DEMANGLE_COMPONENT_CONST_THIS
2392                : DEMANGLE_COMPONENT_CONST);
2393           di->expansion += sizeof "const";
2394         }
2395
2396       *pret = d_make_comp (di, t, NULL, NULL);
2397       if (*pret == NULL)
2398         return NULL;
2399       pret = &d_left (*pret);
2400
2401       peek = d_peek_char (di);
2402     }
2403
2404   if (!member_fn && peek == 'F')
2405     {
2406       while (pstart != pret)
2407         {
2408           switch ((*pstart)->type)
2409             {
2410             case DEMANGLE_COMPONENT_RESTRICT:
2411               (*pstart)->type = DEMANGLE_COMPONENT_RESTRICT_THIS;
2412               break;
2413             case DEMANGLE_COMPONENT_VOLATILE:
2414               (*pstart)->type = DEMANGLE_COMPONENT_VOLATILE_THIS;
2415               break;
2416             case DEMANGLE_COMPONENT_CONST:
2417               (*pstart)->type = DEMANGLE_COMPONENT_CONST_THIS;
2418               break;
2419             default:
2420               break;
2421             }
2422           pstart = &d_left (*pstart);
2423         }
2424     }
2425
2426   return pret;
2427 }
2428
2429 /* <function-type> ::= F [Y] <bare-function-type> E  */
2430
2431 static struct demangle_component *
2432 d_function_type (struct d_info *di)
2433 {
2434   struct demangle_component *ret;
2435
2436   if (! d_check_char (di, 'F'))
2437     return NULL;
2438   if (d_peek_char (di) == 'Y')
2439     {
2440       /* Function has C linkage.  We don't print this information.
2441          FIXME: We should print it in verbose mode.  */
2442       d_advance (di, 1);
2443     }
2444   ret = d_bare_function_type (di, 1);
2445   if (! d_check_char (di, 'E'))
2446     return NULL;
2447   return ret;
2448 }
2449
2450 /* <type>+ */
2451
2452 static struct demangle_component *
2453 d_parmlist (struct d_info *di)
2454 {
2455   struct demangle_component *tl;
2456   struct demangle_component **ptl;
2457
2458   tl = NULL;
2459   ptl = &tl;
2460   while (1)
2461     {
2462       struct demangle_component *type;
2463
2464       char peek = d_peek_char (di);
2465       if (peek == '\0' || peek == 'E' || peek == '.')
2466         break;
2467       type = cplus_demangle_type (di);
2468       if (type == NULL)
2469         return NULL;
2470       *ptl = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, type, NULL);
2471       if (*ptl == NULL)
2472         return NULL;
2473       ptl = &d_right (*ptl);
2474     }
2475
2476   /* There should be at least one parameter type besides the optional
2477      return type.  A function which takes no arguments will have a
2478      single parameter type void.  */
2479   if (tl == NULL)
2480     return NULL;
2481
2482   /* If we have a single parameter type void, omit it.  */
2483   if (d_right (tl) == NULL
2484       && d_left (tl)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
2485       && d_left (tl)->u.s_builtin.type->print == D_PRINT_VOID)
2486     {
2487       di->expansion -= d_left (tl)->u.s_builtin.type->len;
2488       d_left (tl) = NULL;
2489     }
2490
2491   return tl;
2492 }
2493
2494 /* <bare-function-type> ::= [J]<type>+  */
2495
2496 static struct demangle_component *
2497 d_bare_function_type (struct d_info *di, int has_return_type)
2498 {
2499   struct demangle_component *return_type;
2500   struct demangle_component *tl;
2501   char peek;
2502
2503   /* Detect special qualifier indicating that the first argument
2504      is the return type.  */
2505   peek = d_peek_char (di);
2506   if (peek == 'J')
2507     {
2508       d_advance (di, 1);
2509       has_return_type = 1;
2510     }
2511
2512   if (has_return_type)
2513     {
2514       return_type = cplus_demangle_type (di);
2515       if (return_type == NULL)
2516         return NULL;
2517     }
2518   else
2519     return_type = NULL;
2520
2521   tl = d_parmlist (di);
2522   if (tl == NULL)
2523     return NULL;
2524
2525   return d_make_comp (di, DEMANGLE_COMPONENT_FUNCTION_TYPE,
2526                       return_type, tl);
2527 }
2528
2529 /* <class-enum-type> ::= <name>  */
2530
2531 static struct demangle_component *
2532 d_class_enum_type (struct d_info *di)
2533 {
2534   return d_name (di);
2535 }
2536
2537 /* <array-type> ::= A <(positive dimension) number> _ <(element) type>
2538                 ::= A [<(dimension) expression>] _ <(element) type>
2539 */
2540
2541 static struct demangle_component *
2542 d_array_type (struct d_info *di)
2543 {
2544   char peek;
2545   struct demangle_component *dim;
2546
2547   if (! d_check_char (di, 'A'))
2548     return NULL;
2549
2550   peek = d_peek_char (di);
2551   if (peek == '_')
2552     dim = NULL;
2553   else if (IS_DIGIT (peek))
2554     {
2555       const char *s;
2556
2557       s = d_str (di);
2558       do
2559         {
2560           d_advance (di, 1);
2561           peek = d_peek_char (di);
2562         }
2563       while (IS_DIGIT (peek));
2564       dim = d_make_name (di, s, d_str (di) - s);
2565       if (dim == NULL)
2566         return NULL;
2567     }
2568   else
2569     {
2570       dim = d_expression (di);
2571       if (dim == NULL)
2572         return NULL;
2573     }
2574
2575   if (! d_check_char (di, '_'))
2576     return NULL;
2577
2578   return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim,
2579                       cplus_demangle_type (di));
2580 }
2581
2582 /* <vector-type> ::= Dv <number> _ <type>
2583                  ::= Dv _ <expression> _ <type> */
2584
2585 static struct demangle_component *
2586 d_vector_type (struct d_info *di)
2587 {
2588   char peek;
2589   struct demangle_component *dim;
2590
2591   peek = d_peek_char (di);
2592   if (peek == '_')
2593     {
2594       d_advance (di, 1);
2595       dim = d_expression (di);
2596     }
2597   else
2598     dim = d_number_component (di);
2599
2600   if (dim == NULL)
2601     return NULL;
2602
2603   if (! d_check_char (di, '_'))
2604     return NULL;
2605
2606   return d_make_comp (di, DEMANGLE_COMPONENT_VECTOR_TYPE, dim,
2607                       cplus_demangle_type (di));
2608 }
2609
2610 /* <pointer-to-member-type> ::= M <(class) type> <(member) type>  */
2611
2612 static struct demangle_component *
2613 d_pointer_to_member_type (struct d_info *di)
2614 {
2615   struct demangle_component *cl;
2616   struct demangle_component *mem;
2617   struct demangle_component **pmem;
2618
2619   if (! d_check_char (di, 'M'))
2620     return NULL;
2621
2622   cl = cplus_demangle_type (di);
2623
2624   /* The ABI specifies that any type can be a substitution source, and
2625      that M is followed by two types, and that when a CV-qualified
2626      type is seen both the base type and the CV-qualified types are
2627      substitution sources.  The ABI also specifies that for a pointer
2628      to a CV-qualified member function, the qualifiers are attached to
2629      the second type.  Given the grammar, a plain reading of the ABI
2630      suggests that both the CV-qualified member function and the
2631      non-qualified member function are substitution sources.  However,
2632      g++ does not work that way.  g++ treats only the CV-qualified
2633      member function as a substitution source.  FIXME.  So to work
2634      with g++, we need to pull off the CV-qualifiers here, in order to
2635      avoid calling add_substitution() in cplus_demangle_type().  But
2636      for a CV-qualified member which is not a function, g++ does
2637      follow the ABI, so we need to handle that case here by calling
2638      d_add_substitution ourselves.  */
2639
2640   pmem = d_cv_qualifiers (di, &mem, 1);
2641   if (pmem == NULL)
2642     return NULL;
2643   *pmem = cplus_demangle_type (di);
2644   if (*pmem == NULL)
2645     return NULL;
2646
2647   if (pmem != &mem && (*pmem)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
2648     {
2649       if (! d_add_substitution (di, mem))
2650         return NULL;
2651     }
2652
2653   return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem);
2654 }
2655
2656 /* <non-negative number> _ */
2657
2658 static long
2659 d_compact_number (struct d_info *di)
2660 {
2661   long num;
2662   if (d_peek_char (di) == '_')
2663     num = 0;
2664   else if (d_peek_char (di) == 'n')
2665     return -1;
2666   else
2667     num = d_number (di) + 1;
2668
2669   if (! d_check_char (di, '_'))
2670     return -1;
2671   return num;
2672 }
2673
2674 /* <template-param> ::= T_
2675                     ::= T <(parameter-2 non-negative) number> _
2676 */
2677
2678 static struct demangle_component *
2679 d_template_param (struct d_info *di)
2680 {
2681   long param;
2682
2683   if (! d_check_char (di, 'T'))
2684     return NULL;
2685
2686   param = d_compact_number (di);
2687   if (param < 0)
2688     return NULL;
2689
2690   ++di->did_subs;
2691
2692   return d_make_template_param (di, param);
2693 }
2694
2695 /* <template-args> ::= I <template-arg>+ E  */
2696
2697 static struct demangle_component *
2698 d_template_args (struct d_info *di)
2699 {
2700   struct demangle_component *hold_last_name;
2701   struct demangle_component *al;
2702   struct demangle_component **pal;
2703
2704   /* Preserve the last name we saw--don't let the template arguments
2705      clobber it, as that would give us the wrong name for a subsequent
2706      constructor or destructor.  */
2707   hold_last_name = di->last_name;
2708
2709   if (d_peek_char (di) != 'I'
2710       && d_peek_char (di) != 'J')
2711     return NULL;
2712   d_advance (di, 1);
2713
2714   if (d_peek_char (di) == 'E')
2715     {
2716       /* An argument pack can be empty.  */
2717       d_advance (di, 1);
2718       return d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, NULL, NULL);
2719     }
2720
2721   al = NULL;
2722   pal = &al;
2723   while (1)
2724     {
2725       struct demangle_component *a;
2726
2727       a = d_template_arg (di);
2728       if (a == NULL)
2729         return NULL;
2730
2731       *pal = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, a, NULL);
2732       if (*pal == NULL)
2733         return NULL;
2734       pal = &d_right (*pal);
2735
2736       if (d_peek_char (di) == 'E')
2737         {
2738           d_advance (di, 1);
2739           break;
2740         }
2741     }
2742
2743   di->last_name = hold_last_name;
2744
2745   return al;
2746 }
2747
2748 /* <template-arg> ::= <type>
2749                   ::= X <expression> E
2750                   ::= <expr-primary>
2751 */
2752
2753 static struct demangle_component *
2754 d_template_arg (struct d_info *di)
2755 {
2756   struct demangle_component *ret;
2757
2758   switch (d_peek_char (di))
2759     {
2760     case 'X':
2761       d_advance (di, 1);
2762       ret = d_expression (di);
2763       if (! d_check_char (di, 'E'))
2764         return NULL;
2765       return ret;
2766
2767     case 'L':
2768       return d_expr_primary (di);
2769
2770     case 'I':
2771     case 'J':
2772       /* An argument pack.  */
2773       return d_template_args (di);
2774
2775     default:
2776       return cplus_demangle_type (di);
2777     }
2778 }
2779
2780 /* Parse a sequence of expressions until we hit the terminator
2781    character.  */
2782
2783 static struct demangle_component *
2784 d_exprlist (struct d_info *di, char terminator)
2785 {
2786   struct demangle_component *list = NULL;
2787   struct demangle_component **p = &list;
2788
2789   if (d_peek_char (di) == terminator)
2790     {
2791       d_advance (di, 1);
2792       return d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, NULL, NULL);
2793     }
2794
2795   while (1)
2796     {
2797       struct demangle_component *arg = d_expression (di);
2798       if (arg == NULL)
2799         return NULL;
2800
2801       *p = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, arg, NULL);
2802       if (*p == NULL)
2803         return NULL;
2804       p = &d_right (*p);
2805
2806       if (d_peek_char (di) == terminator)
2807         {
2808           d_advance (di, 1);
2809           break;
2810         }
2811     }
2812
2813   return list;
2814 }
2815
2816 /* Returns nonzero iff OP is an operator for a C++ cast: const_cast,
2817    dynamic_cast, static_cast or reinterpret_cast.  */
2818
2819 static int
2820 op_is_new_cast (struct demangle_component *op)
2821 {
2822   const char *code = op->u.s_operator.op->code;
2823   return (code[1] == 'c'
2824           && (code[0] == 's' || code[0] == 'd'
2825               || code[0] == 'c' || code[0] == 'r'));
2826 }
2827
2828 /* <expression> ::= <(unary) operator-name> <expression>
2829                 ::= <(binary) operator-name> <expression> <expression>
2830                 ::= <(trinary) operator-name> <expression> <expression> <expression>
2831                 ::= cl <expression>+ E
2832                 ::= st <type>
2833                 ::= <template-param>
2834                 ::= sr <type> <unqualified-name>
2835                 ::= sr <type> <unqualified-name> <template-args>
2836                 ::= <expr-primary>
2837 */
2838
2839 static struct demangle_component *
2840 d_expression (struct d_info *di)
2841 {
2842   char peek;
2843
2844   peek = d_peek_char (di);
2845   if (peek == 'L')
2846     return d_expr_primary (di);
2847   else if (peek == 'T')
2848     return d_template_param (di);
2849   else if (peek == 's' && d_peek_next_char (di) == 'r')
2850     {
2851       struct demangle_component *type;
2852       struct demangle_component *name;
2853
2854       d_advance (di, 2);
2855       type = cplus_demangle_type (di);
2856       name = d_unqualified_name (di);
2857       if (d_peek_char (di) != 'I')
2858         return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, name);
2859       else
2860         return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type,
2861                             d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name,
2862                                          d_template_args (di)));
2863     }
2864   else if (peek == 's' && d_peek_next_char (di) == 'p')
2865     {
2866       d_advance (di, 2);
2867       return d_make_comp (di, DEMANGLE_COMPONENT_PACK_EXPANSION,
2868                           d_expression (di), NULL);
2869     }
2870   else if (peek == 'f' && d_peek_next_char (di) == 'p')
2871     {
2872       /* Function parameter used in a late-specified return type.  */
2873       int index;
2874       d_advance (di, 2);
2875       if (d_peek_char (di) == 'T')
2876         {
2877           /* 'this' parameter.  */
2878           d_advance (di, 1);
2879           index = 0;
2880         }
2881       else
2882         {
2883           index = d_compact_number (di) + 1;
2884           if (index == 0)
2885             return NULL;
2886         }
2887       return d_make_function_param (di, index);
2888     }
2889   else if (IS_DIGIT (peek)
2890            || (peek == 'o' && d_peek_next_char (di) == 'n'))
2891     {
2892       /* We can get an unqualified name as an expression in the case of
2893          a dependent function call, i.e. decltype(f(t)).  */
2894       struct demangle_component *name;
2895
2896       if (peek == 'o')
2897         /* operator-function-id, i.e. operator+(t).  */
2898         d_advance (di, 2);
2899
2900       name = d_unqualified_name (di);
2901       if (name == NULL)
2902         return NULL;
2903       if (d_peek_char (di) == 'I')
2904         return d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name,
2905                             d_template_args (di));
2906       else
2907         return name;
2908     }
2909   else if ((peek == 'i' || peek == 't')
2910            && d_peek_next_char (di) == 'l')
2911     {
2912       /* Brace-enclosed initializer list, untyped or typed.  */
2913       struct demangle_component *type = NULL;
2914       if (peek == 't')
2915         type = cplus_demangle_type (di);
2916       d_advance (di, 2);
2917       return d_make_comp (di, DEMANGLE_COMPONENT_INITIALIZER_LIST,
2918                           type, d_exprlist (di, 'E'));
2919     }
2920   else
2921     {
2922       struct demangle_component *op;
2923       const char *code = NULL;
2924       int args;
2925
2926       op = d_operator_name (di);
2927       if (op == NULL)
2928         return NULL;
2929
2930       if (op->type == DEMANGLE_COMPONENT_OPERATOR)
2931         {
2932           code = op->u.s_operator.op->code;
2933           di->expansion += op->u.s_operator.op->len - 2;
2934           if (strcmp (code, "st") == 0)
2935             return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
2936                                 cplus_demangle_type (di));
2937         }
2938
2939       switch (op->type)
2940         {
2941         default:
2942           return NULL;
2943         case DEMANGLE_COMPONENT_OPERATOR:
2944           args = op->u.s_operator.op->args;
2945           break;
2946         case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
2947           args = op->u.s_extended_operator.args;
2948           break;
2949         case DEMANGLE_COMPONENT_CAST:
2950           args = 1;
2951           break;
2952         }
2953
2954       switch (args)
2955         {
2956         case 0:
2957           return d_make_comp (di, DEMANGLE_COMPONENT_NULLARY, op, NULL);
2958
2959         case 1:
2960           {
2961             struct demangle_component *operand;
2962             int suffix = 0;
2963
2964             if (code && (code[0] == 'p' || code[0] == 'm')
2965                 && code[1] == code[0])
2966               /* pp_ and mm_ are the prefix variants.  */
2967               suffix = !d_check_char (di, '_');
2968
2969             if (op->type == DEMANGLE_COMPONENT_CAST
2970                 && d_check_char (di, '_'))
2971               operand = d_exprlist (di, 'E');
2972             else
2973               operand = d_expression (di);
2974
2975             if (suffix)
2976               /* Indicate the suffix variant for d_print_comp.  */
2977               return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
2978                                   d_make_comp (di,
2979                                                DEMANGLE_COMPONENT_BINARY_ARGS,
2980                                                operand, operand));
2981             else
2982               return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
2983                                   operand);
2984           }
2985         case 2:
2986           {
2987             struct demangle_component *left;
2988             struct demangle_component *right;
2989
2990             if (op_is_new_cast (op))
2991               left = cplus_demangle_type (di);
2992             else
2993               left = d_expression (di);
2994             if (!strcmp (code, "cl"))
2995               right = d_exprlist (di, 'E');
2996             else if (!strcmp (code, "dt") || !strcmp (code, "pt"))
2997               {
2998                 right = d_unqualified_name (di);
2999                 if (d_peek_char (di) == 'I')
3000                   right = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE,
3001                                        right, d_template_args (di));
3002               }
3003             else
3004               right = d_expression (di);
3005
3006             return d_make_comp (di, DEMANGLE_COMPONENT_BINARY, op,
3007                                 d_make_comp (di,
3008                                              DEMANGLE_COMPONENT_BINARY_ARGS,
3009                                              left, right));
3010           }
3011         case 3:
3012           {
3013             struct demangle_component *first;
3014             struct demangle_component *second;
3015             struct demangle_component *third;
3016
3017             if (!strcmp (code, "qu"))
3018               {
3019                 /* ?: expression.  */
3020                 first = d_expression (di);
3021                 second = d_expression (di);
3022                 third = d_expression (di);
3023               }
3024             else if (code[0] == 'n')
3025               {
3026                 /* new-expression.  */
3027                 if (code[1] != 'w' && code[1] != 'a')
3028                   return NULL;
3029                 first = d_exprlist (di, '_');
3030                 second = cplus_demangle_type (di);
3031                 if (d_peek_char (di) == 'E')
3032                   {
3033                     d_advance (di, 1);
3034                     third = NULL;
3035                   }
3036                 else if (d_peek_char (di) == 'p'
3037                          && d_peek_next_char (di) == 'i')
3038                   {
3039                     /* Parenthesized initializer.  */
3040                     d_advance (di, 2);
3041                     third = d_exprlist (di, 'E');
3042                   }
3043                 else if (d_peek_char (di) == 'i'
3044                          && d_peek_next_char (di) == 'l')
3045                   /* initializer-list.  */
3046                   third = d_expression (di);
3047                 else
3048                   return NULL;
3049               }
3050             else
3051               return NULL;
3052             return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op,
3053                                 d_make_comp (di,
3054                                              DEMANGLE_COMPONENT_TRINARY_ARG1,
3055                                              first,
3056                                              d_make_comp (di,
3057                                                           DEMANGLE_COMPONENT_TRINARY_ARG2,
3058                                                           second, third)));
3059           }
3060         default:
3061           return NULL;
3062         }
3063     }
3064 }
3065
3066 /* <expr-primary> ::= L <type> <(value) number> E
3067                   ::= L <type> <(value) float> E
3068                   ::= L <mangled-name> E
3069 */
3070
3071 static struct demangle_component *
3072 d_expr_primary (struct d_info *di)
3073 {
3074   struct demangle_component *ret;
3075
3076   if (! d_check_char (di, 'L'))
3077     return NULL;
3078   if (d_peek_char (di) == '_'
3079       /* Workaround for G++ bug; see comment in write_template_arg.  */
3080       || d_peek_char (di) == 'Z')
3081     ret = cplus_demangle_mangled_name (di, 0);
3082   else
3083     {
3084       struct demangle_component *type;
3085       enum demangle_component_type t;
3086       const char *s;
3087
3088       type = cplus_demangle_type (di);
3089       if (type == NULL)
3090         return NULL;
3091
3092       /* If we have a type we know how to print, we aren't going to
3093          print the type name itself.  */
3094       if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
3095           && type->u.s_builtin.type->print != D_PRINT_DEFAULT)
3096         di->expansion -= type->u.s_builtin.type->len;
3097
3098       /* Rather than try to interpret the literal value, we just
3099          collect it as a string.  Note that it's possible to have a
3100          floating point literal here.  The ABI specifies that the
3101          format of such literals is machine independent.  That's fine,
3102          but what's not fine is that versions of g++ up to 3.2 with
3103          -fabi-version=1 used upper case letters in the hex constant,
3104          and dumped out gcc's internal representation.  That makes it
3105          hard to tell where the constant ends, and hard to dump the
3106          constant in any readable form anyhow.  We don't attempt to
3107          handle these cases.  */
3108
3109       t = DEMANGLE_COMPONENT_LITERAL;
3110       if (d_peek_char (di) == 'n')
3111         {
3112           t = DEMANGLE_COMPONENT_LITERAL_NEG;
3113           d_advance (di, 1);
3114         }
3115       s = d_str (di);
3116       while (d_peek_char (di) != 'E')
3117         {
3118           if (d_peek_char (di) == '\0')
3119             return NULL;
3120           d_advance (di, 1);
3121         }
3122       ret = d_make_comp (di, t, type, d_make_name (di, s, d_str (di) - s));
3123     }
3124   if (! d_check_char (di, 'E'))
3125     return NULL;
3126   return ret;
3127 }
3128
3129 /* <local-name> ::= Z <(function) encoding> E <(entity) name> [<discriminator>]
3130                 ::= Z <(function) encoding> E s [<discriminator>]
3131 */
3132
3133 static struct demangle_component *
3134 d_local_name (struct d_info *di)
3135 {
3136   struct demangle_component *function;
3137
3138   if (! d_check_char (di, 'Z'))
3139     return NULL;
3140
3141   function = d_encoding (di, 0);
3142
3143   if (! d_check_char (di, 'E'))
3144     return NULL;
3145
3146   if (d_peek_char (di) == 's')
3147     {
3148       d_advance (di, 1);
3149       if (! d_discriminator (di))
3150         return NULL;
3151       return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function,
3152                           d_make_name (di, "string literal",
3153                                        sizeof "string literal" - 1));
3154     }
3155   else
3156     {
3157       struct demangle_component *name;
3158       int num = -1;
3159
3160       if (d_peek_char (di) == 'd')
3161         {
3162           /* Default argument scope: d <number> _.  */
3163           d_advance (di, 1);
3164           num = d_compact_number (di);
3165           if (num < 0)
3166             return NULL;
3167         }
3168
3169       name = d_name (di);
3170       if (name)
3171         switch (name->type)
3172           {
3173             /* Lambdas and unnamed types have internal discriminators.  */
3174           case DEMANGLE_COMPONENT_LAMBDA:
3175           case DEMANGLE_COMPONENT_UNNAMED_TYPE:
3176             break;
3177           default:
3178             if (! d_discriminator (di))
3179               return NULL;
3180           }
3181       if (num >= 0)
3182         name = d_make_default_arg (di, num, name);
3183       return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
3184     }
3185 }
3186
3187 /* <discriminator> ::= _ <(non-negative) number>
3188
3189    We demangle the discriminator, but we don't print it out.  FIXME:
3190    We should print it out in verbose mode.  */
3191
3192 static int
3193 d_discriminator (struct d_info *di)
3194 {
3195   long discrim;
3196
3197   if (d_peek_char (di) != '_')
3198     return 1;
3199   d_advance (di, 1);
3200   discrim = d_number (di);
3201   if (discrim < 0)
3202     return 0;
3203   return 1;
3204 }
3205
3206 /* <closure-type-name> ::= Ul <lambda-sig> E [ <nonnegative number> ] _ */
3207
3208 static struct demangle_component *
3209 d_lambda (struct d_info *di)
3210 {
3211   struct demangle_component *tl;
3212   struct demangle_component *ret;
3213   int num;
3214
3215   if (! d_check_char (di, 'U'))
3216     return NULL;
3217   if (! d_check_char (di, 'l'))
3218     return NULL;
3219
3220   tl = d_parmlist (di);
3221   if (tl == NULL)
3222     return NULL;
3223
3224   if (! d_check_char (di, 'E'))
3225     return NULL;
3226
3227   num = d_compact_number (di);
3228   if (num < 0)
3229     return NULL;
3230
3231   ret = d_make_empty (di);
3232   if (ret)
3233     {
3234       ret->type = DEMANGLE_COMPONENT_LAMBDA;
3235       ret->u.s_unary_num.sub = tl;
3236       ret->u.s_unary_num.num = num;
3237     }
3238
3239   if (! d_add_substitution (di, ret))
3240     return NULL;
3241
3242   return ret;
3243 }
3244
3245 /* <unnamed-type-name> ::= Ut [ <nonnegative number> ] _ */
3246
3247 static struct demangle_component *
3248 d_unnamed_type (struct d_info *di)
3249 {
3250   struct demangle_component *ret;
3251   long num;
3252
3253   if (! d_check_char (di, 'U'))
3254     return NULL;
3255   if (! d_check_char (di, 't'))
3256     return NULL;
3257
3258   num = d_compact_number (di);
3259   if (num < 0)
3260     return NULL;
3261
3262   ret = d_make_empty (di);
3263   if (ret)
3264     {
3265       ret->type = DEMANGLE_COMPONENT_UNNAMED_TYPE;
3266       ret->u.s_number.number = num;
3267     }
3268
3269   if (! d_add_substitution (di, ret))
3270     return NULL;
3271
3272   return ret;
3273 }
3274
3275 /* <clone-suffix> ::= [ . <clone-type-identifier> ] [ . <nonnegative number> ]*
3276 */
3277
3278 static struct demangle_component *
3279 d_clone_suffix (struct d_info *di, struct demangle_component *encoding)
3280 {
3281   const char *suffix = d_str (di);
3282   const char *pend = suffix;
3283   struct demangle_component *n;
3284
3285   if (*pend == '.' && (IS_LOWER (pend[1]) || pend[1] == '_'))
3286     {
3287       pend += 2;
3288       while (IS_LOWER (*pend) || *pend == '_')
3289         ++pend;
3290     }
3291   while (*pend == '.' && IS_DIGIT (pend[1]))
3292     {
3293       pend += 2;
3294       while (IS_DIGIT (*pend))
3295         ++pend;
3296     }
3297   d_advance (di, pend - suffix);
3298   n = d_make_name (di, suffix, pend - suffix);
3299   return d_make_comp (di, DEMANGLE_COMPONENT_CLONE, encoding, n);
3300 }
3301
3302 /* Add a new substitution.  */
3303
3304 static int
3305 d_add_substitution (struct d_info *di, struct demangle_component *dc)
3306 {
3307   if (dc == NULL)
3308     return 0;
3309   if (di->next_sub >= di->num_subs)
3310     return 0;
3311   di->subs[di->next_sub] = dc;
3312   ++di->next_sub;
3313   return 1;
3314 }
3315
3316 /* <substitution> ::= S <seq-id> _
3317                   ::= S_
3318                   ::= St
3319                   ::= Sa
3320                   ::= Sb
3321                   ::= Ss
3322                   ::= Si
3323                   ::= So
3324                   ::= Sd
3325
3326    If PREFIX is non-zero, then this type is being used as a prefix in
3327    a qualified name.  In this case, for the standard substitutions, we
3328    need to check whether we are being used as a prefix for a
3329    constructor or destructor, and return a full template name.
3330    Otherwise we will get something like std::iostream::~iostream()
3331    which does not correspond particularly well to any function which
3332    actually appears in the source.
3333 */
3334
3335 static const struct d_standard_sub_info standard_subs[] =
3336 {
3337   { 't', NL ("std"),
3338     NL ("std"),
3339     NULL, 0 },
3340   { 'a', NL ("std::allocator"),
3341     NL ("std::allocator"),
3342     NL ("allocator") },
3343   { 'b', NL ("std::basic_string"),
3344     NL ("std::basic_string"),
3345     NL ("basic_string") },
3346   { 's', NL ("std::string"),
3347     NL ("std::basic_string<char, std::char_traits<char>, std::allocator<char> >"),
3348     NL ("basic_string") },
3349   { 'i', NL ("std::istream"),
3350     NL ("std::basic_istream<char, std::char_traits<char> >"),
3351     NL ("basic_istream") },
3352   { 'o', NL ("std::ostream"),
3353     NL ("std::basic_ostream<char, std::char_traits<char> >"),
3354     NL ("basic_ostream") },
3355   { 'd', NL ("std::iostream"),
3356     NL ("std::basic_iostream<char, std::char_traits<char> >"),
3357     NL ("basic_iostream") }
3358 };
3359
3360 static struct demangle_component *
3361 d_substitution (struct d_info *di, int prefix)
3362 {
3363   char c;
3364
3365   if (! d_check_char (di, 'S'))
3366     return NULL;
3367
3368   c = d_next_char (di);
3369   if (c == '_' || IS_DIGIT (c) || IS_UPPER (c))
3370     {
3371       unsigned int id;
3372
3373       id = 0;
3374       if (c != '_')
3375         {
3376           do
3377             {
3378               unsigned int new_id;
3379
3380               if (IS_DIGIT (c))
3381                 new_id = id * 36 + c - '0';
3382               else if (IS_UPPER (c))
3383                 new_id = id * 36 + c - 'A' + 10;
3384               else
3385                 return NULL;
3386               if (new_id < id)
3387                 return NULL;
3388               id = new_id;
3389               c = d_next_char (di);
3390             }
3391           while (c != '_');
3392
3393           ++id;
3394         }
3395
3396       if (id >= (unsigned int) di->next_sub)
3397         return NULL;
3398
3399       ++di->did_subs;
3400
3401       return di->subs[id];
3402     }
3403   else
3404     {
3405       int verbose;
3406       const struct d_standard_sub_info *p;
3407       const struct d_standard_sub_info *pend;
3408
3409       verbose = (di->options & DMGL_VERBOSE) != 0;
3410       if (! verbose && prefix)
3411         {
3412           char peek;
3413
3414           peek = d_peek_char (di);
3415           if (peek == 'C' || peek == 'D')
3416             verbose = 1;
3417         }
3418
3419       pend = (&standard_subs[0]
3420               + sizeof standard_subs / sizeof standard_subs[0]);
3421       for (p = &standard_subs[0]; p < pend; ++p)
3422         {
3423           if (c == p->code)
3424             {
3425               const char *s;
3426               int len;
3427
3428               if (p->set_last_name != NULL)
3429                 di->last_name = d_make_sub (di, p->set_last_name,
3430                                             p->set_last_name_len);
3431               if (verbose)
3432                 {
3433                   s = p->full_expansion;
3434                   len = p->full_len;
3435                 }
3436               else
3437                 {
3438                   s = p->simple_expansion;
3439                   len = p->simple_len;
3440                 }
3441               di->expansion += len;
3442               return d_make_sub (di, s, len);
3443             }
3444         }
3445
3446       return NULL;
3447     }
3448 }
3449
3450 /* Initialize a growable string.  */
3451
3452 static void
3453 d_growable_string_init (struct d_growable_string *dgs, size_t estimate)
3454 {
3455   dgs->buf = NULL;
3456   dgs->len = 0;
3457   dgs->alc = 0;
3458   dgs->allocation_failure = 0;
3459
3460   if (estimate > 0)
3461     d_growable_string_resize (dgs, estimate);
3462 }
3463
3464 /* Grow a growable string to a given size.  */
3465
3466 static inline void
3467 d_growable_string_resize (struct d_growable_string *dgs, size_t need)
3468 {
3469   size_t newalc;
3470   char *newbuf;
3471
3472   if (dgs->allocation_failure)
3473     return;
3474
3475   /* Start allocation at two bytes to avoid any possibility of confusion
3476      with the special value of 1 used as a return in *palc to indicate
3477      allocation failures.  */
3478   newalc = dgs->alc > 0 ? dgs->alc : 2;
3479   while (newalc < need)
3480     newalc <<= 1;
3481
3482   newbuf = (char *) realloc (dgs->buf, newalc);
3483   if (newbuf == NULL)
3484     {
3485       free (dgs->buf);
3486       dgs->buf = NULL;
3487       dgs->len = 0;
3488       dgs->alc = 0;
3489       dgs->allocation_failure = 1;
3490       return;
3491     }
3492   dgs->buf = newbuf;
3493   dgs->alc = newalc;
3494 }
3495
3496 /* Append a buffer to a growable string.  */
3497
3498 static inline void
3499 d_growable_string_append_buffer (struct d_growable_string *dgs,
3500                                  const char *s, size_t l)
3501 {
3502   size_t need;
3503
3504   need = dgs->len + l + 1;
3505   if (need > dgs->alc)
3506     d_growable_string_resize (dgs, need);
3507
3508   if (dgs->allocation_failure)
3509     return;
3510
3511   memcpy (dgs->buf + dgs->len, s, l);
3512   dgs->buf[dgs->len + l] = '\0';
3513   dgs->len += l;
3514 }
3515
3516 /* Bridge growable strings to the callback mechanism.  */
3517
3518 static void
3519 d_growable_string_callback_adapter (const char *s, size_t l, void *opaque)
3520 {
3521   struct d_growable_string *dgs = (struct d_growable_string*) opaque;
3522
3523   d_growable_string_append_buffer (dgs, s, l);
3524 }
3525
3526 /* Initialize a print information structure.  */
3527
3528 static void
3529 d_print_init (struct d_print_info *dpi, demangle_callbackref callback,
3530               void *opaque)
3531 {
3532   dpi->len = 0;
3533   dpi->last_char = '\0';
3534   dpi->templates = NULL;
3535   dpi->modifiers = NULL;
3536   dpi->pack_index = 0;
3537   dpi->flush_count = 0;
3538
3539   dpi->callback = callback;
3540   dpi->opaque = opaque;
3541
3542   dpi->demangle_failure = 0;
3543 }
3544
3545 /* Indicate that an error occurred during printing, and test for error.  */
3546
3547 static inline void
3548 d_print_error (struct d_print_info *dpi)
3549 {
3550   dpi->demangle_failure = 1;
3551 }
3552
3553 static inline int
3554 d_print_saw_error (struct d_print_info *dpi)
3555 {
3556   return dpi->demangle_failure != 0;
3557 }
3558
3559 /* Flush buffered characters to the callback.  */
3560
3561 static inline void
3562 d_print_flush (struct d_print_info *dpi)
3563 {
3564   dpi->buf[dpi->len] = '\0';
3565   dpi->callback (dpi->buf, dpi->len, dpi->opaque);
3566   dpi->len = 0;
3567   dpi->flush_count++;
3568 }
3569
3570 /* Append characters and buffers for printing.  */
3571
3572 static inline void
3573 d_append_char (struct d_print_info *dpi, char c)
3574 {
3575   if (dpi->len == sizeof (dpi->buf) - 1)
3576     d_print_flush (dpi);
3577
3578   dpi->buf[dpi->len++] = c;
3579   dpi->last_char = c;
3580 }
3581
3582 static inline void
3583 d_append_buffer (struct d_print_info *dpi, const char *s, size_t l)
3584 {
3585   size_t i;
3586
3587   for (i = 0; i < l; i++)
3588     d_append_char (dpi, s[i]);
3589 }
3590
3591 static inline void
3592 d_append_string (struct d_print_info *dpi, const char *s)
3593 {
3594   d_append_buffer (dpi, s, strlen (s));
3595 }
3596
3597 static inline void
3598 d_append_num (struct d_print_info *dpi, long l)
3599 {
3600   char buf[25];
3601   sprintf (buf,"%ld", l);
3602   d_append_string (dpi, buf);
3603 }
3604
3605 static inline char
3606 d_last_char (struct d_print_info *dpi)
3607 {
3608   return dpi->last_char;
3609 }
3610
3611 /* Turn components into a human readable string.  OPTIONS is the
3612    options bits passed to the demangler.  DC is the tree to print.
3613    CALLBACK is a function to call to flush demangled string segments
3614    as they fill the intermediate buffer, and OPAQUE is a generalized
3615    callback argument.  On success, this returns 1.  On failure,
3616    it returns 0, indicating a bad parse.  It does not use heap
3617    memory to build an output string, so cannot encounter memory
3618    allocation failure.  */
3619
3620 CP_STATIC_IF_GLIBCPP_V3
3621 int
3622 cplus_demangle_print_callback (int options,
3623                                const struct demangle_component *dc,
3624                                demangle_callbackref callback, void *opaque)
3625 {
3626   struct d_print_info dpi;
3627
3628   d_print_init (&dpi, callback, opaque);
3629
3630   d_print_comp (&dpi, options, dc);
3631
3632   d_print_flush (&dpi);
3633
3634   return ! d_print_saw_error (&dpi);
3635 }
3636
3637 /* Turn components into a human readable string.  OPTIONS is the
3638    options bits passed to the demangler.  DC is the tree to print.
3639    ESTIMATE is a guess at the length of the result.  This returns a
3640    string allocated by malloc, or NULL on error.  On success, this
3641    sets *PALC to the size of the allocated buffer.  On failure, this
3642    sets *PALC to 0 for a bad parse, or to 1 for a memory allocation
3643    failure.  */
3644
3645 CP_STATIC_IF_GLIBCPP_V3
3646 char *
3647 cplus_demangle_print (int options, const struct demangle_component *dc,
3648                       int estimate, size_t *palc)
3649 {
3650   struct d_growable_string dgs;
3651
3652   d_growable_string_init (&dgs, estimate);
3653
3654   if (! cplus_demangle_print_callback (options, dc,
3655                                        d_growable_string_callback_adapter,
3656                                        &dgs))
3657     {
3658       free (dgs.buf);
3659       *palc = 0;
3660       return NULL;
3661     }
3662
3663   *palc = dgs.allocation_failure ? 1 : dgs.alc;
3664   return dgs.buf;
3665 }
3666
3667 /* Returns the I'th element of the template arglist ARGS, or NULL on
3668    failure.  */
3669
3670 static struct demangle_component *
3671 d_index_template_argument (struct demangle_component *args, int i)
3672 {
3673   struct demangle_component *a;
3674
3675   for (a = args;
3676        a != NULL;
3677        a = d_right (a))
3678     {
3679       if (a->type != DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
3680         return NULL;
3681       if (i <= 0)
3682         break;
3683       --i;
3684     }
3685   if (i != 0 || a == NULL)
3686     return NULL;
3687
3688   return d_left (a);
3689 }
3690
3691 /* Returns the template argument from the current context indicated by DC,
3692    which is a DEMANGLE_COMPONENT_TEMPLATE_PARAM, or NULL.  */
3693
3694 static struct demangle_component *
3695 d_lookup_template_argument (struct d_print_info *dpi,
3696                             const struct demangle_component *dc)
3697 {
3698   if (dpi->templates == NULL)
3699     {
3700       d_print_error (dpi);
3701       return NULL;
3702     }
3703         
3704   return d_index_template_argument
3705     (d_right (dpi->templates->template_decl),
3706      dc->u.s_number.number);
3707 }
3708
3709 /* Returns a template argument pack used in DC (any will do), or NULL.  */
3710
3711 static struct demangle_component *
3712 d_find_pack (struct d_print_info *dpi,
3713              const struct demangle_component *dc)
3714 {
3715   struct demangle_component *a;
3716   if (dc == NULL)
3717     return NULL;
3718
3719   switch (dc->type)
3720     {
3721     case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
3722       a = d_lookup_template_argument (dpi, dc);
3723       if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
3724         return a;
3725       return NULL;
3726
3727     case DEMANGLE_COMPONENT_PACK_EXPANSION:
3728       return NULL;
3729       
3730     case DEMANGLE_COMPONENT_LAMBDA:
3731     case DEMANGLE_COMPONENT_NAME:
3732     case DEMANGLE_COMPONENT_OPERATOR:
3733     case DEMANGLE_COMPONENT_BUILTIN_TYPE:
3734     case DEMANGLE_COMPONENT_SUB_STD:
3735     case DEMANGLE_COMPONENT_CHARACTER:
3736     case DEMANGLE_COMPONENT_FUNCTION_PARAM:
3737     case DEMANGLE_COMPONENT_UNNAMED_TYPE:
3738       return NULL;
3739
3740     case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
3741       return d_find_pack (dpi, dc->u.s_extended_operator.name);
3742     case DEMANGLE_COMPONENT_CTOR:
3743       return d_find_pack (dpi, dc->u.s_ctor.name);
3744     case DEMANGLE_COMPONENT_DTOR:
3745       return d_find_pack (dpi, dc->u.s_dtor.name);
3746
3747     default:
3748       a = d_find_pack (dpi, d_left (dc));
3749       if (a)
3750         return a;
3751       return d_find_pack (dpi, d_right (dc));
3752     }
3753 }
3754
3755 /* Returns the length of the template argument pack DC.  */
3756
3757 static int
3758 d_pack_length (const struct demangle_component *dc)
3759 {
3760   int count = 0;
3761   while (dc && dc->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST
3762          && d_left (dc) != NULL)
3763     {
3764       ++count;
3765       dc = d_right (dc);
3766     }
3767   return count;
3768 }
3769
3770 /* DC is a component of a mangled expression.  Print it, wrapped in parens
3771    if needed.  */
3772
3773 static void
3774 d_print_subexpr (struct d_print_info *dpi, int options,
3775                  const struct demangle_component *dc)
3776 {
3777   int simple = 0;
3778   if (dc->type == DEMANGLE_COMPONENT_NAME
3779       || dc->type == DEMANGLE_COMPONENT_QUAL_NAME
3780       || dc->type == DEMANGLE_COMPONENT_INITIALIZER_LIST
3781       || dc->type == DEMANGLE_COMPONENT_FUNCTION_PARAM)
3782     simple = 1;
3783   if (!simple)
3784     d_append_char (dpi, '(');
3785   d_print_comp (dpi, options, dc);
3786   if (!simple)
3787     d_append_char (dpi, ')');
3788 }
3789
3790 /* Subroutine to handle components.  */
3791
3792 static void
3793 d_print_comp (struct d_print_info *dpi, int options,
3794               const struct demangle_component *dc)
3795 {
3796   /* Magic variable to let reference smashing skip over the next modifier
3797      without needing to modify *dc.  */
3798   const struct demangle_component *mod_inner = NULL;
3799
3800   if (dc == NULL)
3801     {
3802       d_print_error (dpi);
3803       return;
3804     }
3805   if (d_print_saw_error (dpi))
3806     return;
3807
3808   switch (dc->type)
3809     {
3810     case DEMANGLE_COMPONENT_NAME:
3811       if ((options & DMGL_JAVA) == 0)
3812         d_append_buffer (dpi, dc->u.s_name.s, dc->u.s_name.len);
3813       else
3814         d_print_java_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len);
3815       return;
3816
3817     case DEMANGLE_COMPONENT_QUAL_NAME:
3818     case DEMANGLE_COMPONENT_LOCAL_NAME:
3819       d_print_comp (dpi, options, d_left (dc));
3820       if ((options & DMGL_JAVA) == 0)
3821         d_append_string (dpi, "::");
3822       else
3823         d_append_char (dpi, '.');
3824       d_print_comp (dpi, options, d_right (dc));
3825       return;
3826
3827     case DEMANGLE_COMPONENT_TYPED_NAME:
3828       {
3829         struct d_print_mod *hold_modifiers;
3830         struct demangle_component *typed_name;
3831         struct d_print_mod adpm[4];
3832         unsigned int i;
3833         struct d_print_template dpt;
3834
3835         /* Pass the name down to the type so that it can be printed in
3836            the right place for the type.  We also have to pass down
3837            any CV-qualifiers, which apply to the this parameter.  */
3838         hold_modifiers = dpi->modifiers;
3839         dpi->modifiers = 0;
3840         i = 0;
3841         typed_name = d_left (dc);
3842         while (typed_name != NULL)
3843           {
3844             if (i >= sizeof adpm / sizeof adpm[0])
3845               {
3846                 d_print_error (dpi);
3847                 return;
3848               }
3849
3850             adpm[i].next = dpi->modifiers;
3851             dpi->modifiers = &adpm[i];
3852             adpm[i].mod = typed_name;
3853             adpm[i].printed = 0;
3854             adpm[i].templates = dpi->templates;
3855             ++i;
3856
3857             if (typed_name->type != DEMANGLE_COMPONENT_RESTRICT_THIS
3858                 && typed_name->type != DEMANGLE_COMPONENT_VOLATILE_THIS
3859                 && typed_name->type != DEMANGLE_COMPONENT_CONST_THIS)
3860               break;
3861
3862             typed_name = d_left (typed_name);
3863           }
3864
3865         if (typed_name == NULL)
3866           {
3867             d_print_error (dpi);
3868             return;
3869           }
3870
3871         /* If typed_name is a template, then it applies to the
3872            function type as well.  */
3873         if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
3874           {
3875             dpt.next = dpi->templates;
3876             dpi->templates = &dpt;
3877             dpt.template_decl = typed_name;
3878           }
3879
3880         /* If typed_name is a DEMANGLE_COMPONENT_LOCAL_NAME, then
3881            there may be CV-qualifiers on its right argument which
3882            really apply here; this happens when parsing a class which
3883            is local to a function.  */
3884         if (typed_name->type == DEMANGLE_COMPONENT_LOCAL_NAME)
3885           {
3886             struct demangle_component *local_name;
3887
3888             local_name = d_right (typed_name);
3889             if (local_name->type == DEMANGLE_COMPONENT_DEFAULT_ARG)
3890               local_name = local_name->u.s_unary_num.sub;
3891             while (local_name->type == DEMANGLE_COMPONENT_RESTRICT_THIS
3892                    || local_name->type == DEMANGLE_COMPONENT_VOLATILE_THIS
3893                    || local_name->type == DEMANGLE_COMPONENT_CONST_THIS)
3894               {
3895                 if (i >= sizeof adpm / sizeof adpm[0])
3896                   {
3897                     d_print_error (dpi);
3898                     return;
3899                   }
3900
3901                 adpm[i] = adpm[i - 1];
3902                 adpm[i].next = &adpm[i - 1];
3903                 dpi->modifiers = &adpm[i];
3904
3905                 adpm[i - 1].mod = local_name;
3906                 adpm[i - 1].printed = 0;
3907                 adpm[i - 1].templates = dpi->templates;
3908                 ++i;
3909
3910                 local_name = d_left (local_name);
3911               }
3912           }
3913
3914         d_print_comp (dpi, options, d_right (dc));
3915
3916         if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
3917           dpi->templates = dpt.next;
3918
3919         /* If the modifiers didn't get printed by the type, print them
3920            now.  */
3921         while (i > 0)
3922           {
3923             --i;
3924             if (! adpm[i].printed)
3925               {
3926                 d_append_char (dpi, ' ');
3927                 d_print_mod (dpi, options, adpm[i].mod);
3928               }
3929           }
3930
3931         dpi->modifiers = hold_modifiers;
3932
3933         return;
3934       }
3935
3936     case DEMANGLE_COMPONENT_TEMPLATE:
3937       {
3938         struct d_print_mod *hold_dpm;
3939         struct demangle_component *dcl;
3940
3941         /* Don't push modifiers into a template definition.  Doing so
3942            could give the wrong definition for a template argument.
3943            Instead, treat the template essentially as a name.  */
3944
3945         hold_dpm = dpi->modifiers;
3946         dpi->modifiers = NULL;
3947
3948         dcl = d_left (dc);
3949
3950         if ((options & DMGL_JAVA) != 0
3951             && dcl->type == DEMANGLE_COMPONENT_NAME
3952             && dcl->u.s_name.len == 6
3953             && strncmp (dcl->u.s_name.s, "JArray", 6) == 0)
3954           {
3955             /* Special-case Java arrays, so that JArray<TYPE> appears
3956                instead as TYPE[].  */
3957
3958             d_print_comp (dpi, options, d_right (dc));
3959             d_append_string (dpi, "[]");
3960           }
3961         else
3962           {
3963             d_print_comp (dpi, options, dcl);
3964             if (d_last_char (dpi) == '<')
3965               d_append_char (dpi, ' ');
3966             d_append_char (dpi, '<');
3967             d_print_comp (dpi, options, d_right (dc));
3968             /* Avoid generating two consecutive '>' characters, to avoid
3969                the C++ syntactic ambiguity.  */
3970             if (d_last_char (dpi) == '>')
3971               d_append_char (dpi, ' ');
3972             d_append_char (dpi, '>');
3973           }
3974
3975         dpi->modifiers = hold_dpm;
3976
3977         return;
3978       }
3979
3980     case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
3981       {
3982         struct d_print_template *hold_dpt;
3983         struct demangle_component *a = d_lookup_template_argument (dpi, dc);
3984
3985         if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
3986           a = d_index_template_argument (a, dpi->pack_index);
3987
3988         if (a == NULL)
3989           {
3990             d_print_error (dpi);
3991             return;
3992           }
3993
3994         /* While processing this parameter, we need to pop the list of
3995            templates.  This is because the template parameter may
3996            itself be a reference to a parameter of an outer
3997            template.  */
3998
3999         hold_dpt = dpi->templates;
4000         dpi->templates = hold_dpt->next;
4001
4002         d_print_comp (dpi, options, a);
4003
4004         dpi->templates = hold_dpt;
4005
4006         return;
4007       }
4008
4009     case DEMANGLE_COMPONENT_CTOR:
4010       d_print_comp (dpi, options, dc->u.s_ctor.name);
4011       return;
4012
4013     case DEMANGLE_COMPONENT_DTOR:
4014       d_append_char (dpi, '~');
4015       d_print_comp (dpi, options, dc->u.s_dtor.name);
4016       return;
4017
4018     case DEMANGLE_COMPONENT_VTABLE:
4019       d_append_string (dpi, "vtable for ");
4020       d_print_comp (dpi, options, d_left (dc));
4021       return;
4022
4023     case DEMANGLE_COMPONENT_VTT:
4024       d_append_string (dpi, "VTT for ");
4025       d_print_comp (dpi, options, d_left (dc));
4026       return;
4027
4028     case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
4029       d_append_string (dpi, "construction vtable for ");
4030       d_print_comp (dpi, options, d_left (dc));
4031       d_append_string (dpi, "-in-");
4032       d_print_comp (dpi, options, d_right (dc));
4033       return;
4034
4035     case DEMANGLE_COMPONENT_TYPEINFO:
4036       d_append_string (dpi, "typeinfo for ");
4037       d_print_comp (dpi, options, d_left (dc));
4038       return;
4039
4040     case DEMANGLE_COMPONENT_TYPEINFO_NAME:
4041       d_append_string (dpi, "typeinfo name for ");
4042       d_print_comp (dpi, options, d_left (dc));
4043       return;
4044
4045     case DEMANGLE_COMPONENT_TYPEINFO_FN:
4046       d_append_string (dpi, "typeinfo fn for ");
4047       d_print_comp (dpi, options, d_left (dc));
4048       return;
4049
4050     case DEMANGLE_COMPONENT_THUNK:
4051       d_append_string (dpi, "non-virtual thunk to ");
4052       d_print_comp (dpi, options, d_left (dc));
4053       return;
4054
4055     case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
4056       d_append_string (dpi, "virtual thunk to ");
4057       d_print_comp (dpi, options, d_left (dc));
4058       return;
4059
4060     case DEMANGLE_COMPONENT_COVARIANT_THUNK:
4061       d_append_string (dpi, "covariant return thunk to ");
4062       d_print_comp (dpi, options, d_left (dc));
4063       return;
4064
4065     case DEMANGLE_COMPONENT_JAVA_CLASS:
4066       d_append_string (dpi, "java Class for ");
4067       d_print_comp (dpi, options, d_left (dc));
4068       return;
4069
4070     case DEMANGLE_COMPONENT_GUARD:
4071       d_append_string (dpi, "guard variable for ");
4072       d_print_comp (dpi, options, d_left (dc));
4073       return;
4074
4075     case DEMANGLE_COMPONENT_REFTEMP:
4076       d_append_string (dpi, "reference temporary #");
4077       d_print_comp (dpi, options, d_right (dc));
4078       d_append_string (dpi, " for ");
4079       d_print_comp (dpi, options, d_left (dc));
4080       return;
4081
4082     case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
4083       d_append_string (dpi, "hidden alias for ");
4084       d_print_comp (dpi, options, d_left (dc));
4085       return;
4086
4087     case DEMANGLE_COMPONENT_TRANSACTION_CLONE:
4088       d_append_string (dpi, "transaction clone for ");
4089       d_print_comp (dpi, options, d_left (dc));
4090       return;
4091
4092     case DEMANGLE_COMPONENT_NONTRANSACTION_CLONE:
4093       d_append_string (dpi, "non-transaction clone for ");
4094       d_print_comp (dpi, options, d_left (dc));
4095       return;
4096
4097     case DEMANGLE_COMPONENT_SUB_STD:
4098       d_append_buffer (dpi, dc->u.s_string.string, dc->u.s_string.len);
4099       return;
4100
4101     case DEMANGLE_COMPONENT_RESTRICT:
4102     case DEMANGLE_COMPONENT_VOLATILE:
4103     case DEMANGLE_COMPONENT_CONST:
4104       {
4105         struct d_print_mod *pdpm;
4106
4107         /* When printing arrays, it's possible to have cases where the
4108            same CV-qualifier gets pushed on the stack multiple times.
4109            We only need to print it once.  */
4110
4111         for (pdpm = dpi->modifiers; pdpm != NULL; pdpm = pdpm->next)
4112           {
4113             if (! pdpm->printed)
4114               {
4115                 if (pdpm->mod->type != DEMANGLE_COMPONENT_RESTRICT
4116                     && pdpm->mod->type != DEMANGLE_COMPONENT_VOLATILE
4117                     && pdpm->mod->type != DEMANGLE_COMPONENT_CONST)
4118                   break;
4119                 if (pdpm->mod->type == dc->type)
4120                   {
4121                     d_print_comp (dpi, options, d_left (dc));
4122                     return;
4123                   }
4124               }
4125           }
4126       }
4127       goto modifier;
4128
4129     case DEMANGLE_COMPONENT_REFERENCE:
4130     case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
4131       {
4132         /* Handle reference smashing: & + && = &.  */
4133         const struct demangle_component *sub = d_left (dc);
4134         if (sub->type == DEMANGLE_COMPONENT_TEMPLATE_PARAM)
4135           {
4136             struct demangle_component *a = d_lookup_template_argument (dpi, sub);
4137             if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
4138               a = d_index_template_argument (a, dpi->pack_index);
4139
4140             if (a == NULL)
4141               {
4142                 d_print_error (dpi);
4143                 return;
4144               }
4145
4146             sub = a;
4147           }
4148
4149         if (sub->type == DEMANGLE_COMPONENT_REFERENCE
4150             || sub->type == dc->type)
4151           dc = sub;
4152         else if (sub->type == DEMANGLE_COMPONENT_RVALUE_REFERENCE)
4153           mod_inner = d_left (sub);
4154       }
4155       /* Fall through.  */
4156
4157     case DEMANGLE_COMPONENT_RESTRICT_THIS:
4158     case DEMANGLE_COMPONENT_VOLATILE_THIS:
4159     case DEMANGLE_COMPONENT_CONST_THIS:
4160     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
4161     case DEMANGLE_COMPONENT_POINTER:
4162     case DEMANGLE_COMPONENT_COMPLEX:
4163     case DEMANGLE_COMPONENT_IMAGINARY:
4164     modifier:
4165       {
4166         /* We keep a list of modifiers on the stack.  */
4167         struct d_print_mod dpm;
4168
4169         dpm.next = dpi->modifiers;
4170         dpi->modifiers = &dpm;
4171         dpm.mod = dc;
4172         dpm.printed = 0;
4173         dpm.templates = dpi->templates;
4174
4175         if (!mod_inner)
4176           mod_inner = d_left (dc);
4177
4178         d_print_comp (dpi, options, mod_inner);
4179
4180         /* If the modifier didn't get printed by the type, print it
4181            now.  */
4182         if (! dpm.printed)
4183           d_print_mod (dpi, options, dc);
4184
4185         dpi->modifiers = dpm.next;
4186
4187         return;
4188       }
4189
4190     case DEMANGLE_COMPONENT_BUILTIN_TYPE:
4191       if ((options & DMGL_JAVA) == 0)
4192         d_append_buffer (dpi, dc->u.s_builtin.type->name,
4193                          dc->u.s_builtin.type->len);
4194       else
4195         d_append_buffer (dpi, dc->u.s_builtin.type->java_name,
4196                          dc->u.s_builtin.type->java_len);
4197       return;
4198
4199     case DEMANGLE_COMPONENT_VENDOR_TYPE:
4200       d_print_comp (dpi, options, d_left (dc));
4201       return;
4202
4203     case DEMANGLE_COMPONENT_FUNCTION_TYPE:
4204       {
4205         if ((options & DMGL_RET_POSTFIX) != 0)
4206           d_print_function_type (dpi,
4207                                  options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
4208                                  dc, dpi->modifiers);
4209
4210         /* Print return type if present */
4211         if (d_left (dc) != NULL && (options & DMGL_RET_POSTFIX) != 0)
4212           d_print_comp (dpi, options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
4213                         d_left (dc));
4214         else if (d_left (dc) != NULL && (options & DMGL_RET_DROP) == 0)
4215           {
4216             struct d_print_mod dpm;
4217
4218             /* We must pass this type down as a modifier in order to
4219                print it in the right location.  */
4220             dpm.next = dpi->modifiers;
4221             dpi->modifiers = &dpm;
4222             dpm.mod = dc;
4223             dpm.printed = 0;
4224             dpm.templates = dpi->templates;
4225
4226             d_print_comp (dpi, options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
4227                           d_left (dc));
4228
4229             dpi->modifiers = dpm.next;
4230
4231             if (dpm.printed)
4232               return;
4233
4234             /* In standard prefix notation, there is a space between the
4235                return type and the function signature.  */
4236             if ((options & DMGL_RET_POSTFIX) == 0)
4237               d_append_char (dpi, ' ');
4238           }
4239
4240         if ((options & DMGL_RET_POSTFIX) == 0)
4241           d_print_function_type (dpi,
4242                                  options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
4243                                  dc, dpi->modifiers);
4244
4245         return;
4246       }
4247
4248     case DEMANGLE_COMPONENT_ARRAY_TYPE:
4249       {
4250         struct d_print_mod *hold_modifiers;
4251         struct d_print_mod adpm[4];
4252         unsigned int i;
4253         struct d_print_mod *pdpm;
4254
4255         /* We must pass this type down as a modifier in order to print
4256            multi-dimensional arrays correctly.  If the array itself is
4257            CV-qualified, we act as though the element type were
4258            CV-qualified.  We do this by copying the modifiers down
4259            rather than fiddling pointers, so that we don't wind up
4260            with a d_print_mod higher on the stack pointing into our
4261            stack frame after we return.  */
4262
4263         hold_modifiers = dpi->modifiers;
4264
4265         adpm[0].next = hold_modifiers;
4266         dpi->modifiers = &adpm[0];
4267         adpm[0].mod = dc;
4268         adpm[0].printed = 0;
4269         adpm[0].templates = dpi->templates;
4270
4271         i = 1;
4272         pdpm = hold_modifiers;
4273         while (pdpm != NULL
4274                && (pdpm->mod->type == DEMANGLE_COMPONENT_RESTRICT
4275                    || pdpm->mod->type == DEMANGLE_COMPONENT_VOLATILE
4276                    || pdpm->mod->type == DEMANGLE_COMPONENT_CONST))
4277           {
4278             if (! pdpm->printed)
4279               {
4280                 if (i >= sizeof adpm / sizeof adpm[0])
4281                   {
4282                     d_print_error (dpi);
4283                     return;
4284                   }
4285
4286                 adpm[i] = *pdpm;
4287                 adpm[i].next = dpi->modifiers;
4288                 dpi->modifiers = &adpm[i];
4289                 pdpm->printed = 1;
4290                 ++i;
4291               }
4292
4293             pdpm = pdpm->next;
4294           }
4295
4296         d_print_comp (dpi, options, d_right (dc));
4297
4298         dpi->modifiers = hold_modifiers;
4299
4300         if (adpm[0].printed)
4301           return;
4302
4303         while (i > 1)
4304           {
4305             --i;
4306             d_print_mod (dpi, options, adpm[i].mod);
4307           }
4308
4309         d_print_array_type (dpi, options, dc, dpi->modifiers);
4310
4311         return;
4312       }
4313
4314     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
4315     case DEMANGLE_COMPONENT_VECTOR_TYPE:
4316       {
4317         struct d_print_mod dpm;
4318
4319         dpm.next = dpi->modifiers;
4320         dpi->modifiers = &dpm;
4321         dpm.mod = dc;
4322         dpm.printed = 0;
4323         dpm.templates = dpi->templates;
4324
4325         d_print_comp (dpi, options, d_right (dc));
4326
4327         /* If the modifier didn't get printed by the type, print it
4328            now.  */
4329         if (! dpm.printed)
4330           d_print_mod (dpi, options, dc);
4331
4332         dpi->modifiers = dpm.next;
4333
4334         return;
4335       }
4336
4337     case DEMANGLE_COMPONENT_FIXED_TYPE:
4338       if (dc->u.s_fixed.sat)
4339         d_append_string (dpi, "_Sat ");
4340       /* Don't print "int _Accum".  */
4341       if (dc->u.s_fixed.length->u.s_builtin.type
4342           != &cplus_demangle_builtin_types['i'-'a'])
4343         {
4344           d_print_comp (dpi, options, dc->u.s_fixed.length);
4345           d_append_char (dpi, ' ');
4346         }
4347       if (dc->u.s_fixed.accum)
4348         d_append_string (dpi, "_Accum");
4349       else
4350         d_append_string (dpi, "_Fract");
4351       return;
4352
4353     case DEMANGLE_COMPONENT_ARGLIST:
4354     case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
4355       if (d_left (dc) != NULL)
4356         d_print_comp (dpi, options, d_left (dc));
4357       if (d_right (dc) != NULL)
4358         {
4359           size_t len;
4360           unsigned long int flush_count;
4361           /* Make sure ", " isn't flushed by d_append_string, otherwise
4362              dpi->len -= 2 wouldn't work.  */
4363           if (dpi->len >= sizeof (dpi->buf) - 2)
4364             d_print_flush (dpi);
4365           d_append_string (dpi, ", ");
4366           len = dpi->len;
4367           flush_count = dpi->flush_count;
4368           d_print_comp (dpi, options, d_right (dc));
4369           /* If that didn't print anything (which can happen with empty
4370              template argument packs), remove the comma and space.  */
4371           if (dpi->flush_count == flush_count && dpi->len == len)
4372             dpi->len -= 2;
4373         }
4374       return;
4375
4376     case DEMANGLE_COMPONENT_INITIALIZER_LIST:
4377       {
4378         struct demangle_component *type = d_left (dc);
4379         struct demangle_component *list = d_right (dc);
4380
4381         if (type)
4382           d_print_comp (dpi, options, type);
4383         d_append_char (dpi, '{');
4384         d_print_comp (dpi, options, list);
4385         d_append_char (dpi, '}');
4386       }
4387       return;
4388
4389     case DEMANGLE_COMPONENT_OPERATOR:
4390       {
4391         const struct demangle_operator_info *op = dc->u.s_operator.op;
4392         int len = op->len;
4393
4394         d_append_string (dpi, "operator");
4395         /* Add a space before new/delete.  */
4396         if (IS_LOWER (op->name[0]))
4397           d_append_char (dpi, ' ');
4398         /* Omit a trailing space.  */
4399         if (op->name[len-1] == ' ')
4400           --len;
4401         d_append_buffer (dpi, op->name, len);
4402         return;
4403       }
4404
4405     case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
4406       d_append_string (dpi, "operator ");
4407       d_print_comp (dpi, options, dc->u.s_extended_operator.name);
4408       return;
4409
4410     case DEMANGLE_COMPONENT_CAST:
4411       d_append_string (dpi, "operator ");
4412       d_print_cast (dpi, options, dc);
4413       return;
4414
4415     case DEMANGLE_COMPONENT_NULLARY:
4416       d_print_expr_op (dpi, options, d_left (dc));
4417       return;
4418
4419     case DEMANGLE_COMPONENT_UNARY:
4420       {
4421         struct demangle_component *op = d_left (dc);
4422         struct demangle_component *operand = d_right (dc);
4423         const char *code = NULL;
4424
4425         if (op->type == DEMANGLE_COMPONENT_OPERATOR)
4426           {
4427             code = op->u.s_operator.op->code;
4428             if (!strcmp (code, "ad"))
4429               {
4430                 /* Don't print the argument list for the address of a
4431                    function.  */
4432                 if (operand->type == DEMANGLE_COMPONENT_TYPED_NAME
4433                     && d_left (operand)->type == DEMANGLE_COMPONENT_QUAL_NAME
4434                     && d_right (operand)->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
4435                   operand = d_left (operand);
4436               }
4437             if (operand->type == DEMANGLE_COMPONENT_BINARY_ARGS)
4438               {
4439                 /* This indicates a suffix operator.  */
4440                 operand = d_left (operand);
4441                 d_print_subexpr (dpi, options, operand);
4442                 d_print_expr_op (dpi, options, op);
4443                 return;
4444               }
4445           }
4446
4447         if (op->type != DEMANGLE_COMPONENT_CAST)
4448           d_print_expr_op (dpi, options, op);
4449         else
4450           {
4451             d_append_char (dpi, '(');
4452             d_print_cast (dpi, options, op);
4453             d_append_char (dpi, ')');
4454           }
4455         if (code && !strcmp (code, "gs"))
4456           /* Avoid parens after '::'.  */
4457           d_print_comp (dpi, options, operand);
4458         else if (code && !strcmp (code, "st"))
4459           /* Always print parens for sizeof (type).  */
4460           {
4461             d_append_char (dpi, '(');
4462             d_print_comp (dpi, options, operand);
4463             d_append_char (dpi, ')');
4464           }
4465         else
4466           d_print_subexpr (dpi, options, operand);
4467       }
4468       return;
4469
4470     case DEMANGLE_COMPONENT_BINARY:
4471       if (d_right (dc)->type != DEMANGLE_COMPONENT_BINARY_ARGS)
4472         {
4473           d_print_error (dpi);
4474           return;
4475         }
4476
4477       if (op_is_new_cast (d_left (dc)))
4478         {
4479           d_print_expr_op (dpi, options, d_left (dc));
4480           d_append_char (dpi, '<');
4481           d_print_comp (dpi, options, d_left (d_right (dc)));
4482           d_append_string (dpi, ">(");
4483           d_print_comp (dpi, options, d_right (d_right (dc)));
4484           d_append_char (dpi, ')');
4485           return;
4486         }
4487
4488       /* We wrap an expression which uses the greater-than operator in
4489          an extra layer of parens so that it does not get confused
4490          with the '>' which ends the template parameters.  */
4491       if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
4492           && d_left (dc)->u.s_operator.op->len == 1
4493           && d_left (dc)->u.s_operator.op->name[0] == '>')
4494         d_append_char (dpi, '(');
4495
4496       if (strcmp (d_left (dc)->u.s_operator.op->code, "cl") == 0
4497           && d_left (d_right (dc))->type == DEMANGLE_COMPONENT_TYPED_NAME)
4498         {
4499           /* Function call used in an expression should not have printed types
4500              of the function arguments.  Values of the function arguments still
4501              get printed below.  */
4502
4503           const struct demangle_component *func = d_left (d_right (dc));
4504
4505           if (d_right (func)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
4506             d_print_error (dpi);
4507           d_print_subexpr (dpi, options, d_left (func));
4508         }
4509       else
4510         d_print_subexpr (dpi, options, d_left (d_right (dc)));
4511       if (strcmp (d_left (dc)->u.s_operator.op->code, "ix") == 0)
4512         {
4513           d_append_char (dpi, '[');
4514           d_print_comp (dpi, options, d_right (d_right (dc)));
4515           d_append_char (dpi, ']');
4516         }
4517       else
4518         {
4519           if (strcmp (d_left (dc)->u.s_operator.op->code, "cl") != 0)
4520             d_print_expr_op (dpi, options, d_left (dc));
4521           d_print_subexpr (dpi, options, d_right (d_right (dc)));
4522         }
4523
4524       if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
4525           && d_left (dc)->u.s_operator.op->len == 1
4526           && d_left (dc)->u.s_operator.op->name[0] == '>')
4527         d_append_char (dpi, ')');
4528
4529       return;
4530
4531     case DEMANGLE_COMPONENT_BINARY_ARGS:
4532       /* We should only see this as part of DEMANGLE_COMPONENT_BINARY.  */
4533       d_print_error (dpi);
4534       return;
4535
4536     case DEMANGLE_COMPONENT_TRINARY:
4537       if (d_right (dc)->type != DEMANGLE_COMPONENT_TRINARY_ARG1
4538           || d_right (d_right (dc))->type != DEMANGLE_COMPONENT_TRINARY_ARG2)
4539         {
4540           d_print_error (dpi);
4541           return;
4542         }
4543       {
4544         struct demangle_component *op = d_left (dc);
4545         struct demangle_component *first = d_left (d_right (dc));
4546         struct demangle_component *second = d_left (d_right (d_right (dc)));
4547         struct demangle_component *third = d_right (d_right (d_right (dc)));
4548
4549         if (!strcmp (op->u.s_operator.op->code, "qu"))
4550           {
4551             d_print_subexpr (dpi, options, first);
4552             d_print_expr_op (dpi, options, op);
4553             d_print_subexpr (dpi, options, second);
4554             d_append_string (dpi, " : ");
4555             d_print_subexpr (dpi, options, third);
4556           }
4557         else
4558           {
4559             d_append_string (dpi, "new ");
4560             if (d_left (first) != NULL)
4561               {
4562                 d_print_subexpr (dpi, options, first);
4563                 d_append_char (dpi, ' ');
4564               }
4565             d_print_comp (dpi, options, second);
4566             if (third)
4567               d_print_subexpr (dpi, options, third);
4568           }
4569       }
4570       return;
4571
4572     case DEMANGLE_COMPONENT_TRINARY_ARG1:
4573     case DEMANGLE_COMPONENT_TRINARY_ARG2:
4574       /* We should only see these are part of DEMANGLE_COMPONENT_TRINARY.  */
4575       d_print_error (dpi);
4576       return;
4577
4578     case DEMANGLE_COMPONENT_LITERAL:
4579     case DEMANGLE_COMPONENT_LITERAL_NEG:
4580       {
4581         enum d_builtin_type_print tp;
4582
4583         /* For some builtin types, produce simpler output.  */
4584         tp = D_PRINT_DEFAULT;
4585         if (d_left (dc)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE)
4586           {
4587             tp = d_left (dc)->u.s_builtin.type->print;
4588             switch (tp)
4589               {
4590               case D_PRINT_INT:
4591               case D_PRINT_UNSIGNED:
4592               case D_PRINT_LONG:
4593               case D_PRINT_UNSIGNED_LONG:
4594               case D_PRINT_LONG_LONG:
4595               case D_PRINT_UNSIGNED_LONG_LONG:
4596                 if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME)
4597                   {
4598                     if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
4599                       d_append_char (dpi, '-');
4600                     d_print_comp (dpi, options, d_right (dc));
4601                     switch (tp)
4602                       {
4603                       default:
4604                         break;
4605                       case D_PRINT_UNSIGNED:
4606                         d_append_char (dpi, 'u');
4607                         break;
4608                       case D_PRINT_LONG:
4609                         d_append_char (dpi, 'l');
4610                         break;
4611                       case D_PRINT_UNSIGNED_LONG:
4612                         d_append_string (dpi, "ul");
4613                         break;
4614                       case D_PRINT_LONG_LONG:
4615                         d_append_string (dpi, "ll");
4616                         break;
4617                       case D_PRINT_UNSIGNED_LONG_LONG:
4618                         d_append_string (dpi, "ull");
4619                         break;
4620                       }
4621                     return;
4622                   }
4623                 break;
4624
4625               case D_PRINT_BOOL:
4626                 if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME
4627                     && d_right (dc)->u.s_name.len == 1
4628                     && dc->type == DEMANGLE_COMPONENT_LITERAL)
4629                   {
4630                     switch (d_right (dc)->u.s_name.s[0])
4631                       {
4632                       case '0':
4633                         d_append_string (dpi, "false");
4634                         return;
4635                       case '1':
4636                         d_append_string (dpi, "true");
4637                         return;
4638                       default:
4639                         break;
4640                       }
4641                   }
4642                 break;
4643
4644               default:
4645                 break;
4646               }
4647           }
4648
4649         d_append_char (dpi, '(');
4650         d_print_comp (dpi, options, d_left (dc));
4651         d_append_char (dpi, ')');
4652         if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
4653           d_append_char (dpi, '-');
4654         if (tp == D_PRINT_FLOAT)
4655           d_append_char (dpi, '[');
4656         d_print_comp (dpi, options, d_right (dc));
4657         if (tp == D_PRINT_FLOAT)
4658           d_append_char (dpi, ']');
4659       }
4660       return;
4661
4662     case DEMANGLE_COMPONENT_NUMBER:
4663       d_append_num (dpi, dc->u.s_number.number);
4664       return;
4665
4666     case DEMANGLE_COMPONENT_JAVA_RESOURCE:
4667       d_append_string (dpi, "java resource ");
4668       d_print_comp (dpi, options, d_left (dc));
4669       return;
4670
4671     case DEMANGLE_COMPONENT_COMPOUND_NAME:
4672       d_print_comp (dpi, options, d_left (dc));
4673       d_print_comp (dpi, options, d_right (dc));
4674       return;
4675
4676     case DEMANGLE_COMPONENT_CHARACTER:
4677       d_append_char (dpi, dc->u.s_character.character);
4678       return;
4679
4680     case DEMANGLE_COMPONENT_DECLTYPE:
4681       d_append_string (dpi, "decltype (");
4682       d_print_comp (dpi, options, d_left (dc));
4683       d_append_char (dpi, ')');
4684       return;
4685
4686     case DEMANGLE_COMPONENT_PACK_EXPANSION:
4687       {
4688         int len;
4689         int i;
4690         struct demangle_component *a = d_find_pack (dpi, d_left (dc));
4691         if (a == NULL)
4692           {
4693             /* d_find_pack won't find anything if the only packs involved
4694                in this expansion are function parameter packs; in that
4695                case, just print the pattern and "...".  */
4696             d_print_subexpr (dpi, options, d_left (dc));
4697             d_append_string (dpi, "...");
4698             return;
4699           }
4700
4701         len = d_pack_length (a);
4702         dc = d_left (dc);
4703         for (i = 0; i < len; ++i)
4704           {
4705             dpi->pack_index = i;
4706             d_print_comp (dpi, options, dc);
4707             if (i < len-1)
4708               d_append_string (dpi, ", ");
4709           }
4710       }
4711       return;
4712
4713     case DEMANGLE_COMPONENT_FUNCTION_PARAM:
4714       {
4715         long num = dc->u.s_number.number;
4716         if (num == 0)
4717           d_append_string (dpi, "this");
4718         else
4719           {
4720             d_append_string (dpi, "{parm#");
4721             d_append_num (dpi, num);
4722             d_append_char (dpi, '}');
4723           }
4724       }
4725       return;
4726
4727     case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
4728       d_append_string (dpi, "global constructors keyed to ");
4729       d_print_comp (dpi, options, dc->u.s_binary.left);
4730       return;
4731
4732     case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
4733       d_append_string (dpi, "global destructors keyed to ");
4734       d_print_comp (dpi, options, dc->u.s_binary.left);
4735       return;
4736
4737     case DEMANGLE_COMPONENT_LAMBDA:
4738       d_append_string (dpi, "{lambda(");
4739       d_print_comp (dpi, options, dc->u.s_unary_num.sub);
4740       d_append_string (dpi, ")#");
4741       d_append_num (dpi, dc->u.s_unary_num.num + 1);
4742       d_append_char (dpi, '}');
4743       return;
4744
4745     case DEMANGLE_COMPONENT_UNNAMED_TYPE:
4746       d_append_string (dpi, "{unnamed type#");
4747       d_append_num (dpi, dc->u.s_number.number + 1);
4748       d_append_char (dpi, '}');
4749       return;
4750
4751     case DEMANGLE_COMPONENT_CLONE:
4752       d_print_comp (dpi, options, d_left (dc));
4753       d_append_string (dpi, " [clone ");
4754       d_print_comp (dpi, options, d_right (dc));
4755       d_append_char (dpi, ']');
4756       return;
4757
4758     default:
4759       d_print_error (dpi);
4760       return;
4761     }
4762 }
4763
4764 /* Print a Java dentifier.  For Java we try to handle encoded extended
4765    Unicode characters.  The C++ ABI doesn't mention Unicode encoding,
4766    so we don't it for C++.  Characters are encoded as
4767    __U<hex-char>+_.  */
4768
4769 static void
4770 d_print_java_identifier (struct d_print_info *dpi, const char *name, int len)
4771 {
4772   const char *p;
4773   const char *end;
4774
4775   end = name + len;
4776   for (p = name; p < end; ++p)
4777     {
4778       if (end - p > 3
4779           && p[0] == '_'
4780           && p[1] == '_'
4781           && p[2] == 'U')
4782         {
4783           unsigned long c;
4784           const char *q;
4785
4786           c = 0;
4787           for (q = p + 3; q < end; ++q)
4788             {
4789               int dig;
4790
4791               if (IS_DIGIT (*q))
4792                 dig = *q - '0';
4793               else if (*q >= 'A' && *q <= 'F')
4794                 dig = *q - 'A' + 10;
4795               else if (*q >= 'a' && *q <= 'f')
4796                 dig = *q - 'a' + 10;
4797               else
4798                 break;
4799
4800               c = c * 16 + dig;
4801             }
4802           /* If the Unicode character is larger than 256, we don't try
4803              to deal with it here.  FIXME.  */
4804           if (q < end && *q == '_' && c < 256)
4805             {
4806               d_append_char (dpi, c);
4807               p = q;
4808               continue;
4809             }
4810         }
4811
4812       d_append_char (dpi, *p);
4813     }
4814 }
4815
4816 /* Print a list of modifiers.  SUFFIX is 1 if we are printing
4817    qualifiers on this after printing a function.  */
4818
4819 static void
4820 d_print_mod_list (struct d_print_info *dpi, int options,
4821                   struct d_print_mod *mods, int suffix)
4822 {
4823   struct d_print_template *hold_dpt;
4824
4825   if (mods == NULL || d_print_saw_error (dpi))
4826     return;
4827
4828   if (mods->printed
4829       || (! suffix
4830           && (mods->mod->type == DEMANGLE_COMPONENT_RESTRICT_THIS
4831               || mods->mod->type == DEMANGLE_COMPONENT_VOLATILE_THIS
4832               || mods->mod->type == DEMANGLE_COMPONENT_CONST_THIS)))
4833     {
4834       d_print_mod_list (dpi, options, mods->next, suffix);
4835       return;
4836     }
4837
4838   mods->printed = 1;
4839
4840   hold_dpt = dpi->templates;
4841   dpi->templates = mods->templates;
4842
4843   if (mods->mod->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
4844     {
4845       d_print_function_type (dpi, options, mods->mod, mods->next);
4846       dpi->templates = hold_dpt;
4847       return;
4848     }
4849   else if (mods->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
4850     {
4851       d_print_array_type (dpi, options, mods->mod, mods->next);
4852       dpi->templates = hold_dpt;
4853       return;
4854     }
4855   else if (mods->mod->type == DEMANGLE_COMPONENT_LOCAL_NAME)
4856     {
4857       struct d_print_mod *hold_modifiers;
4858       struct demangle_component *dc;
4859
4860       /* When this is on the modifier stack, we have pulled any
4861          qualifiers off the right argument already.  Otherwise, we
4862          print it as usual, but don't let the left argument see any
4863          modifiers.  */
4864
4865       hold_modifiers = dpi->modifiers;
4866       dpi->modifiers = NULL;
4867       d_print_comp (dpi, options, d_left (mods->mod));
4868       dpi->modifiers = hold_modifiers;
4869
4870       if ((options & DMGL_JAVA) == 0)
4871         d_append_string (dpi, "::");
4872       else
4873         d_append_char (dpi, '.');
4874
4875       dc = d_right (mods->mod);
4876
4877       if (dc->type == DEMANGLE_COMPONENT_DEFAULT_ARG)
4878         {
4879           d_append_string (dpi, "{default arg#");
4880           d_append_num (dpi, dc->u.s_unary_num.num + 1);
4881           d_append_string (dpi, "}::");
4882           dc = dc->u.s_unary_num.sub;
4883         }
4884
4885       while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
4886              || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
4887              || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
4888         dc = d_left (dc);
4889
4890       d_print_comp (dpi, options, dc);
4891
4892       dpi->templates = hold_dpt;
4893       return;
4894     }
4895
4896   d_print_mod (dpi, options, mods->mod);
4897
4898   dpi->templates = hold_dpt;
4899
4900   d_print_mod_list (dpi, options, mods->next, suffix);
4901 }
4902
4903 /* Print a modifier.  */
4904
4905 static void
4906 d_print_mod (struct d_print_info *dpi, int options,
4907              const struct demangle_component *mod)
4908 {
4909   switch (mod->type)
4910     {
4911     case DEMANGLE_COMPONENT_RESTRICT:
4912     case DEMANGLE_COMPONENT_RESTRICT_THIS:
4913       d_append_string (dpi, " restrict");
4914       return;
4915     case DEMANGLE_COMPONENT_VOLATILE:
4916     case DEMANGLE_COMPONENT_VOLATILE_THIS:
4917       d_append_string (dpi, " volatile");
4918       return;
4919     case DEMANGLE_COMPONENT_CONST:
4920     case DEMANGLE_COMPONENT_CONST_THIS:
4921       d_append_string (dpi, " const");
4922       return;
4923     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
4924       d_append_char (dpi, ' ');
4925       d_print_comp (dpi, options, d_right (mod));
4926       return;
4927     case DEMANGLE_COMPONENT_POINTER:
4928       /* There is no pointer symbol in Java.  */
4929       if ((options & DMGL_JAVA) == 0)
4930         d_append_char (dpi, '*');
4931       return;
4932     case DEMANGLE_COMPONENT_REFERENCE:
4933       d_append_char (dpi, '&');
4934       return;
4935     case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
4936       d_append_string (dpi, "&&");
4937       return;
4938     case DEMANGLE_COMPONENT_COMPLEX:
4939       d_append_string (dpi, "complex ");
4940       return;
4941     case DEMANGLE_COMPONENT_IMAGINARY:
4942       d_append_string (dpi, "imaginary ");
4943       return;
4944     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
4945       if (d_last_char (dpi) != '(')
4946         d_append_char (dpi, ' ');
4947       d_print_comp (dpi, options, d_left (mod));
4948       d_append_string (dpi, "::*");
4949       return;
4950     case DEMANGLE_COMPONENT_TYPED_NAME:
4951       d_print_comp (dpi, options, d_left (mod));
4952       return;
4953     case DEMANGLE_COMPONENT_VECTOR_TYPE:
4954       d_append_string (dpi, " __vector(");
4955       d_print_comp (dpi, options, d_left (mod));
4956       d_append_char (dpi, ')');
4957       return;
4958
4959     default:
4960       /* Otherwise, we have something that won't go back on the
4961          modifier stack, so we can just print it.  */
4962       d_print_comp (dpi, options, mod);
4963       return;
4964     }
4965 }
4966
4967 /* Print a function type, except for the return type.  */
4968
4969 static void
4970 d_print_function_type (struct d_print_info *dpi, int options,
4971                        const struct demangle_component *dc,
4972                        struct d_print_mod *mods)
4973 {
4974   int need_paren;
4975   int need_space;
4976   struct d_print_mod *p;
4977   struct d_print_mod *hold_modifiers;
4978
4979   need_paren = 0;
4980   need_space = 0;
4981   for (p = mods; p != NULL; p = p->next)
4982     {
4983       if (p->printed)
4984         break;
4985
4986       switch (p->mod->type)
4987         {
4988         case DEMANGLE_COMPONENT_POINTER:
4989         case DEMANGLE_COMPONENT_REFERENCE:
4990         case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
4991           need_paren = 1;
4992           break;
4993         case DEMANGLE_COMPONENT_RESTRICT:
4994         case DEMANGLE_COMPONENT_VOLATILE:
4995         case DEMANGLE_COMPONENT_CONST:
4996         case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
4997         case DEMANGLE_COMPONENT_COMPLEX:
4998         case DEMANGLE_COMPONENT_IMAGINARY:
4999         case DEMANGLE_COMPONENT_PTRMEM_TYPE:
5000           need_space = 1;
5001           need_paren = 1;
5002           break;
5003         case DEMANGLE_COMPONENT_RESTRICT_THIS:
5004         case DEMANGLE_COMPONENT_VOLATILE_THIS:
5005         case DEMANGLE_COMPONENT_CONST_THIS:
5006           break;
5007         default:
5008           break;
5009         }
5010       if (need_paren)
5011         break;
5012     }
5013
5014   if (need_paren)
5015     {
5016       if (! need_space)
5017         {
5018           if (d_last_char (dpi) != '('
5019               && d_last_char (dpi) != '*')
5020             need_space = 1;
5021         }
5022       if (need_space && d_last_char (dpi) != ' ')
5023         d_append_char (dpi, ' ');
5024       d_append_char (dpi, '(');
5025     }
5026
5027   hold_modifiers = dpi->modifiers;
5028   dpi->modifiers = NULL;
5029
5030   d_print_mod_list (dpi, options, mods, 0);
5031
5032   if (need_paren)
5033     d_append_char (dpi, ')');
5034
5035   d_append_char (dpi, '(');
5036
5037   if (d_right (dc) != NULL)
5038     d_print_comp (dpi, options, d_right (dc));
5039
5040   d_append_char (dpi, ')');
5041
5042   d_print_mod_list (dpi, options, mods, 1);
5043
5044   dpi->modifiers = hold_modifiers;
5045 }
5046
5047 /* Print an array type, except for the element type.  */
5048
5049 static void
5050 d_print_array_type (struct d_print_info *dpi, int options,
5051                     const struct demangle_component *dc,
5052                     struct d_print_mod *mods)
5053 {
5054   int need_space;
5055
5056   need_space = 1;
5057   if (mods != NULL)
5058     {
5059       int need_paren;
5060       struct d_print_mod *p;
5061
5062       need_paren = 0;
5063       for (p = mods; p != NULL; p = p->next)
5064         {
5065           if (! p->printed)
5066             {
5067               if (p->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
5068                 {
5069                   need_space = 0;
5070                   break;
5071                 }
5072               else
5073                 {
5074                   need_paren = 1;
5075                   need_space = 1;
5076                   break;
5077                 }
5078             }
5079         }
5080
5081       if (need_paren)
5082         d_append_string (dpi, " (");
5083
5084       d_print_mod_list (dpi, options, mods, 0);
5085
5086       if (need_paren)
5087         d_append_char (dpi, ')');
5088     }
5089
5090   if (need_space)
5091     d_append_char (dpi, ' ');
5092
5093   d_append_char (dpi, '[');
5094
5095   if (d_left (dc) != NULL)
5096     d_print_comp (dpi, options, d_left (dc));
5097
5098   d_append_char (dpi, ']');
5099 }
5100
5101 /* Print an operator in an expression.  */
5102
5103 static void
5104 d_print_expr_op (struct d_print_info *dpi, int options,
5105                  const struct demangle_component *dc)
5106 {
5107   if (dc->type == DEMANGLE_COMPONENT_OPERATOR)
5108     d_append_buffer (dpi, dc->u.s_operator.op->name,
5109                      dc->u.s_operator.op->len);
5110   else
5111     d_print_comp (dpi, options, dc);
5112 }
5113
5114 /* Print a cast.  */
5115
5116 static void
5117 d_print_cast (struct d_print_info *dpi, int options,
5118               const struct demangle_component *dc)
5119 {
5120   if (d_left (dc)->type != DEMANGLE_COMPONENT_TEMPLATE)
5121     d_print_comp (dpi, options, d_left (dc));
5122   else
5123     {
5124       struct d_print_mod *hold_dpm;
5125       struct d_print_template dpt;
5126
5127       /* It appears that for a templated cast operator, we need to put
5128          the template parameters in scope for the operator name, but
5129          not for the parameters.  The effect is that we need to handle
5130          the template printing here.  */
5131
5132       hold_dpm = dpi->modifiers;
5133       dpi->modifiers = NULL;
5134
5135       dpt.next = dpi->templates;
5136       dpi->templates = &dpt;
5137       dpt.template_decl = d_left (dc);
5138
5139       d_print_comp (dpi, options, d_left (d_left (dc)));
5140
5141       dpi->templates = dpt.next;
5142
5143       if (d_last_char (dpi) == '<')
5144         d_append_char (dpi, ' ');
5145       d_append_char (dpi, '<');
5146       d_print_comp (dpi, options, d_right (d_left (dc)));
5147       /* Avoid generating two consecutive '>' characters, to avoid
5148          the C++ syntactic ambiguity.  */
5149       if (d_last_char (dpi) == '>')
5150         d_append_char (dpi, ' ');
5151       d_append_char (dpi, '>');
5152
5153       dpi->modifiers = hold_dpm;
5154     }
5155 }
5156
5157 /* Initialize the information structure we use to pass around
5158    information.  */
5159
5160 CP_STATIC_IF_GLIBCPP_V3
5161 void
5162 cplus_demangle_init_info (const char *mangled, int options, size_t len,
5163                           struct d_info *di)
5164 {
5165   di->s = mangled;
5166   di->send = mangled + len;
5167   di->options = options;
5168
5169   di->n = mangled;
5170
5171   /* We can not need more components than twice the number of chars in
5172      the mangled string.  Most components correspond directly to
5173      chars, but the ARGLIST types are exceptions.  */
5174   di->num_comps = 2 * len;
5175   di->next_comp = 0;
5176
5177   /* Similarly, we can not need more substitutions than there are
5178      chars in the mangled string.  */
5179   di->num_subs = len;
5180   di->next_sub = 0;
5181   di->did_subs = 0;
5182
5183   di->last_name = NULL;
5184
5185   di->expansion = 0;
5186 }
5187
5188 /* Internal implementation for the demangler.  If MANGLED is a g++ v3 ABI
5189    mangled name, return strings in repeated callback giving the demangled
5190    name.  OPTIONS is the usual libiberty demangler options.  On success,
5191    this returns 1.  On failure, returns 0.  */
5192
5193 static int
5194 d_demangle_callback (const char *mangled, int options,
5195                      demangle_callbackref callback, void *opaque)
5196 {
5197   enum
5198     {
5199       DCT_TYPE,
5200       DCT_MANGLED,
5201       DCT_GLOBAL_CTORS,
5202       DCT_GLOBAL_DTORS
5203     }
5204   type;
5205   struct d_info di;
5206   struct demangle_component *dc;
5207   int status;
5208
5209   if (mangled[0] == '_' && mangled[1] == 'Z')
5210     type = DCT_MANGLED;
5211   else if (strncmp (mangled, "_GLOBAL_", 8) == 0
5212            && (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$')
5213            && (mangled[9] == 'D' || mangled[9] == 'I')
5214            && mangled[10] == '_')
5215     type = mangled[9] == 'I' ? DCT_GLOBAL_CTORS : DCT_GLOBAL_DTORS;
5216   else
5217     {
5218       if ((options & DMGL_TYPES) == 0)
5219         return 0;
5220       type = DCT_TYPE;
5221     }
5222
5223   cplus_demangle_init_info (mangled, options, strlen (mangled), &di);
5224
5225   {
5226 #ifdef CP_DYNAMIC_ARRAYS
5227     __extension__ struct demangle_component comps[di.num_comps];
5228     __extension__ struct demangle_component *subs[di.num_subs];
5229
5230     di.comps = comps;
5231     di.subs = subs;
5232 #else
5233     di.comps = alloca (di.num_comps * sizeof (*di.comps));
5234     di.subs = alloca (di.num_subs * sizeof (*di.subs));
5235 #endif
5236
5237     switch (type)
5238       {
5239       case DCT_TYPE:
5240         dc = cplus_demangle_type (&di);
5241         break;
5242       case DCT_MANGLED:
5243         dc = cplus_demangle_mangled_name (&di, 1);
5244         break;
5245       case DCT_GLOBAL_CTORS:
5246       case DCT_GLOBAL_DTORS:
5247         d_advance (&di, 11);
5248         dc = d_make_comp (&di,
5249                           (type == DCT_GLOBAL_CTORS
5250                            ? DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS
5251                            : DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS),
5252                           d_make_demangle_mangled_name (&di, d_str (&di)),
5253                           NULL);
5254         d_advance (&di, strlen (d_str (&di)));
5255         break;
5256       }
5257
5258     /* If DMGL_PARAMS is set, then if we didn't consume the entire
5259        mangled string, then we didn't successfully demangle it.  If
5260        DMGL_PARAMS is not set, we didn't look at the trailing
5261        parameters.  */
5262     if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0')
5263       dc = NULL;
5264
5265 #ifdef CP_DEMANGLE_DEBUG
5266     d_dump (dc, 0);
5267 #endif
5268
5269     status = (dc != NULL)
5270              ? cplus_demangle_print_callback (options, dc, callback, opaque)
5271              : 0;
5272   }
5273
5274   return status;
5275 }
5276
5277 /* Entry point for the demangler.  If MANGLED is a g++ v3 ABI mangled
5278    name, return a buffer allocated with malloc holding the demangled
5279    name.  OPTIONS is the usual libiberty demangler options.  On
5280    success, this sets *PALC to the allocated size of the returned
5281    buffer.  On failure, this sets *PALC to 0 for a bad name, or 1 for
5282    a memory allocation failure, and returns NULL.  */
5283
5284 static char *
5285 d_demangle (const char *mangled, int options, size_t *palc)
5286 {
5287   struct d_growable_string dgs;
5288   int status;
5289
5290   d_growable_string_init (&dgs, 0);
5291
5292   status = d_demangle_callback (mangled, options,
5293                                 d_growable_string_callback_adapter, &dgs);
5294   if (status == 0)
5295     {
5296       free (dgs.buf);
5297       *palc = 0;
5298       return NULL;
5299     }
5300
5301   *palc = dgs.allocation_failure ? 1 : dgs.alc;
5302   return dgs.buf;
5303 }
5304
5305 #if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3)
5306
5307 extern char *__cxa_demangle (const char *, char *, size_t *, int *);
5308
5309 /* ia64 ABI-mandated entry point in the C++ runtime library for
5310    performing demangling.  MANGLED_NAME is a NUL-terminated character
5311    string containing the name to be demangled.
5312
5313    OUTPUT_BUFFER is a region of memory, allocated with malloc, of
5314    *LENGTH bytes, into which the demangled name is stored.  If
5315    OUTPUT_BUFFER is not long enough, it is expanded using realloc.
5316    OUTPUT_BUFFER may instead be NULL; in that case, the demangled name
5317    is placed in a region of memory allocated with malloc.
5318
5319    If LENGTH is non-NULL, the length of the buffer containing the
5320    demangled name, is placed in *LENGTH.
5321
5322    The return value is a pointer to the start of the NUL-terminated
5323    demangled name, or NULL if the demangling fails.  The caller is
5324    responsible for deallocating this memory using free.
5325
5326    *STATUS is set to one of the following values:
5327       0: The demangling operation succeeded.
5328      -1: A memory allocation failure occurred.
5329      -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
5330      -3: One of the arguments is invalid.
5331
5332    The demangling is performed using the C++ ABI mangling rules, with
5333    GNU extensions.  */
5334
5335 char *
5336 __cxa_demangle (const char *mangled_name, char *output_buffer,
5337                 size_t *length, int *status)
5338 {
5339   char *demangled;
5340   size_t alc;
5341
5342   if (mangled_name == NULL)
5343     {
5344       if (status != NULL)
5345         *status = -3;
5346       return NULL;
5347     }
5348
5349   if (output_buffer != NULL && length == NULL)
5350     {
5351       if (status != NULL)
5352         *status = -3;
5353       return NULL;
5354     }
5355
5356   demangled = d_demangle (mangled_name, DMGL_PARAMS | DMGL_TYPES, &alc);
5357
5358   if (demangled == NULL)
5359     {
5360       if (status != NULL)
5361         {
5362           if (alc == 1)
5363             *status = -1;
5364           else
5365             *status = -2;
5366         }
5367       return NULL;
5368     }
5369
5370   if (output_buffer == NULL)
5371     {
5372       if (length != NULL)
5373         *length = alc;
5374     }
5375   else
5376     {
5377       if (strlen (demangled) < *length)
5378         {
5379           strcpy (output_buffer, demangled);
5380           free (demangled);
5381           demangled = output_buffer;
5382         }
5383       else
5384         {
5385           free (output_buffer);
5386           *length = alc;
5387         }
5388     }
5389
5390   if (status != NULL)
5391     *status = 0;
5392
5393   return demangled;
5394 }
5395
5396 extern int __gcclibcxx_demangle_callback (const char *,
5397                                           void (*)
5398                                             (const char *, size_t, void *),
5399                                           void *);
5400
5401 /* Alternative, allocationless entry point in the C++ runtime library
5402    for performing demangling.  MANGLED_NAME is a NUL-terminated character
5403    string containing the name to be demangled.
5404
5405    CALLBACK is a callback function, called with demangled string
5406    segments as demangling progresses; it is called at least once,
5407    but may be called more than once.  OPAQUE is a generalized pointer
5408    used as a callback argument.
5409
5410    The return code is one of the following values, equivalent to
5411    the STATUS values of __cxa_demangle() (excluding -1, since this
5412    function performs no memory allocations):
5413       0: The demangling operation succeeded.
5414      -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
5415      -3: One of the arguments is invalid.
5416
5417    The demangling is performed using the C++ ABI mangling rules, with
5418    GNU extensions.  */
5419
5420 int
5421 __gcclibcxx_demangle_callback (const char *mangled_name,
5422                                void (*callback) (const char *, size_t, void *),
5423                                void *opaque)
5424 {
5425   int status;
5426
5427   if (mangled_name == NULL || callback == NULL)
5428     return -3;
5429
5430   status = d_demangle_callback (mangled_name, DMGL_PARAMS | DMGL_TYPES,
5431                                 callback, opaque);
5432   if (status == 0)
5433     return -2;
5434
5435   return 0;
5436 }
5437
5438 #else /* ! (IN_LIBGCC2 || IN_GLIBCPP_V3) */
5439
5440 /* Entry point for libiberty demangler.  If MANGLED is a g++ v3 ABI
5441    mangled name, return a buffer allocated with malloc holding the
5442    demangled name.  Otherwise, return NULL.  */
5443
5444 char *
5445 cplus_demangle_v3 (const char *mangled, int options)
5446 {
5447   size_t alc;
5448
5449   return d_demangle (mangled, options, &alc);
5450 }
5451
5452 int
5453 cplus_demangle_v3_callback (const char *mangled, int options,
5454                             demangle_callbackref callback, void *opaque)
5455 {
5456   return d_demangle_callback (mangled, options, callback, opaque);
5457 }
5458
5459 /* Demangle a Java symbol.  Java uses a subset of the V3 ABI C++ mangling 
5460    conventions, but the output formatting is a little different.
5461    This instructs the C++ demangler not to emit pointer characters ("*"), to
5462    use Java's namespace separator symbol ("." instead of "::"), and to output
5463    JArray<TYPE> as TYPE[].  */
5464
5465 char *
5466 java_demangle_v3 (const char *mangled)
5467 {
5468   size_t alc;
5469
5470   return d_demangle (mangled, DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX, &alc);
5471 }
5472
5473 int
5474 java_demangle_v3_callback (const char *mangled,
5475                            demangle_callbackref callback, void *opaque)
5476 {
5477   return d_demangle_callback (mangled,
5478                               DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX,
5479                               callback, opaque);
5480 }
5481
5482 #endif /* IN_LIBGCC2 || IN_GLIBCPP_V3 */
5483
5484 #ifndef IN_GLIBCPP_V3
5485
5486 /* Demangle a string in order to find out whether it is a constructor
5487    or destructor.  Return non-zero on success.  Set *CTOR_KIND and
5488    *DTOR_KIND appropriately.  */
5489
5490 static int
5491 is_ctor_or_dtor (const char *mangled,
5492                  enum gnu_v3_ctor_kinds *ctor_kind,
5493                  enum gnu_v3_dtor_kinds *dtor_kind)
5494 {
5495   struct d_info di;
5496   struct demangle_component *dc;
5497   int ret;
5498
5499   *ctor_kind = (enum gnu_v3_ctor_kinds) 0;
5500   *dtor_kind = (enum gnu_v3_dtor_kinds) 0;
5501
5502   cplus_demangle_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di);
5503
5504   {
5505 #ifdef CP_DYNAMIC_ARRAYS
5506     __extension__ struct demangle_component comps[di.num_comps];
5507     __extension__ struct demangle_component *subs[di.num_subs];
5508
5509     di.comps = comps;
5510     di.subs = subs;
5511 #else
5512     di.comps = alloca (di.num_comps * sizeof (*di.comps));
5513     di.subs = alloca (di.num_subs * sizeof (*di.subs));
5514 #endif
5515
5516     dc = cplus_demangle_mangled_name (&di, 1);
5517
5518     /* Note that because we did not pass DMGL_PARAMS, we don't expect
5519        to demangle the entire string.  */
5520
5521     ret = 0;
5522     while (dc != NULL)
5523       {
5524         switch (dc->type)
5525           {
5526           default:
5527             dc = NULL;
5528             break;
5529           case DEMANGLE_COMPONENT_TYPED_NAME:
5530           case DEMANGLE_COMPONENT_TEMPLATE:
5531           case DEMANGLE_COMPONENT_RESTRICT_THIS:
5532           case DEMANGLE_COMPONENT_VOLATILE_THIS:
5533           case DEMANGLE_COMPONENT_CONST_THIS:
5534             dc = d_left (dc);
5535             break;
5536           case DEMANGLE_COMPONENT_QUAL_NAME:
5537           case DEMANGLE_COMPONENT_LOCAL_NAME:
5538             dc = d_right (dc);
5539             break;
5540           case DEMANGLE_COMPONENT_CTOR:
5541             *ctor_kind = dc->u.s_ctor.kind;
5542             ret = 1;
5543             dc = NULL;
5544             break;
5545           case DEMANGLE_COMPONENT_DTOR:
5546             *dtor_kind = dc->u.s_dtor.kind;
5547             ret = 1;
5548             dc = NULL;
5549             break;
5550           }
5551       }
5552   }
5553
5554   return ret;
5555 }
5556
5557 /* Return whether NAME is the mangled form of a g++ V3 ABI constructor
5558    name.  A non-zero return indicates the type of constructor.  */
5559
5560 enum gnu_v3_ctor_kinds
5561 is_gnu_v3_mangled_ctor (const char *name)
5562 {
5563   enum gnu_v3_ctor_kinds ctor_kind;
5564   enum gnu_v3_dtor_kinds dtor_kind;
5565
5566   if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
5567     return (enum gnu_v3_ctor_kinds) 0;
5568   return ctor_kind;
5569 }
5570
5571
5572 /* Return whether NAME is the mangled form of a g++ V3 ABI destructor
5573    name.  A non-zero return indicates the type of destructor.  */
5574
5575 enum gnu_v3_dtor_kinds
5576 is_gnu_v3_mangled_dtor (const char *name)
5577 {
5578   enum gnu_v3_ctor_kinds ctor_kind;
5579   enum gnu_v3_dtor_kinds dtor_kind;
5580
5581   if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
5582     return (enum gnu_v3_dtor_kinds) 0;
5583   return dtor_kind;
5584 }
5585
5586 #endif /* IN_GLIBCPP_V3 */
5587
5588 #ifdef STANDALONE_DEMANGLER
5589
5590 #include "getopt.h"
5591 #include "dyn-string.h"
5592
5593 static void print_usage (FILE* fp, int exit_value);
5594
5595 #define IS_ALPHA(CHAR)                                                  \
5596   (((CHAR) >= 'a' && (CHAR) <= 'z')                                     \
5597    || ((CHAR) >= 'A' && (CHAR) <= 'Z'))
5598
5599 /* Non-zero if CHAR is a character than can occur in a mangled name.  */
5600 #define is_mangled_char(CHAR)                                           \
5601   (IS_ALPHA (CHAR) || IS_DIGIT (CHAR)                                   \
5602    || (CHAR) == '_' || (CHAR) == '.' || (CHAR) == '$')
5603
5604 /* The name of this program, as invoked.  */
5605 const char* program_name;
5606
5607 /* Prints usage summary to FP and then exits with EXIT_VALUE.  */
5608
5609 static void
5610 print_usage (FILE* fp, int exit_value)
5611 {
5612   fprintf (fp, "Usage: %s [options] [names ...]\n", program_name);
5613   fprintf (fp, "Options:\n");
5614   fprintf (fp, "  -h,--help       Display this message.\n");
5615   fprintf (fp, "  -p,--no-params  Don't display function parameters\n");
5616   fprintf (fp, "  -v,--verbose    Produce verbose demanglings.\n");
5617   fprintf (fp, "If names are provided, they are demangled.  Otherwise filters standard input.\n");
5618
5619   exit (exit_value);
5620 }
5621
5622 /* Option specification for getopt_long.  */
5623 static const struct option long_options[] = 
5624 {
5625   { "help",      no_argument, NULL, 'h' },
5626   { "no-params", no_argument, NULL, 'p' },
5627   { "verbose",   no_argument, NULL, 'v' },
5628   { NULL,        no_argument, NULL, 0   },
5629 };
5630
5631 /* Main entry for a demangling filter executable.  It will demangle
5632    its command line arguments, if any.  If none are provided, it will
5633    filter stdin to stdout, replacing any recognized mangled C++ names
5634    with their demangled equivalents.  */
5635
5636 int
5637 main (int argc, char *argv[])
5638 {
5639   int i;
5640   int opt_char;
5641   int options = DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES;
5642
5643   /* Use the program name of this program, as invoked.  */
5644   program_name = argv[0];
5645
5646   /* Parse options.  */
5647   do 
5648     {
5649       opt_char = getopt_long (argc, argv, "hpv", long_options, NULL);
5650       switch (opt_char)
5651         {
5652         case '?':  /* Unrecognized option.  */
5653           print_usage (stderr, 1);
5654           break;
5655
5656         case 'h':
5657           print_usage (stdout, 0);
5658           break;
5659
5660         case 'p':
5661           options &= ~ DMGL_PARAMS;
5662           break;
5663
5664         case 'v':
5665           options |= DMGL_VERBOSE;
5666           break;
5667         }
5668     }
5669   while (opt_char != -1);
5670
5671   if (optind == argc) 
5672     /* No command line arguments were provided.  Filter stdin.  */
5673     {
5674       dyn_string_t mangled = dyn_string_new (3);
5675       char *s;
5676
5677       /* Read all of input.  */
5678       while (!feof (stdin))
5679         {
5680           char c;
5681
5682           /* Pile characters into mangled until we hit one that can't
5683              occur in a mangled name.  */
5684           c = getchar ();
5685           while (!feof (stdin) && is_mangled_char (c))
5686             {
5687               dyn_string_append_char (mangled, c);
5688               if (feof (stdin))
5689                 break;
5690               c = getchar ();
5691             }
5692
5693           if (dyn_string_length (mangled) > 0)
5694             {
5695 #ifdef IN_GLIBCPP_V3
5696               s = __cxa_demangle (dyn_string_buf (mangled), NULL, NULL, NULL);
5697 #else
5698               s = cplus_demangle_v3 (dyn_string_buf (mangled), options);
5699 #endif
5700
5701               if (s != NULL)
5702                 {
5703                   fputs (s, stdout);
5704                   free (s);
5705                 }
5706               else
5707                 {
5708                   /* It might not have been a mangled name.  Print the
5709                      original text.  */
5710                   fputs (dyn_string_buf (mangled), stdout);
5711                 }
5712
5713               dyn_string_clear (mangled);
5714             }
5715
5716           /* If we haven't hit EOF yet, we've read one character that
5717              can't occur in a mangled name, so print it out.  */
5718           if (!feof (stdin))
5719             putchar (c);
5720         }
5721
5722       dyn_string_delete (mangled);
5723     }
5724   else
5725     /* Demangle command line arguments.  */
5726     {
5727       /* Loop over command line arguments.  */
5728       for (i = optind; i < argc; ++i)
5729         {
5730           char *s;
5731 #ifdef IN_GLIBCPP_V3
5732           int status;
5733 #endif
5734
5735           /* Attempt to demangle.  */
5736 #ifdef IN_GLIBCPP_V3
5737           s = __cxa_demangle (argv[i], NULL, NULL, &status);
5738 #else
5739           s = cplus_demangle_v3 (argv[i], options);
5740 #endif
5741
5742           /* If it worked, print the demangled name.  */
5743           if (s != NULL)
5744             {
5745               printf ("%s\n", s);
5746               free (s);
5747             }
5748           else
5749             {
5750 #ifdef IN_GLIBCPP_V3
5751               fprintf (stderr, "Failed: %s (status %d)\n", argv[i], status);
5752 #else
5753               fprintf (stderr, "Failed: %s\n", argv[i]);
5754 #endif
5755             }
5756         }
5757     }
5758
5759   return 0;
5760 }
5761
5762 #endif /* STANDALONE_DEMANGLER */