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