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