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