Rizin
unix-like reverse engineering framework and cli tools
cp-demangle.h File Reference

Go to the source code of this file.

Classes

struct  demangle_operator_info
 
struct  demangle_builtin_type_info
 
struct  d_info
 

Macros

#define d_peek_char(di)   (*((di)->n))
 
#define d_peek_next_char(di)   ((di)->n[1])
 
#define d_advance(di, i)   ((di)->n += (i))
 
#define d_check_char(di, c)   (d_peek_char(di) == c ? ((di)->n++, 1) : 0)
 
#define d_next_char(di)   (d_peek_char(di) == '\0' ? '\0' : *((di)->n++))
 
#define d_str(di)   ((di)->n)
 
#define CP_STATIC_IF_GLIBCPP_V3   extern
 
#define D_BUILTIN_TYPE_COUNT   (33)
 

Enumerations

enum  d_builtin_type_print {
  D_PRINT_DEFAULT , D_PRINT_INT , D_PRINT_UNSIGNED , D_PRINT_LONG ,
  D_PRINT_UNSIGNED_LONG , D_PRINT_LONG_LONG , D_PRINT_UNSIGNED_LONG_LONG , D_PRINT_BOOL ,
  D_PRINT_FLOAT , D_PRINT_VOID
}
 

Functions

CP_STATIC_IF_GLIBCPP_V3 struct demangle_componentcplus_demangle_mangled_name (struct d_info *, int)
 
CP_STATIC_IF_GLIBCPP_V3 struct demangle_componentcplus_demangle_type (struct d_info *)
 
void cplus_demangle_init_info (const char *, int, size_t, struct d_info *)
 

Variables

const struct demangle_operator_info cplus_demangle_operators []
 
CP_STATIC_IF_GLIBCPP_V3 const struct demangle_builtin_type_info cplus_demangle_builtin_types [D_BUILTIN_TYPE_COUNT]
 

Macro Definition Documentation

◆ CP_STATIC_IF_GLIBCPP_V3

#define CP_STATIC_IF_GLIBCPP_V3   extern

Definition at line 165 of file cp-demangle.h.

◆ d_advance

#define d_advance (   di,
  i 
)    ((di)->n += (i))

Definition at line 134 of file cp-demangle.h.

◆ D_BUILTIN_TYPE_COUNT

#define D_BUILTIN_TYPE_COUNT   (33)

Definition at line 172 of file cp-demangle.h.

◆ d_check_char

#define d_check_char (   di,
  c 
)    (d_peek_char(di) == c ? ((di)->n++, 1) : 0)

Definition at line 136 of file cp-demangle.h.

◆ d_next_char

#define d_next_char (   di)    (d_peek_char(di) == '\0' ? '\0' : *((di)->n++))

Definition at line 137 of file cp-demangle.h.

◆ d_peek_char

#define d_peek_char (   di)    (*((di)->n))

Definition at line 131 of file cp-demangle.h.

◆ d_peek_next_char

#define d_peek_next_char (   di)    ((di)->n[1])

Definition at line 133 of file cp-demangle.h.

◆ d_str

#define d_str (   di)    ((di)->n)

Definition at line 138 of file cp-demangle.h.

Enumeration Type Documentation

◆ d_builtin_type_print

Enumerator
D_PRINT_DEFAULT 
D_PRINT_INT 
D_PRINT_UNSIGNED 
D_PRINT_LONG 
D_PRINT_UNSIGNED_LONG 
D_PRINT_LONG_LONG 
D_PRINT_UNSIGNED_LONG_LONG 
D_PRINT_BOOL 
D_PRINT_FLOAT 
D_PRINT_VOID 

Definition at line 52 of file cp-demangle.h.

52  {
53  /* Print as (type)val. */
55  /* Print as integer. */
57  /* Print as unsigned integer, with trailing "u". */
59  /* Print as long, with trailing "l". */
61  /* Print as unsigned long, with trailing "ul". */
63  /* Print as long long, with trailing "ll". */
65  /* Print as unsigned long long, with trailing "ull". */
67  /* Print as bool. */
69  /* Print as float--put value in square brackets. */
71  /* Print in usual way, but here to detect void. */
73 };
@ D_PRINT_FLOAT
Definition: cp-demangle.h:70
@ D_PRINT_LONG
Definition: cp-demangle.h:60
@ D_PRINT_VOID
Definition: cp-demangle.h:72
@ D_PRINT_BOOL
Definition: cp-demangle.h:68
@ D_PRINT_UNSIGNED_LONG
Definition: cp-demangle.h:62
@ D_PRINT_DEFAULT
Definition: cp-demangle.h:54
@ D_PRINT_INT
Definition: cp-demangle.h:56
@ D_PRINT_UNSIGNED
Definition: cp-demangle.h:58
@ D_PRINT_UNSIGNED_LONG_LONG
Definition: cp-demangle.h:66
@ D_PRINT_LONG_LONG
Definition: cp-demangle.h:64

