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