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