Function Documentation

◆ cplus_demangle_init_info()

void cplus_demangle_init_info ( const char *  mangled,
int  options,
size_t  len,
struct d_info di 
)

Definition at line 5681 of file cp-demangle.c.

5682  {
5683  di->s = mangled;
5684  di->send = mangled + len;
5685  di->options = options;
5686 
5687  di->n = mangled;
5688 
5689  /* We can not need more components than twice the number of chars in
5690  the mangled string. Most components correspond directly to
5691  chars, but the ARGLIST types are exceptions. */
5692  di->num_comps = 2 * len;
5693  di->next_comp = 0;
5694 
5695  /* Similarly, we can not need more substitutions than there are
5696  chars in the mangled string. */
5697  di->num_subs = len;
5698  di->next_sub = 0;
5699 
5700  di->last_name = NULL;
5701 
5702  di->expansion = 0;
5703  di->is_expression = 0;
5704  di->is_conversion = 0;
5705 }
size_t len
Definition: 6502dis.c:15
#define NULL
Definition: cris-opc.c:27
static const char struct stat static buf struct stat static buf static vhangup int options
Definition: sflib.h:145
int is_expression
Definition: cp-demangle.h:120
struct demangle_component * last_name
Definition: cp-demangle.h:114
int num_comps
Definition: cp-demangle.h:106
const char * s
Definition: cp-demangle.h:94
const char * send
Definition: cp-demangle.h:96
int options
Definition: cp-demangle.h:98
int next_sub
Definition: cp-demangle.h:110
int next_comp
Definition: cp-demangle.h:104
int is_conversion
Definition: cp-demangle.h:123
int num_subs
Definition: cp-demangle.h:112
const char * n
Definition: cp-demangle.h:100
int expansion
Definition: cp-demangle.h:118

References d_info::expansion, d_info::is_conversion, d_info::is_expression, d_info::last_name, len, d_info::n, d_info::next_comp, d_info::next_sub, NULL, d_info::num_comps, d_info::num_subs, options, d_info::options, d_info::s, and d_info::send.

Referenced by d_demangle_callback(), and is_ctor_or_dtor().

◆ cplus_demangle_mangled_name()

CP_STATIC_IF_GLIBCPP_V3 struct demangle_component* cplus_demangle_mangled_name ( struct d_info di,
int  top_level 
)

Definition at line 1170 of file cp-demangle.c.

1170  {
1171  struct demangle_component *p;
1172 
1173  if (!d_check_char(di, '_')
1174  /* Allow missing _ if not at toplevel to work around a
1175  bug in G++ abi-version=2 mangling; see the comment in
1176  write_template_arg. */
1177  && top_level)
1178  return NULL;
1179  if (!d_check_char(di, 'Z'))
1180  return NULL;
1181  p = d_encoding(di, top_level);
1182 
1183  /* If at top level and parsing parameters, check for a clone
1184  suffix. */
1185  if (top_level && (di->options & DMGL_PARAMS) != 0)
1186  while (d_peek_char(di) == '.' && (IS_LOWER(d_peek_next_char(di)) || d_peek_next_char(di) == '_' || IS_DIGIT(d_peek_next_char(di))))
1187  p = d_clone_suffix(di, p);
1188 
1189  return p;
1190 }
#define IS_LOWER(c)
Definition: cp-demangle.c:210
#define IS_DIGIT(c)
Definition: cp-demangle.c:208
static struct demangle_component * d_encoding(struct d_info *, int)
Definition: cp-demangle.c:1247
static struct demangle_component * d_clone_suffix(struct d_info *, struct demangle_component *)
Definition: cp-demangle.c:3480
#define d_check_char(di, c)
Definition: cp-demangle.h:136
#define d_peek_next_char(di)
Definition: cp-demangle.h:133
#define d_peek_char(di)
Definition: cp-demangle.h:131
#define DMGL_PARAMS
Definition: demangle.h:43
void * p
Definition: libc.cpp:67

