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