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