References d_check_char, d_clone_suffix(), d_encoding(), d_peek_char, d_peek_next_char, DMGL_PARAMS, IS_DIGIT, IS_LOWER, NULL, d_info::options, and p.

Referenced by d_demangle_callback(), d_expr_primary(), and is_ctor_or_dtor().

◆ cplus_demangle_type()

CP_STATIC_IF_GLIBCPP_V3 struct demangle_component* cplus_demangle_type ( struct d_info di)

Definition at line 2212 of file cp-demangle.c.

2212  {
2213  char peek;
2214  struct demangle_component *ret;
2215  int can_subst;
2216 
2217  /* The ABI specifies that when CV-qualifiers are used, the base type
2218  is substitutable, and the fully qualified type is substitutable,
2219  but the base type with a strict subset of the CV-qualifiers is
2220  not substitutable. The natural recursive implementation of the
2221  CV-qualifiers would cause subsets to be substitutable, so instead
2222  we pull them all off now.
2223 
2224  FIXME: The ABI says that order-insensitive vendor qualifiers
2225  should be handled in the same way, but we have no way to tell
2226  which vendor qualifiers are order-insensitive and which are
2227  order-sensitive. So we just assume that they are all
2228  order-sensitive. g++ 3.4 supports only one vendor qualifier,
2229  __vector, and it treats it as order-sensitive when mangling
2230  names. */
2231 
2232  if (next_is_type_qual(di)) {
2233  struct demangle_component **pret;
2234 
2235  pret = d_cv_qualifiers(di, &ret, 0);
2236  if (pret == NULL)
2237  return NULL;
2238  if (d_peek_char(di) == 'F') {
2239  /* cv-qualifiers before a function type apply to 'this',
2240  so avoid adding the unqualified function type to
2241  the substitution list. */
2242  *pret = d_function_type(di);
2243  } else
2244  *pret = cplus_demangle_type(di);
2245  if (!*pret)
2246  return NULL;
2247  if ((*pret)->type == DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS || (*pret)->type == DEMANGLE_COMPONENT_REFERENCE_THIS) {
2248  /* Move the ref-qualifier outside the cv-qualifiers so that
2249  they are printed in the right order. */
2250  struct demangle_component *fn = d_left(*pret);
2251  d_left(*pret) = ret;
2252  ret = *pret;
2253  *pret = fn;
2254  }
2255  if (!d_add_substitution(di, ret))
2256  return NULL;
2257  return ret;
2258  }
2259 
2260  can_subst = 1;
2261 
2262  peek = d_peek_char(di);
2263  switch (peek) {
2264  case 'a':
2265  case 'b':
2266  case 'c':
2267  case 'd':
2268  case 'e':
2269  case 'f':
2270  case 'g':
2271  case 'h':
2272  case 'i':
2273  case 'j':
2274  case 'l':
2275  case 'm':
2276  case 'n':
2277  case 'o':
2278  case 's':
2279  case 't':
2280  case 'v':
2281  case 'w':
2282  case 'x':
2283  case 'y':
2284  case 'z':
2285  ret = d_make_builtin_type(di,
2286  &cplus_demangle_builtin_types[peek - 'a']);
2287  di->expansion += ret->u.s_builtin.type->len;
2288  can_subst = 0;
2289  d_advance(di, 1);
2290  break;
2291 
2292  case 'u':
2293  d_advance(di, 1);
2295  d_source_name(di), NULL);
2296  break;
2297 
2298  case 'F':
2299  ret = d_function_type(di);
2300  break;
2301 
2302  case '0':
2303  case '1':
2304  case '2':
2305  case '3':
2306  case '4':
2307  case '5':
2308  case '6':
2309  case '7':
2310  case '8':
2311  case '9':
2312  case 'N':
2313  case 'Z':
2314  ret = d_class_enum_type(di);
2315  break;
2316 
2317  case 'A':
2318  ret = d_array_type(di);
2319  break;
2320 
2321  case 'M':
2322  ret = d_pointer_to_member_type(di);
2323  break;
2324 
2325  case 'T':
2326  ret = d_template_param(di);
2327  if (d_peek_char(di) == 'I') {
2328  /* This may be <template-template-param> <template-args>.
2329  If this is the type for a conversion operator, we can
2330  have a <template-template-param> here only by following
2331  a derivation like this:
2332 
2333  <nested-name>
2334  -> <template-prefix> <template-args>
2335  -> <prefix> <template-unqualified-name> <template-args>
2336  -> <unqualified-name> <template-unqualified-name> <template-args>
2337  -> <source-name> <template-unqualified-name> <template-args>
2338  -> <source-name> <operator-name> <template-args>
2339  -> <source-name> cv <type> <template-args>
2340  -> <source-name> cv <template-template-param> <template-args> <template-args>
2341 
2342  where the <template-args> is followed by another.
2343  Otherwise, we must have a derivation like this:
2344 
2345  <nested-name>
2346  -> <template-prefix> <template-args>
2347  -> <prefix> <template-unqualified-name> <template-args>
2348  -> <unqualified-name> <template-unqualified-name> <template-args>
2349  -> <source-name> <template-unqualified-name> <template-args>
2350  -> <source-name> <operator-name> <template-args>
2351  -> <source-name> cv <type> <template-args>
2352  -> <source-name> cv <template-param> <template-args>
2353 
2354  where we need to leave the <template-args> to be processed
2355  by d_prefix (following the <template-prefix>).
2356 
2357  The <template-template-param> part is a substitution
2358  candidate. */
2359  if (!di->is_conversion) {
2360  if (!d_add_substitution(di, ret))
2361  return NULL;
2363  d_template_args(di));
2364  } else {
2365  struct demangle_component *args;
2366  struct d_info_checkpoint checkpoint;
2367 
2368  d_checkpoint(di, &checkpoint);
2369  args = d_template_args(di);
2370  if (d_peek_char(di) == 'I') {
2371  if (!d_add_substitution(di, ret))
2372  return NULL;
2374  args);
2375  } else
2376  d_backtrack(di, &checkpoint);
2377  }
2378  }
2379  break;
2380 
2381  case 'S':
2382  /* If this is a special substitution, then it is the start of
2383  <class-enum-type>. */
2384  {
2385  char peek_next;
2386 
2387  peek_next = d_peek_next_char(di);
2388  if (IS_DIGIT(peek_next) || peek_next == '_' || IS_UPPER(peek_next)) {
2389  ret = d_substitution(di, 0);
2390  /* The substituted name may have been a template name and
2391  may be followed by tepmlate args. */
2392  if (d_peek_char(di) == 'I')
2394  d_template_args(di));
2395  else
2396  can_subst = 0;
2397  } else {
2398  ret = d_class_enum_type(di);
2399  /* If the substitution was a complete type, then it is not
2400  a new substitution candidate. However, if the
2401  substitution was followed by template arguments, then
2402  the whole thing is a substitution candidate. */
2403  if (ret != NULL && ret->type == DEMANGLE_COMPONENT_SUB_STD)
2404  can_subst = 0;
2405  }
2406  }
2407  break;
2408 
2409  case 'O':
2410  d_advance(di, 1);
2412  cplus_demangle_type(di), NULL);
2413  break;
2414 
2415  case 'P':
2416  d_advance(di, 1);
2418  cplus_demangle_type(di), NULL);
2419  break;
2420 
2421  case 'R':
2422  d_advance(di, 1);
2424  cplus_demangle_type(di), NULL);
2425  break;
2426 
2427  case 'C':
2428  d_advance(di, 1);
2430  cplus_demangle_type(di), NULL);
2431  break;
2432 
2433  case 'G':
2434  d_advance(di, 1);
2436  cplus_demangle_type(di), NULL);
2437  break;
2438 
2439  case 'U':
2440  d_advance(di, 1);
2441  ret = d_source_name(di);
2442  if (d_peek_char(di) == 'I')
2444  d_template_args(di));
2446  cplus_demangle_type(di), ret);
2447  break;
2448 
2449  case 'D':
2450  can_subst = 0;
2451  d_advance(di, 1);
2452  peek = d_next_char(di);
2453  switch (peek) {
2454  case 'T':
2455  case 't':
2456  /* decltype (expression) */
2458  d_expression(di), NULL);
2459  if (ret && d_next_char(di) != 'E')
2460  ret = NULL;
2461  can_subst = 1;
2462  break;
2463 
2464  case 'p':
2465  /* Pack expansion. */
2467  cplus_demangle_type(di), NULL);
2468  can_subst = 1;
2469  break;
2470 
2471  case 'a':
2472  /* auto */
2473  ret = d_make_name(di, "auto", 4);
2474  break;
2475  case 'c':
2476  /* decltype(auto) */
2477  ret = d_make_name(di, "decltype(auto)", 14);
2478  break;
2479 
2480  case 'f':
2481  /* 32-bit decimal floating point */
2483  di->expansion += ret->u.s_builtin.type->len;
2484  break;
2485  case 'd':
2486  /* 64-bit DFP */
2488  di->expansion += ret->u.s_builtin.type->len;
2489  break;
2490  case 'e':
2491  /* 128-bit DFP */
2493  di->expansion += ret->u.s_builtin.type->len;
2494  break;
2495  case 'h':
2496  /* 16-bit half-precision FP */
2498  di->expansion += ret->u.s_builtin.type->len;
2499  break;
2500  case 's':
2501  /* char16_t */
2503  di->expansion += ret->u.s_builtin.type->len;
2504  break;
2505  case 'i':
2506  /* char32_t */
2508  di->expansion += ret->u.s_builtin.type->len;
2509  break;
2510 
2511  case 'F':
2512  /* Fixed point types. DF<int bits><length><fract bits><sat> */
2513  ret = d_make_empty(di);
2515  if ((ret->u.s_fixed.accum = IS_DIGIT(d_peek_char(di))))
2516  /* For demangling we don't care about the bits. */
2517  d_number(di);
2518  ret->u.s_fixed.length = cplus_demangle_type(di);
2519  if (ret->u.s_fixed.length == NULL)
2520  return NULL;
2521  d_number(di);
2522  peek = d_next_char(di);
2523  ret->u.s_fixed.sat = (peek == 's');
2524  break;
2525 
2526  case 'v':
2527  ret = d_vector_type(di);
2528  can_subst = 1;
2529  break;
2530 
2531  case 'n':
2532  /* decltype(nullptr) */
2534  di->expansion += ret->u.s_builtin.type->len;
2535  break;
2536 
2537  default:
2538  return NULL;
2539  }
2540  break;
2541 
2542  default:
2543  return NULL;
2544  }
2545 
2546  if (can_subst) {
2547  if (!d_add_substitution(di, ret))
2548  return NULL;
2549  }
2550 
2551  return ret;
2552 }
#define IS_UPPER(c)
Definition: cp-demangle.c:209
static int next_is_type_qual(struct d_info *di)
Definition: cp-demangle.c:2140
static struct demangle_component * d_make_name(struct d_info *, const char *, int)
Definition: cp-demangle.c:1030
static struct demangle_component * d_make_comp(struct d_info *, enum demangle_component_type, struct demangle_component *, struct demangle_component *)
Definition: cp-demangle.c:915
static struct demangle_component * d_class_enum_type(struct d_info *)
Definition: cp-demangle.c:2764
static struct demangle_component * d_make_builtin_type(struct d_info *, const struct demangle_builtin_type_info *)
Definition: cp-demangle.c:1042
CP_STATIC_IF_GLIBCPP_V3 struct demangle_component * cplus_demangle_type(struct d_info *di)
Definition: cp-demangle.c:2212
static int d_add_substitution(struct d_info *, struct demangle_component *)
Definition: cp-demangle.c:3503
static struct demangle_component * d_template_param(struct d_info *)
Definition: cp-demangle.c:2890
static int d_number(struct d_info *)
Definition: cp-demangle.c:1581
static struct demangle_component ** d_cv_qualifiers(struct d_info *, struct demangle_component **, int)
Definition: cp-demangle.c:2557
static void d_checkpoint(struct d_info *, struct d_info_checkpoint *)
Definition: cp-demangle.c:3640
static struct demangle_component * d_function_type(struct d_info *)
Definition: cp-demangle.c:2670
#define d_left(dc)
Definition: cp-demangle.c:242
static struct demangle_component * d_vector_type(struct d_info *)
Definition: cp-demangle.c:2811
static struct demangle_component * d_array_type(struct d_info *)
Definition: cp-demangle.c:2773
static void d_backtrack(struct d_info *, struct d_info_checkpoint *)
Definition: cp-demangle.c:3648
static struct demangle_component * d_substitution(struct d_info *, int)
Definition: cp-demangle.c:3557
static struct demangle_component * d_source_name(struct d_info *)
Definition: cp-demangle.c:1566
static struct demangle_component * d_expression(struct d_info *)
Definition: cp-demangle.c:3249
CP_STATIC_IF_GLIBCPP_V3 const struct demangle_builtin_type_info cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT]
Definition: cp-demangle.c:2174
static struct demangle_component * d_template_args(struct d_info *)
Definition: cp-demangle.c:2906
static struct demangle_component * d_pointer_to_member_type(struct d_info *)
Definition: cp-demangle.c:2835
static struct demangle_component * d_make_empty(struct d_info *)
Definition: cp-demangle.c:901
#define d_next_char(di)
Definition: cp-demangle.h:137
#define d_advance(di, i)
Definition: cp-demangle.h:134
@ DEMANGLE_COMPONENT_REFERENCE_THIS
Definition: demangle.h:336
@ DEMANGLE_COMPONENT_PACK_EXPANSION
Definition: demangle.h:464
@ DEMANGLE_COMPONENT_REFERENCE
Definition: demangle.h:349
@ DEMANGLE_COMPONENT_SUB_STD
Definition: demangle.h:315
@ DEMANGLE_COMPONENT_COMPLEX
Definition: demangle.h:354
@ DEMANGLE_COMPONENT_POINTER
Definition: demangle.h:346
@ DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS
Definition: demangle.h:339
@ DEMANGLE_COMPONENT_VENDOR_TYPE
Definition: demangle.h:360
@ DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL
Definition: demangle.h:343
@ DEMANGLE_COMPONENT_RVALUE_REFERENCE
Definition: demangle.h:352
@ DEMANGLE_COMPONENT_DECLTYPE
Definition: demangle.h:445
@ DEMANGLE_COMPONENT_IMAGINARY
Definition: demangle.h:356
@ DEMANGLE_COMPONENT_TEMPLATE
Definition: demangle.h:260
@ DEMANGLE_COMPONENT_FIXED_TYPE
Definition: demangle.h:374
static const char struct stat static buf struct stat static buf static idle const char static path static fd const char static len const void static prot const char struct module static image struct kernel_sym static table unsigned char static buf static fsuid unsigned struct dirent unsigned static count const struct iovec static count static pid const void static len static flags const struct sched_param static p static pid static policy struct timespec static tp static suid unsigned fn
Definition: sflib.h:186
int args
Definition: mipsasm.c:18
union demangle_component::@376 u
enum demangle_component_type type
Definition: demangle.h:487
struct demangle_component::@376::@383 s_builtin
struct demangle_component::@376::@380 s_fixed

