OSDN Git Service

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