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