OSDN Git Service

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