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