xref: /dflybsd-src/contrib/gdb-7/libiberty/cp-demangle.c (revision f41d807a0c7c535d8f66f0593fb6e95fa20f82d4)
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_NAME:
3484     case DEMANGLE_COMPONENT_OPERATOR:
3485     case DEMANGLE_COMPONENT_BUILTIN_TYPE:
3486     case DEMANGLE_COMPONENT_SUB_STD:
3487     case DEMANGLE_COMPONENT_CHARACTER:
3488     case DEMANGLE_COMPONENT_FUNCTION_PARAM:
3489       return NULL;
3490 
3491     case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
3492       return d_find_pack (dpi, dc->u.s_extended_operator.name);
3493     case DEMANGLE_COMPONENT_CTOR:
3494       return d_find_pack (dpi, dc->u.s_ctor.name);
3495     case DEMANGLE_COMPONENT_DTOR:
3496       return d_find_pack (dpi, dc->u.s_dtor.name);
3497 
3498     default:
3499       a = d_find_pack (dpi, d_left (dc));
3500       if (a)
3501 	return a;
3502       return d_find_pack (dpi, d_right (dc));
3503     }
3504 }
3505 
3506 /* Returns the length of the template argument pack DC.  */
3507 
3508 static int
3509 d_pack_length (const struct demangle_component *dc)
3510 {
3511   int count = 0;
3512   while (dc && dc->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST
3513 	 && d_left (dc) != NULL)
3514     {
3515       ++count;
3516       dc = d_right (dc);
3517     }
3518   return count;
3519 }
3520 
3521 /* DC is a component of a mangled expression.  Print it, wrapped in parens
3522    if needed.  */
3523 
3524 static void
3525 d_print_subexpr (struct d_print_info *dpi,
3526 		 const struct demangle_component *dc)
3527 {
3528   int simple = 0;
3529   if (dc->type == DEMANGLE_COMPONENT_NAME
3530       || dc->type == DEMANGLE_COMPONENT_FUNCTION_PARAM)
3531     simple = 1;
3532   if (!simple)
3533     d_append_char (dpi, '(');
3534   d_print_comp (dpi, dc);
3535   if (!simple)
3536     d_append_char (dpi, ')');
3537 }
3538 
3539 /* Subroutine to handle components.  */
3540 
3541 static void
3542 d_print_comp (struct d_print_info *dpi,
3543               const struct demangle_component *dc)
3544 {
3545   if (dc == NULL)
3546     {
3547       d_print_error (dpi);
3548       return;
3549     }
3550   if (d_print_saw_error (dpi))
3551     return;
3552 
3553   switch (dc->type)
3554     {
3555     case DEMANGLE_COMPONENT_NAME:
3556       if ((dpi->options & DMGL_JAVA) == 0)
3557 	d_append_buffer (dpi, dc->u.s_name.s, dc->u.s_name.len);
3558       else
3559 	d_print_java_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len);
3560       return;
3561 
3562     case DEMANGLE_COMPONENT_QUAL_NAME:
3563     case DEMANGLE_COMPONENT_LOCAL_NAME:
3564       d_print_comp (dpi, d_left (dc));
3565       if ((dpi->options & DMGL_JAVA) == 0)
3566 	d_append_string (dpi, "::");
3567       else
3568 	d_append_char (dpi, '.');
3569       d_print_comp (dpi, d_right (dc));
3570       return;
3571 
3572     case DEMANGLE_COMPONENT_TYPED_NAME:
3573       {
3574 	struct d_print_mod *hold_modifiers;
3575 	struct demangle_component *typed_name;
3576 	struct d_print_mod adpm[4];
3577 	unsigned int i;
3578 	struct d_print_template dpt;
3579 
3580 	/* Pass the name down to the type so that it can be printed in
3581 	   the right place for the type.  We also have to pass down
3582 	   any CV-qualifiers, which apply to the this parameter.  */
3583 	hold_modifiers = dpi->modifiers;
3584 	dpi->modifiers = 0;
3585 	i = 0;
3586 	typed_name = d_left (dc);
3587 	while (typed_name != NULL)
3588 	  {
3589 	    if (i >= sizeof adpm / sizeof adpm[0])
3590 	      {
3591 		d_print_error (dpi);
3592 		return;
3593 	      }
3594 
3595 	    adpm[i].next = dpi->modifiers;
3596 	    dpi->modifiers = &adpm[i];
3597 	    adpm[i].mod = typed_name;
3598 	    adpm[i].printed = 0;
3599 	    adpm[i].templates = dpi->templates;
3600 	    ++i;
3601 
3602 	    if (typed_name->type != DEMANGLE_COMPONENT_RESTRICT_THIS
3603 		&& typed_name->type != DEMANGLE_COMPONENT_VOLATILE_THIS
3604 		&& typed_name->type != DEMANGLE_COMPONENT_CONST_THIS)
3605 	      break;
3606 
3607 	    typed_name = d_left (typed_name);
3608 	  }
3609 
3610 	if (typed_name == NULL)
3611 	  {
3612 	    d_print_error (dpi);
3613 	    return;
3614 	  }
3615 
3616 	/* If typed_name is a template, then it applies to the
3617 	   function type as well.  */
3618 	if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
3619 	  {
3620 	    dpt.next = dpi->templates;
3621 	    dpi->templates = &dpt;
3622 	    dpt.template_decl = typed_name;
3623 	  }
3624 
3625 	/* If typed_name is a DEMANGLE_COMPONENT_LOCAL_NAME, then
3626 	   there may be CV-qualifiers on its right argument which
3627 	   really apply here; this happens when parsing a class which
3628 	   is local to a function.  */
3629 	if (typed_name->type == DEMANGLE_COMPONENT_LOCAL_NAME)
3630 	  {
3631 	    struct demangle_component *local_name;
3632 
3633 	    local_name = d_right (typed_name);
3634 	    if (local_name->type == DEMANGLE_COMPONENT_DEFAULT_ARG)
3635 	      local_name = local_name->u.s_unary_num.sub;
3636 	    while (local_name->type == DEMANGLE_COMPONENT_RESTRICT_THIS
3637 		   || local_name->type == DEMANGLE_COMPONENT_VOLATILE_THIS
3638 		   || local_name->type == DEMANGLE_COMPONENT_CONST_THIS)
3639 	      {
3640 		if (i >= sizeof adpm / sizeof adpm[0])
3641 		  {
3642 		    d_print_error (dpi);
3643 		    return;
3644 		  }
3645 
3646 		adpm[i] = adpm[i - 1];
3647 		adpm[i].next = &adpm[i - 1];
3648 		dpi->modifiers = &adpm[i];
3649 
3650 		adpm[i - 1].mod = local_name;
3651 		adpm[i - 1].printed = 0;
3652 		adpm[i - 1].templates = dpi->templates;
3653 		++i;
3654 
3655 		local_name = d_left (local_name);
3656 	      }
3657 	  }
3658 
3659 	d_print_comp (dpi, d_right (dc));
3660 
3661 	if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
3662 	  dpi->templates = dpt.next;
3663 
3664 	/* If the modifiers didn't get printed by the type, print them
3665 	   now.  */
3666 	while (i > 0)
3667 	  {
3668 	    --i;
3669 	    if (! adpm[i].printed)
3670 	      {
3671 		d_append_char (dpi, ' ');
3672 		d_print_mod (dpi, adpm[i].mod);
3673 	      }
3674 	  }
3675 
3676 	dpi->modifiers = hold_modifiers;
3677 
3678 	return;
3679       }
3680 
3681     case DEMANGLE_COMPONENT_TEMPLATE:
3682       {
3683 	struct d_print_mod *hold_dpm;
3684 	struct demangle_component *dcl;
3685 
3686 	/* Don't push modifiers into a template definition.  Doing so
3687 	   could give the wrong definition for a template argument.
3688 	   Instead, treat the template essentially as a name.  */
3689 
3690 	hold_dpm = dpi->modifiers;
3691 	dpi->modifiers = NULL;
3692 
3693         dcl = d_left (dc);
3694 
3695         if ((dpi->options & DMGL_JAVA) != 0
3696             && dcl->type == DEMANGLE_COMPONENT_NAME
3697             && dcl->u.s_name.len == 6
3698             && strncmp (dcl->u.s_name.s, "JArray", 6) == 0)
3699           {
3700             /* Special-case Java arrays, so that JArray<TYPE> appears
3701                instead as TYPE[].  */
3702 
3703             d_print_comp (dpi, d_right (dc));
3704             d_append_string (dpi, "[]");
3705           }
3706         else
3707           {
3708 	    d_print_comp (dpi, dcl);
3709 	    if (d_last_char (dpi) == '<')
3710 	      d_append_char (dpi, ' ');
3711 	    d_append_char (dpi, '<');
3712 	    d_print_comp (dpi, d_right (dc));
3713 	    /* Avoid generating two consecutive '>' characters, to avoid
3714 	       the C++ syntactic ambiguity.  */
3715 	    if (d_last_char (dpi) == '>')
3716 	      d_append_char (dpi, ' ');
3717 	    d_append_char (dpi, '>');
3718           }
3719 
3720 	dpi->modifiers = hold_dpm;
3721 
3722 	return;
3723       }
3724 
3725     case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
3726       {
3727 	struct d_print_template *hold_dpt;
3728 	struct demangle_component *a = d_lookup_template_argument (dpi, dc);
3729 
3730 	if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
3731 	  a = d_index_template_argument (a, dpi->pack_index);
3732 
3733 	if (a == NULL)
3734 	  {
3735 	    d_print_error (dpi);
3736 	    return;
3737 	  }
3738 
3739 	/* While processing this parameter, we need to pop the list of
3740 	   templates.  This is because the template parameter may
3741 	   itself be a reference to a parameter of an outer
3742 	   template.  */
3743 
3744 	hold_dpt = dpi->templates;
3745 	dpi->templates = hold_dpt->next;
3746 
3747 	d_print_comp (dpi, a);
3748 
3749 	dpi->templates = hold_dpt;
3750 
3751 	return;
3752       }
3753 
3754     case DEMANGLE_COMPONENT_CTOR:
3755       d_print_comp (dpi, dc->u.s_ctor.name);
3756       return;
3757 
3758     case DEMANGLE_COMPONENT_DTOR:
3759       d_append_char (dpi, '~');
3760       d_print_comp (dpi, dc->u.s_dtor.name);
3761       return;
3762 
3763     case DEMANGLE_COMPONENT_VTABLE:
3764       d_append_string (dpi, "vtable for ");
3765       d_print_comp (dpi, d_left (dc));
3766       return;
3767 
3768     case DEMANGLE_COMPONENT_VTT:
3769       d_append_string (dpi, "VTT for ");
3770       d_print_comp (dpi, d_left (dc));
3771       return;
3772 
3773     case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
3774       d_append_string (dpi, "construction vtable for ");
3775       d_print_comp (dpi, d_left (dc));
3776       d_append_string (dpi, "-in-");
3777       d_print_comp (dpi, d_right (dc));
3778       return;
3779 
3780     case DEMANGLE_COMPONENT_TYPEINFO:
3781       d_append_string (dpi, "typeinfo for ");
3782       d_print_comp (dpi, d_left (dc));
3783       return;
3784 
3785     case DEMANGLE_COMPONENT_TYPEINFO_NAME:
3786       d_append_string (dpi, "typeinfo name for ");
3787       d_print_comp (dpi, d_left (dc));
3788       return;
3789 
3790     case DEMANGLE_COMPONENT_TYPEINFO_FN:
3791       d_append_string (dpi, "typeinfo fn for ");
3792       d_print_comp (dpi, d_left (dc));
3793       return;
3794 
3795     case DEMANGLE_COMPONENT_THUNK:
3796       d_append_string (dpi, "non-virtual thunk to ");
3797       d_print_comp (dpi, d_left (dc));
3798       return;
3799 
3800     case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
3801       d_append_string (dpi, "virtual thunk to ");
3802       d_print_comp (dpi, d_left (dc));
3803       return;
3804 
3805     case DEMANGLE_COMPONENT_COVARIANT_THUNK:
3806       d_append_string (dpi, "covariant return thunk to ");
3807       d_print_comp (dpi, d_left (dc));
3808       return;
3809 
3810     case DEMANGLE_COMPONENT_JAVA_CLASS:
3811       d_append_string (dpi, "java Class for ");
3812       d_print_comp (dpi, d_left (dc));
3813       return;
3814 
3815     case DEMANGLE_COMPONENT_GUARD:
3816       d_append_string (dpi, "guard variable for ");
3817       d_print_comp (dpi, d_left (dc));
3818       return;
3819 
3820     case DEMANGLE_COMPONENT_REFTEMP:
3821       d_append_string (dpi, "reference temporary for ");
3822       d_print_comp (dpi, d_left (dc));
3823       return;
3824 
3825     case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
3826       d_append_string (dpi, "hidden alias for ");
3827       d_print_comp (dpi, d_left (dc));
3828       return;
3829 
3830     case DEMANGLE_COMPONENT_SUB_STD:
3831       d_append_buffer (dpi, dc->u.s_string.string, dc->u.s_string.len);
3832       return;
3833 
3834     case DEMANGLE_COMPONENT_RESTRICT:
3835     case DEMANGLE_COMPONENT_VOLATILE:
3836     case DEMANGLE_COMPONENT_CONST:
3837       {
3838 	struct d_print_mod *pdpm;
3839 
3840 	/* When printing arrays, it's possible to have cases where the
3841 	   same CV-qualifier gets pushed on the stack multiple times.
3842 	   We only need to print it once.  */
3843 
3844 	for (pdpm = dpi->modifiers; pdpm != NULL; pdpm = pdpm->next)
3845 	  {
3846 	    if (! pdpm->printed)
3847 	      {
3848 		if (pdpm->mod->type != DEMANGLE_COMPONENT_RESTRICT
3849 		    && pdpm->mod->type != DEMANGLE_COMPONENT_VOLATILE
3850 		    && pdpm->mod->type != DEMANGLE_COMPONENT_CONST)
3851 		  break;
3852 		if (pdpm->mod->type == dc->type)
3853 		  {
3854 		    d_print_comp (dpi, d_left (dc));
3855 		    return;
3856 		  }
3857 	      }
3858 	  }
3859       }
3860       /* Fall through.  */
3861     case DEMANGLE_COMPONENT_RESTRICT_THIS:
3862     case DEMANGLE_COMPONENT_VOLATILE_THIS:
3863     case DEMANGLE_COMPONENT_CONST_THIS:
3864     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
3865     case DEMANGLE_COMPONENT_POINTER:
3866     case DEMANGLE_COMPONENT_REFERENCE:
3867     case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
3868     case DEMANGLE_COMPONENT_COMPLEX:
3869     case DEMANGLE_COMPONENT_IMAGINARY:
3870       {
3871 	/* We keep a list of modifiers on the stack.  */
3872 	struct d_print_mod dpm;
3873 
3874 	dpm.next = dpi->modifiers;
3875 	dpi->modifiers = &dpm;
3876 	dpm.mod = dc;
3877 	dpm.printed = 0;
3878 	dpm.templates = dpi->templates;
3879 
3880 	d_print_comp (dpi, d_left (dc));
3881 
3882 	/* If the modifier didn't get printed by the type, print it
3883 	   now.  */
3884 	if (! dpm.printed)
3885 	  d_print_mod (dpi, dc);
3886 
3887 	dpi->modifiers = dpm.next;
3888 
3889 	return;
3890       }
3891 
3892     case DEMANGLE_COMPONENT_BUILTIN_TYPE:
3893       if ((dpi->options & DMGL_JAVA) == 0)
3894 	d_append_buffer (dpi, dc->u.s_builtin.type->name,
3895 			 dc->u.s_builtin.type->len);
3896       else
3897 	d_append_buffer (dpi, dc->u.s_builtin.type->java_name,
3898 			 dc->u.s_builtin.type->java_len);
3899       return;
3900 
3901     case DEMANGLE_COMPONENT_VENDOR_TYPE:
3902       d_print_comp (dpi, d_left (dc));
3903       return;
3904 
3905     case DEMANGLE_COMPONENT_FUNCTION_TYPE:
3906       {
3907 	if ((dpi->options & DMGL_RET_POSTFIX) != 0)
3908 	  d_print_function_type (dpi, dc, dpi->modifiers);
3909 
3910 	/* Print return type if present */
3911 	if (d_left (dc) != NULL)
3912 	  {
3913 	    struct d_print_mod dpm;
3914 
3915 	    /* We must pass this type down as a modifier in order to
3916 	       print it in the right location.  */
3917 	    dpm.next = dpi->modifiers;
3918 	    dpi->modifiers = &dpm;
3919 	    dpm.mod = dc;
3920 	    dpm.printed = 0;
3921 	    dpm.templates = dpi->templates;
3922 
3923 	    d_print_comp (dpi, d_left (dc));
3924 
3925 	    dpi->modifiers = dpm.next;
3926 
3927 	    if (dpm.printed)
3928 	      return;
3929 
3930 	    /* In standard prefix notation, there is a space between the
3931 	       return type and the function signature.  */
3932 	    if ((dpi->options & DMGL_RET_POSTFIX) == 0)
3933 	      d_append_char (dpi, ' ');
3934 	  }
3935 
3936 	if ((dpi->options & DMGL_RET_POSTFIX) == 0)
3937 	  d_print_function_type (dpi, dc, dpi->modifiers);
3938 
3939 	return;
3940       }
3941 
3942     case DEMANGLE_COMPONENT_ARRAY_TYPE:
3943       {
3944 	struct d_print_mod *hold_modifiers;
3945 	struct d_print_mod adpm[4];
3946 	unsigned int i;
3947 	struct d_print_mod *pdpm;
3948 
3949 	/* We must pass this type down as a modifier in order to print
3950 	   multi-dimensional arrays correctly.  If the array itself is
3951 	   CV-qualified, we act as though the element type were
3952 	   CV-qualified.  We do this by copying the modifiers down
3953 	   rather than fiddling pointers, so that we don't wind up
3954 	   with a d_print_mod higher on the stack pointing into our
3955 	   stack frame after we return.  */
3956 
3957 	hold_modifiers = dpi->modifiers;
3958 
3959 	adpm[0].next = hold_modifiers;
3960 	dpi->modifiers = &adpm[0];
3961 	adpm[0].mod = dc;
3962 	adpm[0].printed = 0;
3963 	adpm[0].templates = dpi->templates;
3964 
3965 	i = 1;
3966 	pdpm = hold_modifiers;
3967 	while (pdpm != NULL
3968 	       && (pdpm->mod->type == DEMANGLE_COMPONENT_RESTRICT
3969 		   || pdpm->mod->type == DEMANGLE_COMPONENT_VOLATILE
3970 		   || pdpm->mod->type == DEMANGLE_COMPONENT_CONST))
3971 	  {
3972 	    if (! pdpm->printed)
3973 	      {
3974 		if (i >= sizeof adpm / sizeof adpm[0])
3975 		  {
3976 		    d_print_error (dpi);
3977 		    return;
3978 		  }
3979 
3980 		adpm[i] = *pdpm;
3981 		adpm[i].next = dpi->modifiers;
3982 		dpi->modifiers = &adpm[i];
3983 		pdpm->printed = 1;
3984 		++i;
3985 	      }
3986 
3987 	    pdpm = pdpm->next;
3988 	  }
3989 
3990 	d_print_comp (dpi, d_right (dc));
3991 
3992 	dpi->modifiers = hold_modifiers;
3993 
3994 	if (adpm[0].printed)
3995 	  return;
3996 
3997 	while (i > 1)
3998 	  {
3999 	    --i;
4000 	    d_print_mod (dpi, adpm[i].mod);
4001 	  }
4002 
4003 	d_print_array_type (dpi, dc, dpi->modifiers);
4004 
4005 	return;
4006       }
4007 
4008     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
4009     case DEMANGLE_COMPONENT_VECTOR_TYPE:
4010       {
4011 	struct d_print_mod dpm;
4012 
4013 	dpm.next = dpi->modifiers;
4014 	dpi->modifiers = &dpm;
4015 	dpm.mod = dc;
4016 	dpm.printed = 0;
4017 	dpm.templates = dpi->templates;
4018 
4019 	d_print_comp (dpi, d_right (dc));
4020 
4021 	/* If the modifier didn't get printed by the type, print it
4022 	   now.  */
4023 	if (! dpm.printed)
4024 	  d_print_mod (dpi, dc);
4025 
4026 	dpi->modifiers = dpm.next;
4027 
4028 	return;
4029       }
4030 
4031     case DEMANGLE_COMPONENT_FIXED_TYPE:
4032       if (dc->u.s_fixed.sat)
4033 	d_append_string (dpi, "_Sat ");
4034       /* Don't print "int _Accum".  */
4035       if (dc->u.s_fixed.length->u.s_builtin.type
4036 	  != &cplus_demangle_builtin_types['i'-'a'])
4037 	{
4038 	  d_print_comp (dpi, dc->u.s_fixed.length);
4039 	  d_append_char (dpi, ' ');
4040 	}
4041       if (dc->u.s_fixed.accum)
4042 	d_append_string (dpi, "_Accum");
4043       else
4044 	d_append_string (dpi, "_Fract");
4045       return;
4046 
4047     case DEMANGLE_COMPONENT_ARGLIST:
4048     case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
4049       if (d_left (dc) != NULL)
4050 	d_print_comp (dpi, d_left (dc));
4051       if (d_right (dc) != NULL)
4052 	{
4053 	  size_t len;
4054 	  unsigned long int flush_count;
4055 	  /* Make sure ", " isn't flushed by d_append_string, otherwise
4056 	     dpi->len -= 2 wouldn't work.  */
4057 	  if (dpi->len >= sizeof (dpi->buf) - 2)
4058 	    d_print_flush (dpi);
4059 	  d_append_string (dpi, ", ");
4060 	  len = dpi->len;
4061 	  flush_count = dpi->flush_count;
4062 	  d_print_comp (dpi, d_right (dc));
4063 	  /* If that didn't print anything (which can happen with empty
4064 	     template argument packs), remove the comma and space.  */
4065 	  if (dpi->flush_count == flush_count && dpi->len == len)
4066 	    dpi->len -= 2;
4067 	}
4068       return;
4069 
4070     case DEMANGLE_COMPONENT_OPERATOR:
4071       {
4072 	char c;
4073 
4074 	d_append_string (dpi, "operator");
4075 	c = dc->u.s_operator.op->name[0];
4076 	if (IS_LOWER (c))
4077 	  d_append_char (dpi, ' ');
4078 	d_append_buffer (dpi, dc->u.s_operator.op->name,
4079 			 dc->u.s_operator.op->len);
4080 	return;
4081       }
4082 
4083     case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
4084       d_append_string (dpi, "operator ");
4085       d_print_comp (dpi, dc->u.s_extended_operator.name);
4086       return;
4087 
4088     case DEMANGLE_COMPONENT_CAST:
4089       d_append_string (dpi, "operator ");
4090       d_print_cast (dpi, dc);
4091       return;
4092 
4093     case DEMANGLE_COMPONENT_UNARY:
4094       if (d_left (dc)->type != DEMANGLE_COMPONENT_CAST)
4095 	d_print_expr_op (dpi, d_left (dc));
4096       else
4097 	{
4098 	  d_append_char (dpi, '(');
4099 	  d_print_cast (dpi, d_left (dc));
4100 	  d_append_char (dpi, ')');
4101 	}
4102       d_print_subexpr (dpi, d_right (dc));
4103       return;
4104 
4105     case DEMANGLE_COMPONENT_BINARY:
4106       if (d_right (dc)->type != DEMANGLE_COMPONENT_BINARY_ARGS)
4107 	{
4108 	  d_print_error (dpi);
4109 	  return;
4110 	}
4111 
4112       /* We wrap an expression which uses the greater-than operator in
4113 	 an extra layer of parens so that it does not get confused
4114 	 with the '>' which ends the template parameters.  */
4115       if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
4116 	  && d_left (dc)->u.s_operator.op->len == 1
4117 	  && d_left (dc)->u.s_operator.op->name[0] == '>')
4118 	d_append_char (dpi, '(');
4119 
4120       d_print_subexpr (dpi, d_left (d_right (dc)));
4121       if (strcmp (d_left (dc)->u.s_operator.op->code, "ix") == 0)
4122 	{
4123 	  d_append_char (dpi, '[');
4124 	  d_print_comp (dpi, d_right (d_right (dc)));
4125 	  d_append_char (dpi, ']');
4126 	}
4127       else
4128 	{
4129 	  if (strcmp (d_left (dc)->u.s_operator.op->code, "cl") != 0)
4130 	    d_print_expr_op (dpi, d_left (dc));
4131 	  d_print_subexpr (dpi, d_right (d_right (dc)));
4132 	}
4133 
4134       if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
4135 	  && d_left (dc)->u.s_operator.op->len == 1
4136 	  && d_left (dc)->u.s_operator.op->name[0] == '>')
4137 	d_append_char (dpi, ')');
4138 
4139       return;
4140 
4141     case DEMANGLE_COMPONENT_BINARY_ARGS:
4142       /* We should only see this as part of DEMANGLE_COMPONENT_BINARY.  */
4143       d_print_error (dpi);
4144       return;
4145 
4146     case DEMANGLE_COMPONENT_TRINARY:
4147       if (d_right (dc)->type != DEMANGLE_COMPONENT_TRINARY_ARG1
4148 	  || d_right (d_right (dc))->type != DEMANGLE_COMPONENT_TRINARY_ARG2)
4149 	{
4150 	  d_print_error (dpi);
4151 	  return;
4152 	}
4153       d_print_subexpr (dpi, d_left (d_right (dc)));
4154       d_print_expr_op (dpi, d_left (dc));
4155       d_print_subexpr (dpi, d_left (d_right (d_right (dc))));
4156       d_append_string (dpi, " : ");
4157       d_print_subexpr (dpi, d_right (d_right (d_right (dc))));
4158       return;
4159 
4160     case DEMANGLE_COMPONENT_TRINARY_ARG1:
4161     case DEMANGLE_COMPONENT_TRINARY_ARG2:
4162       /* We should only see these are part of DEMANGLE_COMPONENT_TRINARY.  */
4163       d_print_error (dpi);
4164       return;
4165 
4166     case DEMANGLE_COMPONENT_LITERAL:
4167     case DEMANGLE_COMPONENT_LITERAL_NEG:
4168       {
4169 	enum d_builtin_type_print tp;
4170 
4171 	/* For some builtin types, produce simpler output.  */
4172 	tp = D_PRINT_DEFAULT;
4173 	if (d_left (dc)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE)
4174 	  {
4175 	    tp = d_left (dc)->u.s_builtin.type->print;
4176 	    switch (tp)
4177 	      {
4178 	      case D_PRINT_INT:
4179 	      case D_PRINT_UNSIGNED:
4180 	      case D_PRINT_LONG:
4181 	      case D_PRINT_UNSIGNED_LONG:
4182 	      case D_PRINT_LONG_LONG:
4183 	      case D_PRINT_UNSIGNED_LONG_LONG:
4184 		if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME)
4185 		  {
4186 		    if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
4187 		      d_append_char (dpi, '-');
4188 		    d_print_comp (dpi, d_right (dc));
4189 		    switch (tp)
4190 		      {
4191 		      default:
4192 			break;
4193 		      case D_PRINT_UNSIGNED:
4194 			d_append_char (dpi, 'u');
4195 			break;
4196 		      case D_PRINT_LONG:
4197 			d_append_char (dpi, 'l');
4198 			break;
4199 		      case D_PRINT_UNSIGNED_LONG:
4200 			d_append_string (dpi, "ul");
4201 			break;
4202 		      case D_PRINT_LONG_LONG:
4203 			d_append_string (dpi, "ll");
4204 			break;
4205 		      case D_PRINT_UNSIGNED_LONG_LONG:
4206 			d_append_string (dpi, "ull");
4207 			break;
4208 		      }
4209 		    return;
4210 		  }
4211 		break;
4212 
4213 	      case D_PRINT_BOOL:
4214 		if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME
4215 		    && d_right (dc)->u.s_name.len == 1
4216 		    && dc->type == DEMANGLE_COMPONENT_LITERAL)
4217 		  {
4218 		    switch (d_right (dc)->u.s_name.s[0])
4219 		      {
4220 		      case '0':
4221 			d_append_string (dpi, "false");
4222 			return;
4223 		      case '1':
4224 			d_append_string (dpi, "true");
4225 			return;
4226 		      default:
4227 			break;
4228 		      }
4229 		  }
4230 		break;
4231 
4232 	      default:
4233 		break;
4234 	      }
4235 	  }
4236 
4237 	d_append_char (dpi, '(');
4238 	d_print_comp (dpi, d_left (dc));
4239 	d_append_char (dpi, ')');
4240 	if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
4241 	  d_append_char (dpi, '-');
4242 	if (tp == D_PRINT_FLOAT)
4243 	  d_append_char (dpi, '[');
4244 	d_print_comp (dpi, d_right (dc));
4245 	if (tp == D_PRINT_FLOAT)
4246 	  d_append_char (dpi, ']');
4247       }
4248       return;
4249 
4250     case DEMANGLE_COMPONENT_NUMBER:
4251       d_append_num (dpi, dc->u.s_number.number);
4252       return;
4253 
4254     case DEMANGLE_COMPONENT_JAVA_RESOURCE:
4255       d_append_string (dpi, "java resource ");
4256       d_print_comp (dpi, d_left (dc));
4257       return;
4258 
4259     case DEMANGLE_COMPONENT_COMPOUND_NAME:
4260       d_print_comp (dpi, d_left (dc));
4261       d_print_comp (dpi, d_right (dc));
4262       return;
4263 
4264     case DEMANGLE_COMPONENT_CHARACTER:
4265       d_append_char (dpi, dc->u.s_character.character);
4266       return;
4267 
4268     case DEMANGLE_COMPONENT_DECLTYPE:
4269       d_append_string (dpi, "decltype (");
4270       d_print_comp (dpi, d_left (dc));
4271       d_append_char (dpi, ')');
4272       return;
4273 
4274     case DEMANGLE_COMPONENT_PACK_EXPANSION:
4275       {
4276 	int len;
4277 	int i;
4278 	struct demangle_component *a = d_find_pack (dpi, d_left (dc));
4279 	if (a == NULL)
4280 	  {
4281 	    /* d_find_pack won't find anything if the only packs involved
4282 	       in this expansion are function parameter packs; in that
4283 	       case, just print the pattern and "...".  */
4284 	    d_print_subexpr (dpi, d_left (dc));
4285 	    d_append_string (dpi, "...");
4286 	    return;
4287 	  }
4288 
4289 	len = d_pack_length (a);
4290 	dc = d_left (dc);
4291 	for (i = 0; i < len; ++i)
4292 	  {
4293 	    dpi->pack_index = i;
4294 	    d_print_comp (dpi, dc);
4295 	    if (i < len-1)
4296 	      d_append_string (dpi, ", ");
4297 	  }
4298       }
4299       return;
4300 
4301     case DEMANGLE_COMPONENT_FUNCTION_PARAM:
4302       d_append_string (dpi, "{parm#");
4303       d_append_num (dpi, dc->u.s_number.number + 1);
4304       d_append_char (dpi, '}');
4305       return;
4306 
4307     case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
4308       d_append_string (dpi, "global constructors keyed to ");
4309       d_print_comp (dpi, dc->u.s_binary.left);
4310       return;
4311 
4312     case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
4313       d_append_string (dpi, "global destructors keyed to ");
4314       d_print_comp (dpi, dc->u.s_binary.left);
4315       return;
4316 
4317     case DEMANGLE_COMPONENT_LAMBDA:
4318       d_append_string (dpi, "{lambda(");
4319       d_print_comp (dpi, dc->u.s_unary_num.sub);
4320       d_append_string (dpi, ")#");
4321       d_append_num (dpi, dc->u.s_unary_num.num + 1);
4322       d_append_char (dpi, '}');
4323       return;
4324 
4325     case DEMANGLE_COMPONENT_UNNAMED_TYPE:
4326       d_append_string (dpi, "{unnamed type#");
4327       d_append_num (dpi, dc->u.s_number.number + 1);
4328       d_append_char (dpi, '}');
4329       return;
4330 
4331     default:
4332       d_print_error (dpi);
4333       return;
4334     }
4335 }
4336 
4337 /* Print a Java dentifier.  For Java we try to handle encoded extended
4338    Unicode characters.  The C++ ABI doesn't mention Unicode encoding,
4339    so we don't it for C++.  Characters are encoded as
4340    __U<hex-char>+_.  */
4341 
4342 static void
4343 d_print_java_identifier (struct d_print_info *dpi, const char *name, int len)
4344 {
4345   const char *p;
4346   const char *end;
4347 
4348   end = name + len;
4349   for (p = name; p < end; ++p)
4350     {
4351       if (end - p > 3
4352 	  && p[0] == '_'
4353 	  && p[1] == '_'
4354 	  && p[2] == 'U')
4355 	{
4356 	  unsigned long c;
4357 	  const char *q;
4358 
4359 	  c = 0;
4360 	  for (q = p + 3; q < end; ++q)
4361 	    {
4362 	      int dig;
4363 
4364 	      if (IS_DIGIT (*q))
4365 		dig = *q - '0';
4366 	      else if (*q >= 'A' && *q <= 'F')
4367 		dig = *q - 'A' + 10;
4368 	      else if (*q >= 'a' && *q <= 'f')
4369 		dig = *q - 'a' + 10;
4370 	      else
4371 		break;
4372 
4373 	      c = c * 16 + dig;
4374 	    }
4375 	  /* If the Unicode character is larger than 256, we don't try
4376 	     to deal with it here.  FIXME.  */
4377 	  if (q < end && *q == '_' && c < 256)
4378 	    {
4379 	      d_append_char (dpi, c);
4380 	      p = q;
4381 	      continue;
4382 	    }
4383 	}
4384 
4385       d_append_char (dpi, *p);
4386     }
4387 }
4388 
4389 /* Print a list of modifiers.  SUFFIX is 1 if we are printing
4390    qualifiers on this after printing a function.  */
4391 
4392 static void
4393 d_print_mod_list (struct d_print_info *dpi,
4394                   struct d_print_mod *mods, int suffix)
4395 {
4396   struct d_print_template *hold_dpt;
4397 
4398   if (mods == NULL || d_print_saw_error (dpi))
4399     return;
4400 
4401   if (mods->printed
4402       || (! suffix
4403 	  && (mods->mod->type == DEMANGLE_COMPONENT_RESTRICT_THIS
4404 	      || mods->mod->type == DEMANGLE_COMPONENT_VOLATILE_THIS
4405 	      || mods->mod->type == DEMANGLE_COMPONENT_CONST_THIS)))
4406     {
4407       d_print_mod_list (dpi, mods->next, suffix);
4408       return;
4409     }
4410 
4411   mods->printed = 1;
4412 
4413   hold_dpt = dpi->templates;
4414   dpi->templates = mods->templates;
4415 
4416   if (mods->mod->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
4417     {
4418       d_print_function_type (dpi, mods->mod, mods->next);
4419       dpi->templates = hold_dpt;
4420       return;
4421     }
4422   else if (mods->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
4423     {
4424       d_print_array_type (dpi, mods->mod, mods->next);
4425       dpi->templates = hold_dpt;
4426       return;
4427     }
4428   else if (mods->mod->type == DEMANGLE_COMPONENT_LOCAL_NAME)
4429     {
4430       struct d_print_mod *hold_modifiers;
4431       struct demangle_component *dc;
4432 
4433       /* When this is on the modifier stack, we have pulled any
4434 	 qualifiers off the right argument already.  Otherwise, we
4435 	 print it as usual, but don't let the left argument see any
4436 	 modifiers.  */
4437 
4438       hold_modifiers = dpi->modifiers;
4439       dpi->modifiers = NULL;
4440       d_print_comp (dpi, d_left (mods->mod));
4441       dpi->modifiers = hold_modifiers;
4442 
4443       if ((dpi->options & DMGL_JAVA) == 0)
4444 	d_append_string (dpi, "::");
4445       else
4446 	d_append_char (dpi, '.');
4447 
4448       dc = d_right (mods->mod);
4449 
4450       if (dc->type == DEMANGLE_COMPONENT_DEFAULT_ARG)
4451 	{
4452 	  d_append_string (dpi, "{default arg#");
4453 	  d_append_num (dpi, dc->u.s_unary_num.num + 1);
4454 	  d_append_string (dpi, "}::");
4455 	  dc = dc->u.s_unary_num.sub;
4456 	}
4457 
4458       while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
4459 	     || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
4460 	     || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
4461 	dc = d_left (dc);
4462 
4463       d_print_comp (dpi, dc);
4464 
4465       dpi->templates = hold_dpt;
4466       return;
4467     }
4468 
4469   d_print_mod (dpi, mods->mod);
4470 
4471   dpi->templates = hold_dpt;
4472 
4473   d_print_mod_list (dpi, mods->next, suffix);
4474 }
4475 
4476 /* Print a modifier.  */
4477 
4478 static void
4479 d_print_mod (struct d_print_info *dpi,
4480              const struct demangle_component *mod)
4481 {
4482   switch (mod->type)
4483     {
4484     case DEMANGLE_COMPONENT_RESTRICT:
4485     case DEMANGLE_COMPONENT_RESTRICT_THIS:
4486       d_append_string (dpi, " restrict");
4487       return;
4488     case DEMANGLE_COMPONENT_VOLATILE:
4489     case DEMANGLE_COMPONENT_VOLATILE_THIS:
4490       d_append_string (dpi, " volatile");
4491       return;
4492     case DEMANGLE_COMPONENT_CONST:
4493     case DEMANGLE_COMPONENT_CONST_THIS:
4494       d_append_string (dpi, " const");
4495       return;
4496     case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
4497       d_append_char (dpi, ' ');
4498       d_print_comp (dpi, d_right (mod));
4499       return;
4500     case DEMANGLE_COMPONENT_POINTER:
4501       /* There is no pointer symbol in Java.  */
4502       if ((dpi->options & DMGL_JAVA) == 0)
4503 	d_append_char (dpi, '*');
4504       return;
4505     case DEMANGLE_COMPONENT_REFERENCE:
4506       d_append_char (dpi, '&');
4507       return;
4508     case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
4509       d_append_string (dpi, "&&");
4510       return;
4511     case DEMANGLE_COMPONENT_COMPLEX:
4512       d_append_string (dpi, "complex ");
4513       return;
4514     case DEMANGLE_COMPONENT_IMAGINARY:
4515       d_append_string (dpi, "imaginary ");
4516       return;
4517     case DEMANGLE_COMPONENT_PTRMEM_TYPE:
4518       if (d_last_char (dpi) != '(')
4519 	d_append_char (dpi, ' ');
4520       d_print_comp (dpi, d_left (mod));
4521       d_append_string (dpi, "::*");
4522       return;
4523     case DEMANGLE_COMPONENT_TYPED_NAME:
4524       d_print_comp (dpi, d_left (mod));
4525       return;
4526     case DEMANGLE_COMPONENT_VECTOR_TYPE:
4527       d_append_string (dpi, " __vector(");
4528       d_print_comp (dpi, d_left (mod));
4529       d_append_char (dpi, ')');
4530       return;
4531 
4532     default:
4533       /* Otherwise, we have something that won't go back on the
4534 	 modifier stack, so we can just print it.  */
4535       d_print_comp (dpi, mod);
4536       return;
4537     }
4538 }
4539 
4540 /* Print a function type, except for the return type.  */
4541 
4542 static void
4543 d_print_function_type (struct d_print_info *dpi,
4544                        const struct demangle_component *dc,
4545                        struct d_print_mod *mods)
4546 {
4547   int need_paren;
4548   int saw_mod;
4549   int need_space;
4550   struct d_print_mod *p;
4551   struct d_print_mod *hold_modifiers;
4552 
4553   need_paren = 0;
4554   saw_mod = 0;
4555   need_space = 0;
4556   for (p = mods; p != NULL; p = p->next)
4557     {
4558       if (p->printed)
4559 	break;
4560 
4561       saw_mod = 1;
4562       switch (p->mod->type)
4563 	{
4564 	case DEMANGLE_COMPONENT_POINTER:
4565 	case DEMANGLE_COMPONENT_REFERENCE:
4566 	case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
4567 	  need_paren = 1;
4568 	  break;
4569 	case DEMANGLE_COMPONENT_RESTRICT:
4570 	case DEMANGLE_COMPONENT_VOLATILE:
4571 	case DEMANGLE_COMPONENT_CONST:
4572 	case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
4573 	case DEMANGLE_COMPONENT_COMPLEX:
4574 	case DEMANGLE_COMPONENT_IMAGINARY:
4575 	case DEMANGLE_COMPONENT_PTRMEM_TYPE:
4576 	  need_space = 1;
4577 	  need_paren = 1;
4578 	  break;
4579 	case DEMANGLE_COMPONENT_RESTRICT_THIS:
4580 	case DEMANGLE_COMPONENT_VOLATILE_THIS:
4581 	case DEMANGLE_COMPONENT_CONST_THIS:
4582 	  break;
4583 	default:
4584 	  break;
4585 	}
4586       if (need_paren)
4587 	break;
4588     }
4589 
4590   if (d_left (dc) != NULL && ! saw_mod)
4591     need_paren = 1;
4592 
4593   if (need_paren)
4594     {
4595       if (! need_space)
4596 	{
4597 	  if (d_last_char (dpi) != '('
4598 	      && d_last_char (dpi) != '*')
4599 	    need_space = 1;
4600 	}
4601       if (need_space && d_last_char (dpi) != ' ')
4602 	d_append_char (dpi, ' ');
4603       d_append_char (dpi, '(');
4604     }
4605 
4606   hold_modifiers = dpi->modifiers;
4607   dpi->modifiers = NULL;
4608 
4609   d_print_mod_list (dpi, mods, 0);
4610 
4611   if (need_paren)
4612     d_append_char (dpi, ')');
4613 
4614   d_append_char (dpi, '(');
4615 
4616   if (d_right (dc) != NULL)
4617     d_print_comp (dpi, d_right (dc));
4618 
4619   d_append_char (dpi, ')');
4620 
4621   d_print_mod_list (dpi, mods, 1);
4622 
4623   dpi->modifiers = hold_modifiers;
4624 }
4625 
4626 /* Print an array type, except for the element type.  */
4627 
4628 static void
4629 d_print_array_type (struct d_print_info *dpi,
4630                     const struct demangle_component *dc,
4631                     struct d_print_mod *mods)
4632 {
4633   int need_space;
4634 
4635   need_space = 1;
4636   if (mods != NULL)
4637     {
4638       int need_paren;
4639       struct d_print_mod *p;
4640 
4641       need_paren = 0;
4642       for (p = mods; p != NULL; p = p->next)
4643 	{
4644 	  if (! p->printed)
4645 	    {
4646 	      if (p->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
4647 		{
4648 		  need_space = 0;
4649 		  break;
4650 		}
4651 	      else
4652 		{
4653 		  need_paren = 1;
4654 		  need_space = 1;
4655 		  break;
4656 		}
4657 	    }
4658 	}
4659 
4660       if (need_paren)
4661 	d_append_string (dpi, " (");
4662 
4663       d_print_mod_list (dpi, mods, 0);
4664 
4665       if (need_paren)
4666 	d_append_char (dpi, ')');
4667     }
4668 
4669   if (need_space)
4670     d_append_char (dpi, ' ');
4671 
4672   d_append_char (dpi, '[');
4673 
4674   if (d_left (dc) != NULL)
4675     d_print_comp (dpi, d_left (dc));
4676 
4677   d_append_char (dpi, ']');
4678 }
4679 
4680 /* Print an operator in an expression.  */
4681 
4682 static void
4683 d_print_expr_op (struct d_print_info *dpi,
4684                  const struct demangle_component *dc)
4685 {
4686   if (dc->type == DEMANGLE_COMPONENT_OPERATOR)
4687     d_append_buffer (dpi, dc->u.s_operator.op->name,
4688 		     dc->u.s_operator.op->len);
4689   else
4690     d_print_comp (dpi, dc);
4691 }
4692 
4693 /* Print a cast.  */
4694 
4695 static void
4696 d_print_cast (struct d_print_info *dpi,
4697               const struct demangle_component *dc)
4698 {
4699   if (d_left (dc)->type != DEMANGLE_COMPONENT_TEMPLATE)
4700     d_print_comp (dpi, d_left (dc));
4701   else
4702     {
4703       struct d_print_mod *hold_dpm;
4704       struct d_print_template dpt;
4705 
4706       /* It appears that for a templated cast operator, we need to put
4707 	 the template parameters in scope for the operator name, but
4708 	 not for the parameters.  The effect is that we need to handle
4709 	 the template printing here.  */
4710 
4711       hold_dpm = dpi->modifiers;
4712       dpi->modifiers = NULL;
4713 
4714       dpt.next = dpi->templates;
4715       dpi->templates = &dpt;
4716       dpt.template_decl = d_left (dc);
4717 
4718       d_print_comp (dpi, d_left (d_left (dc)));
4719 
4720       dpi->templates = dpt.next;
4721 
4722       if (d_last_char (dpi) == '<')
4723 	d_append_char (dpi, ' ');
4724       d_append_char (dpi, '<');
4725       d_print_comp (dpi, d_right (d_left (dc)));
4726       /* Avoid generating two consecutive '>' characters, to avoid
4727 	 the C++ syntactic ambiguity.  */
4728       if (d_last_char (dpi) == '>')
4729 	d_append_char (dpi, ' ');
4730       d_append_char (dpi, '>');
4731 
4732       dpi->modifiers = hold_dpm;
4733     }
4734 }
4735 
4736 /* Initialize the information structure we use to pass around
4737    information.  */
4738 
4739 CP_STATIC_IF_GLIBCPP_V3
4740 void
4741 cplus_demangle_init_info (const char *mangled, int options, size_t len,
4742                           struct d_info *di)
4743 {
4744   di->s = mangled;
4745   di->send = mangled + len;
4746   di->options = options;
4747 
4748   di->n = mangled;
4749 
4750   /* We can not need more components than twice the number of chars in
4751      the mangled string.  Most components correspond directly to
4752      chars, but the ARGLIST types are exceptions.  */
4753   di->num_comps = 2 * len;
4754   di->next_comp = 0;
4755 
4756   /* Similarly, we can not need more substitutions than there are
4757      chars in the mangled string.  */
4758   di->num_subs = len;
4759   di->next_sub = 0;
4760   di->did_subs = 0;
4761 
4762   di->last_name = NULL;
4763 
4764   di->expansion = 0;
4765 }
4766 
4767 /* Internal implementation for the demangler.  If MANGLED is a g++ v3 ABI
4768    mangled name, return strings in repeated callback giving the demangled
4769    name.  OPTIONS is the usual libiberty demangler options.  On success,
4770    this returns 1.  On failure, returns 0.  */
4771 
4772 static int
4773 d_demangle_callback (const char *mangled, int options,
4774                      demangle_callbackref callback, void *opaque)
4775 {
4776   enum
4777     {
4778       DCT_TYPE,
4779       DCT_MANGLED,
4780       DCT_GLOBAL_CTORS,
4781       DCT_GLOBAL_DTORS
4782     }
4783   type;
4784   struct d_info di;
4785   struct demangle_component *dc;
4786   int status;
4787 
4788   if (mangled[0] == '_' && mangled[1] == 'Z')
4789     type = DCT_MANGLED;
4790   else if (strncmp (mangled, "_GLOBAL_", 8) == 0
4791 	   && (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$')
4792 	   && (mangled[9] == 'D' || mangled[9] == 'I')
4793 	   && mangled[10] == '_')
4794     type = mangled[9] == 'I' ? DCT_GLOBAL_CTORS : DCT_GLOBAL_DTORS;
4795   else
4796     {
4797       if ((options & DMGL_TYPES) == 0)
4798 	return 0;
4799       type = DCT_TYPE;
4800     }
4801 
4802   cplus_demangle_init_info (mangled, options, strlen (mangled), &di);
4803 
4804   {
4805 #ifdef CP_DYNAMIC_ARRAYS
4806     __extension__ struct demangle_component comps[di.num_comps];
4807     __extension__ struct demangle_component *subs[di.num_subs];
4808 
4809     di.comps = comps;
4810     di.subs = subs;
4811 #else
4812     di.comps = alloca (di.num_comps * sizeof (*di.comps));
4813     di.subs = alloca (di.num_subs * sizeof (*di.subs));
4814 #endif
4815 
4816     switch (type)
4817       {
4818       case DCT_TYPE:
4819 	dc = cplus_demangle_type (&di);
4820 	break;
4821       case DCT_MANGLED:
4822 	dc = cplus_demangle_mangled_name (&di, 1);
4823 	break;
4824       case DCT_GLOBAL_CTORS:
4825       case DCT_GLOBAL_DTORS:
4826 	d_advance (&di, 11);
4827 	dc = d_make_comp (&di,
4828 			  (type == DCT_GLOBAL_CTORS
4829 			   ? DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS
4830 			   : DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS),
4831 			  d_make_name (&di, d_str (&di), strlen (d_str (&di))),
4832 			  NULL);
4833 	d_advance (&di, strlen (d_str (&di)));
4834 	break;
4835       }
4836 
4837     /* If DMGL_PARAMS is set, then if we didn't consume the entire
4838        mangled string, then we didn't successfully demangle it.  If
4839        DMGL_PARAMS is not set, we didn't look at the trailing
4840        parameters.  */
4841     if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0')
4842       dc = NULL;
4843 
4844 #ifdef CP_DEMANGLE_DEBUG
4845     d_dump (dc, 0);
4846 #endif
4847 
4848     status = (dc != NULL)
4849              ? cplus_demangle_print_callback (options, dc, callback, opaque)
4850              : 0;
4851   }
4852 
4853   return status;
4854 }
4855 
4856 /* Entry point for the demangler.  If MANGLED is a g++ v3 ABI mangled
4857    name, return a buffer allocated with malloc holding the demangled
4858    name.  OPTIONS is the usual libiberty demangler options.  On
4859    success, this sets *PALC to the allocated size of the returned
4860    buffer.  On failure, this sets *PALC to 0 for a bad name, or 1 for
4861    a memory allocation failure, and returns NULL.  */
4862 
4863 static char *
4864 d_demangle (const char *mangled, int options, size_t *palc)
4865 {
4866   struct d_growable_string dgs;
4867   int status;
4868 
4869   d_growable_string_init (&dgs, 0);
4870 
4871   status = d_demangle_callback (mangled, options,
4872                                 d_growable_string_callback_adapter, &dgs);
4873   if (status == 0)
4874     {
4875       free (dgs.buf);
4876       *palc = 0;
4877       return NULL;
4878     }
4879 
4880   *palc = dgs.allocation_failure ? 1 : dgs.alc;
4881   return dgs.buf;
4882 }
4883 
4884 #if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3)
4885 
4886 extern char *__cxa_demangle (const char *, char *, size_t *, int *);
4887 
4888 /* ia64 ABI-mandated entry point in the C++ runtime library for
4889    performing demangling.  MANGLED_NAME is a NUL-terminated character
4890    string containing the name to be demangled.
4891 
4892    OUTPUT_BUFFER is a region of memory, allocated with malloc, of
4893    *LENGTH bytes, into which the demangled name is stored.  If
4894    OUTPUT_BUFFER is not long enough, it is expanded using realloc.
4895    OUTPUT_BUFFER may instead be NULL; in that case, the demangled name
4896    is placed in a region of memory allocated with malloc.
4897 
4898    If LENGTH is non-NULL, the length of the buffer containing the
4899    demangled name, is placed in *LENGTH.
4900 
4901    The return value is a pointer to the start of the NUL-terminated
4902    demangled name, or NULL if the demangling fails.  The caller is
4903    responsible for deallocating this memory using free.
4904 
4905    *STATUS is set to one of the following values:
4906       0: The demangling operation succeeded.
4907      -1: A memory allocation failure occurred.
4908      -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
4909      -3: One of the arguments is invalid.
4910 
4911    The demangling is performed using the C++ ABI mangling rules, with
4912    GNU extensions.  */
4913 
4914 char *
4915 __cxa_demangle (const char *mangled_name, char *output_buffer,
4916                 size_t *length, int *status)
4917 {
4918   char *demangled;
4919   size_t alc;
4920 
4921   if (mangled_name == NULL)
4922     {
4923       if (status != NULL)
4924 	*status = -3;
4925       return NULL;
4926     }
4927 
4928   if (output_buffer != NULL && length == NULL)
4929     {
4930       if (status != NULL)
4931 	*status = -3;
4932       return NULL;
4933     }
4934 
4935   demangled = d_demangle (mangled_name, DMGL_PARAMS | DMGL_TYPES, &alc);
4936 
4937   if (demangled == NULL)
4938     {
4939       if (status != NULL)
4940 	{
4941 	  if (alc == 1)
4942 	    *status = -1;
4943 	  else
4944 	    *status = -2;
4945 	}
4946       return NULL;
4947     }
4948 
4949   if (output_buffer == NULL)
4950     {
4951       if (length != NULL)
4952 	*length = alc;
4953     }
4954   else
4955     {
4956       if (strlen (demangled) < *length)
4957 	{
4958 	  strcpy (output_buffer, demangled);
4959 	  free (demangled);
4960 	  demangled = output_buffer;
4961 	}
4962       else
4963 	{
4964 	  free (output_buffer);
4965 	  *length = alc;
4966 	}
4967     }
4968 
4969   if (status != NULL)
4970     *status = 0;
4971 
4972   return demangled;
4973 }
4974 
4975 extern int __gcclibcxx_demangle_callback (const char *,
4976                                           void (*)
4977                                             (const char *, size_t, void *),
4978                                           void *);
4979 
4980 /* Alternative, allocationless entry point in the C++ runtime library
4981    for performing demangling.  MANGLED_NAME is a NUL-terminated character
4982    string containing the name to be demangled.
4983 
4984    CALLBACK is a callback function, called with demangled string
4985    segments as demangling progresses; it is called at least once,
4986    but may be called more than once.  OPAQUE is a generalized pointer
4987    used as a callback argument.
4988 
4989    The return code is one of the following values, equivalent to
4990    the STATUS values of __cxa_demangle() (excluding -1, since this
4991    function performs no memory allocations):
4992       0: The demangling operation succeeded.
4993      -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
4994      -3: One of the arguments is invalid.
4995 
4996    The demangling is performed using the C++ ABI mangling rules, with
4997    GNU extensions.  */
4998 
4999 int
5000 __gcclibcxx_demangle_callback (const char *mangled_name,
5001                                void (*callback) (const char *, size_t, void *),
5002                                void *opaque)
5003 {
5004   int status;
5005 
5006   if (mangled_name == NULL || callback == NULL)
5007     return -3;
5008 
5009   status = d_demangle_callback (mangled_name, DMGL_PARAMS | DMGL_TYPES,
5010                                 callback, opaque);
5011   if (status == 0)
5012     return -2;
5013 
5014   return 0;
5015 }
5016 
5017 #else /* ! (IN_LIBGCC2 || IN_GLIBCPP_V3) */
5018 
5019 /* Entry point for libiberty demangler.  If MANGLED is a g++ v3 ABI
5020    mangled name, return a buffer allocated with malloc holding the
5021    demangled name.  Otherwise, return NULL.  */
5022 
5023 char *
5024 cplus_demangle_v3 (const char *mangled, int options)
5025 {
5026   size_t alc;
5027 
5028   return d_demangle (mangled, options, &alc);
5029 }
5030 
5031 int
5032 cplus_demangle_v3_callback (const char *mangled, int options,
5033                             demangle_callbackref callback, void *opaque)
5034 {
5035   return d_demangle_callback (mangled, options, callback, opaque);
5036 }
5037 
5038 /* Demangle a Java symbol.  Java uses a subset of the V3 ABI C++ mangling
5039    conventions, but the output formatting is a little different.
5040    This instructs the C++ demangler not to emit pointer characters ("*"), to
5041    use Java's namespace separator symbol ("." instead of "::"), and to output
5042    JArray<TYPE> as TYPE[].  */
5043 
5044 char *
5045 java_demangle_v3 (const char *mangled)
5046 {
5047   size_t alc;
5048 
5049   return d_demangle (mangled, DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX, &alc);
5050 }
5051 
5052 int
5053 java_demangle_v3_callback (const char *mangled,
5054                            demangle_callbackref callback, void *opaque)
5055 {
5056   return d_demangle_callback (mangled,
5057                               DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX,
5058                               callback, opaque);
5059 }
5060 
5061 #endif /* IN_LIBGCC2 || IN_GLIBCPP_V3 */
5062 
5063 #ifndef IN_GLIBCPP_V3
5064 
5065 /* Demangle a string in order to find out whether it is a constructor
5066    or destructor.  Return non-zero on success.  Set *CTOR_KIND and
5067    *DTOR_KIND appropriately.  */
5068 
5069 static int
5070 is_ctor_or_dtor (const char *mangled,
5071                  enum gnu_v3_ctor_kinds *ctor_kind,
5072                  enum gnu_v3_dtor_kinds *dtor_kind)
5073 {
5074   struct d_info di;
5075   struct demangle_component *dc;
5076   int ret;
5077 
5078   *ctor_kind = (enum gnu_v3_ctor_kinds) 0;
5079   *dtor_kind = (enum gnu_v3_dtor_kinds) 0;
5080 
5081   cplus_demangle_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di);
5082 
5083   {
5084 #ifdef CP_DYNAMIC_ARRAYS
5085     __extension__ struct demangle_component comps[di.num_comps];
5086     __extension__ struct demangle_component *subs[di.num_subs];
5087 
5088     di.comps = comps;
5089     di.subs = subs;
5090 #else
5091     di.comps = alloca (di.num_comps * sizeof (*di.comps));
5092     di.subs = alloca (di.num_subs * sizeof (*di.subs));
5093 #endif
5094 
5095     dc = cplus_demangle_mangled_name (&di, 1);
5096 
5097     /* Note that because we did not pass DMGL_PARAMS, we don't expect
5098        to demangle the entire string.  */
5099 
5100     ret = 0;
5101     while (dc != NULL)
5102       {
5103 	switch (dc->type)
5104 	  {
5105 	  default:
5106 	    dc = NULL;
5107 	    break;
5108 	  case DEMANGLE_COMPONENT_TYPED_NAME:
5109 	  case DEMANGLE_COMPONENT_TEMPLATE:
5110 	  case DEMANGLE_COMPONENT_RESTRICT_THIS:
5111 	  case DEMANGLE_COMPONENT_VOLATILE_THIS:
5112 	  case DEMANGLE_COMPONENT_CONST_THIS:
5113 	    dc = d_left (dc);
5114 	    break;
5115 	  case DEMANGLE_COMPONENT_QUAL_NAME:
5116 	  case DEMANGLE_COMPONENT_LOCAL_NAME:
5117 	    dc = d_right (dc);
5118 	    break;
5119 	  case DEMANGLE_COMPONENT_CTOR:
5120 	    *ctor_kind = dc->u.s_ctor.kind;
5121 	    ret = 1;
5122 	    dc = NULL;
5123 	    break;
5124 	  case DEMANGLE_COMPONENT_DTOR:
5125 	    *dtor_kind = dc->u.s_dtor.kind;
5126 	    ret = 1;
5127 	    dc = NULL;
5128 	    break;
5129 	  }
5130       }
5131   }
5132 
5133   return ret;
5134 }
5135 
5136 /* Return whether NAME is the mangled form of a g++ V3 ABI constructor
5137    name.  A non-zero return indicates the type of constructor.  */
5138 
5139 enum gnu_v3_ctor_kinds
5140 is_gnu_v3_mangled_ctor (const char *name)
5141 {
5142   enum gnu_v3_ctor_kinds ctor_kind;
5143   enum gnu_v3_dtor_kinds dtor_kind;
5144 
5145   if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
5146     return (enum gnu_v3_ctor_kinds) 0;
5147   return ctor_kind;
5148 }
5149 
5150 
5151 /* Return whether NAME is the mangled form of a g++ V3 ABI destructor
5152    name.  A non-zero return indicates the type of destructor.  */
5153 
5154 enum gnu_v3_dtor_kinds
5155 is_gnu_v3_mangled_dtor (const char *name)
5156 {
5157   enum gnu_v3_ctor_kinds ctor_kind;
5158   enum gnu_v3_dtor_kinds dtor_kind;
5159 
5160   if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
5161     return (enum gnu_v3_dtor_kinds) 0;
5162   return dtor_kind;
5163 }
5164 
5165 #endif /* IN_GLIBCPP_V3 */
5166 
5167 #ifdef STANDALONE_DEMANGLER
5168 
5169 #include "getopt.h"
5170 #include "dyn-string.h"
5171 
5172 static void print_usage (FILE* fp, int exit_value);
5173 
5174 #define IS_ALPHA(CHAR)                                                  \
5175   (((CHAR) >= 'a' && (CHAR) <= 'z')                                     \
5176    || ((CHAR) >= 'A' && (CHAR) <= 'Z'))
5177 
5178 /* Non-zero if CHAR is a character than can occur in a mangled name.  */
5179 #define is_mangled_char(CHAR)                                           \
5180   (IS_ALPHA (CHAR) || IS_DIGIT (CHAR)                                   \
5181    || (CHAR) == '_' || (CHAR) == '.' || (CHAR) == '$')
5182 
5183 /* The name of this program, as invoked.  */
5184 const char* program_name;
5185 
5186 /* Prints usage summary to FP and then exits with EXIT_VALUE.  */
5187 
5188 static void
5189 print_usage (FILE* fp, int exit_value)
5190 {
5191   fprintf (fp, "Usage: %s [options] [names ...]\n", program_name);
5192   fprintf (fp, "Options:\n");
5193   fprintf (fp, "  -h,--help       Display this message.\n");
5194   fprintf (fp, "  -p,--no-params  Don't display function parameters\n");
5195   fprintf (fp, "  -v,--verbose    Produce verbose demanglings.\n");
5196   fprintf (fp, "If names are provided, they are demangled.  Otherwise filters standard input.\n");
5197 
5198   exit (exit_value);
5199 }
5200 
5201 /* Option specification for getopt_long.  */
5202 static const struct option long_options[] =
5203 {
5204   { "help",	 no_argument, NULL, 'h' },
5205   { "no-params", no_argument, NULL, 'p' },
5206   { "verbose",   no_argument, NULL, 'v' },
5207   { NULL,        no_argument, NULL, 0   },
5208 };
5209 
5210 /* Main entry for a demangling filter executable.  It will demangle
5211    its command line arguments, if any.  If none are provided, it will
5212    filter stdin to stdout, replacing any recognized mangled C++ names
5213    with their demangled equivalents.  */
5214 
5215 int
5216 main (int argc, char *argv[])
5217 {
5218   int i;
5219   int opt_char;
5220   int options = DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES;
5221 
5222   /* Use the program name of this program, as invoked.  */
5223   program_name = argv[0];
5224 
5225   /* Parse options.  */
5226   do
5227     {
5228       opt_char = getopt_long (argc, argv, "hpv", long_options, NULL);
5229       switch (opt_char)
5230 	{
5231 	case '?':  /* Unrecognized option.  */
5232 	  print_usage (stderr, 1);
5233 	  break;
5234 
5235 	case 'h':
5236 	  print_usage (stdout, 0);
5237 	  break;
5238 
5239 	case 'p':
5240 	  options &= ~ DMGL_PARAMS;
5241 	  break;
5242 
5243 	case 'v':
5244 	  options |= DMGL_VERBOSE;
5245 	  break;
5246 	}
5247     }
5248   while (opt_char != -1);
5249 
5250   if (optind == argc)
5251     /* No command line arguments were provided.  Filter stdin.  */
5252     {
5253       dyn_string_t mangled = dyn_string_new (3);
5254       char *s;
5255 
5256       /* Read all of input.  */
5257       while (!feof (stdin))
5258 	{
5259 	  char c;
5260 
5261 	  /* Pile characters into mangled until we hit one that can't
5262 	     occur in a mangled name.  */
5263 	  c = getchar ();
5264 	  while (!feof (stdin) && is_mangled_char (c))
5265 	    {
5266 	      dyn_string_append_char (mangled, c);
5267 	      if (feof (stdin))
5268 		break;
5269 	      c = getchar ();
5270 	    }
5271 
5272 	  if (dyn_string_length (mangled) > 0)
5273 	    {
5274 #ifdef IN_GLIBCPP_V3
5275 	      s = __cxa_demangle (dyn_string_buf (mangled), NULL, NULL, NULL);
5276 #else
5277 	      s = cplus_demangle_v3 (dyn_string_buf (mangled), options);
5278 #endif
5279 
5280 	      if (s != NULL)
5281 		{
5282 		  fputs (s, stdout);
5283 		  free (s);
5284 		}
5285 	      else
5286 		{
5287 		  /* It might not have been a mangled name.  Print the
5288 		     original text.  */
5289 		  fputs (dyn_string_buf (mangled), stdout);
5290 		}
5291 
5292 	      dyn_string_clear (mangled);
5293 	    }
5294 
5295 	  /* If we haven't hit EOF yet, we've read one character that
5296 	     can't occur in a mangled name, so print it out.  */
5297 	  if (!feof (stdin))
5298 	    putchar (c);
5299 	}
5300 
5301       dyn_string_delete (mangled);
5302     }
5303   else
5304     /* Demangle command line arguments.  */
5305     {
5306       /* Loop over command line arguments.  */
5307       for (i = optind; i < argc; ++i)
5308 	{
5309 	  char *s;
5310 #ifdef IN_GLIBCPP_V3
5311 	  int status;
5312 #endif
5313 
5314 	  /* Attempt to demangle.  */
5315 #ifdef IN_GLIBCPP_V3
5316 	  s = __cxa_demangle (argv[i], NULL, NULL, &status);
5317 #else
5318 	  s = cplus_demangle_v3 (argv[i], options);
5319 #endif
5320 
5321 	  /* If it worked, print the demangled name.  */
5322 	  if (s != NULL)
5323 	    {
5324 	      printf ("%s\n", s);
5325 	      free (s);
5326 	    }
5327 	  else
5328 	    {
5329 #ifdef IN_GLIBCPP_V3
5330 	      fprintf (stderr, "Failed: %s (status %d)\n", argv[i], status);
5331 #else
5332 	      fprintf (stderr, "Failed: %s\n", argv[i]);
5333 #endif
5334 	    }
5335 	}
5336     }
5337 
5338   return 0;
5339 }
5340 
5341 #endif /* STANDALONE_DEMANGLER */
5342