References args, cplus_demangle_builtin_types, d_add_substitution(), d_advance, d_array_type(), d_backtrack(), d_checkpoint(), d_class_enum_type(), d_cv_qualifiers(), d_expression(), d_function_type(), d_left, d_make_builtin_type(), d_make_comp(), d_make_empty(), d_make_name(), d_next_char, d_number(), d_peek_char, d_peek_next_char, d_pointer_to_member_type(), d_source_name(), d_substitution(), d_template_args(), d_template_param(), d_vector_type(), DEMANGLE_COMPONENT_COMPLEX, DEMANGLE_COMPONENT_DECLTYPE, DEMANGLE_COMPONENT_FIXED_TYPE, DEMANGLE_COMPONENT_IMAGINARY, DEMANGLE_COMPONENT_PACK_EXPANSION, DEMANGLE_COMPONENT_POINTER, DEMANGLE_COMPONENT_REFERENCE, DEMANGLE_COMPONENT_REFERENCE_THIS, DEMANGLE_COMPONENT_RVALUE_REFERENCE, DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS, DEMANGLE_COMPONENT_SUB_STD, DEMANGLE_COMPONENT_TEMPLATE, DEMANGLE_COMPONENT_VENDOR_TYPE, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL, d_info::expansion, fn, d_info::is_conversion, IS_DIGIT, IS_UPPER, next_is_type_qual(), NULL, demangle_component::s_builtin, demangle_component::s_fixed, demangle_component::type, and demangle_component::u.

Referenced by d_array_type(), d_bare_function_type(), d_ctor_dtor_name(), d_demangle_callback(), d_expr_primary(), d_expression_1(), d_operator_name(), d_parmlist(), d_pointer_to_member_type(), d_prefix(), d_special_name(), d_template_arg(), and d_vector_type().

Variable Documentation

◆ cplus_demangle_builtin_types

Definition at line 174 of file cp-demangle.h.

◆ cplus_demangle_operators

const struct demangle_operator_info cplus_demangle_operators[]
extern

Definition at line 1665 of file cp-demangle.c.

Referenced by d_operator_name().