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