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