Lines Matching refs:di

936 d_make_empty (struct d_info *di)  in d_make_empty()  argument
940 if (di->next_comp >= di->num_comps) in d_make_empty()
942 p = &di->comps[di->next_comp]; in d_make_empty()
945 ++di->next_comp; in d_make_empty()
952 d_make_comp (struct d_info *di, enum demangle_component_type type, in d_make_comp() argument
1047 p = d_make_empty (di); in d_make_comp()
1060 d_make_demangle_mangled_name (struct d_info *di, const char *s) in d_make_demangle_mangled_name() argument
1062 if (d_peek_char (di) != '_' || d_peek_next_char (di) != 'Z') in d_make_demangle_mangled_name()
1063 return d_make_name (di, s, strlen (s)); in d_make_demangle_mangled_name()
1064 d_advance (di, 2); in d_make_demangle_mangled_name()
1065 return d_encoding (di, 0); in d_make_demangle_mangled_name()
1071 d_make_name (struct d_info *di, const char *s, int len) in d_make_name() argument
1075 p = d_make_empty (di); in d_make_name()
1084 d_make_builtin_type (struct d_info *di, in d_make_builtin_type() argument
1091 p = d_make_empty (di); in d_make_builtin_type()
1103 d_make_operator (struct d_info *di, const struct demangle_operator_info *op) in d_make_operator() argument
1107 p = d_make_empty (di); in d_make_operator()
1119 d_make_extended_operator (struct d_info *di, int args, in d_make_extended_operator() argument
1124 p = d_make_empty (di); in d_make_extended_operator()
1131 d_make_default_arg (struct d_info *di, int num, in d_make_default_arg() argument
1134 struct demangle_component *p = d_make_empty (di); in d_make_default_arg()
1147 d_make_ctor (struct d_info *di, enum gnu_v3_ctor_kinds kind, in d_make_ctor() argument
1152 p = d_make_empty (di); in d_make_ctor()
1161 d_make_dtor (struct d_info *di, enum gnu_v3_dtor_kinds kind, in d_make_dtor() argument
1166 p = d_make_empty (di); in d_make_dtor()
1175 d_make_template_param (struct d_info *di, int i) in d_make_template_param() argument
1179 p = d_make_empty (di); in d_make_template_param()
1191 d_make_function_param (struct d_info *di, int i) in d_make_function_param() argument
1195 p = d_make_empty (di); in d_make_function_param()
1207 d_make_sub (struct d_info *di, const char *name, int len) in d_make_sub() argument
1211 p = d_make_empty (di); in d_make_sub()
1227 cplus_demangle_mangled_name (struct d_info *di, int top_level) in cplus_demangle_mangled_name() argument
1231 if (! d_check_char (di, '_') in cplus_demangle_mangled_name()
1237 if (! d_check_char (di, 'Z')) in cplus_demangle_mangled_name()
1239 p = d_encoding (di, top_level); in cplus_demangle_mangled_name()
1243 if (top_level && (di->options & DMGL_PARAMS) != 0) in cplus_demangle_mangled_name()
1244 while (d_peek_char (di) == '.' in cplus_demangle_mangled_name()
1245 && (IS_LOWER (d_peek_next_char (di)) in cplus_demangle_mangled_name()
1246 || d_peek_next_char (di) == '_' in cplus_demangle_mangled_name()
1247 || IS_DIGIT (d_peek_next_char (di)))) in cplus_demangle_mangled_name()
1248 p = d_clone_suffix (di, p); in cplus_demangle_mangled_name()
1312 d_encoding (struct d_info *di, int top_level) in d_encoding() argument
1314 char peek = d_peek_char (di); in d_encoding()
1318 dc = d_special_name (di); in d_encoding()
1321 dc = d_name (di); in d_encoding()
1325 else if (top_level && (di->options & DMGL_PARAMS) == 0) in d_encoding()
1349 peek = d_peek_char (di); in d_encoding()
1354 ftype = d_bare_function_type (di, has_return_type (dc)); in d_encoding()
1365 dc = d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, in d_encoding()
1380 d_abi_tags (struct d_info *di, struct demangle_component *dc) in d_abi_tags() argument
1386 hold_last_name = di->last_name; in d_abi_tags()
1388 while (peek = d_peek_char (di), in d_abi_tags()
1392 d_advance (di, 1); in d_abi_tags()
1393 tag = d_source_name (di); in d_abi_tags()
1394 dc = d_make_comp (di, DEMANGLE_COMPONENT_TAGGED_NAME, dc, tag); in d_abi_tags()
1397 di->last_name = hold_last_name; in d_abi_tags()
1415 d_name (struct d_info *di) in d_name() argument
1417 char peek = d_peek_char (di); in d_name()
1423 return d_nested_name (di); in d_name()
1426 return d_local_name (di); in d_name()
1429 return d_unqualified_name (di); in d_name()
1435 if (d_peek_next_char (di) != 't') in d_name()
1437 dc = d_substitution (di, 0); in d_name()
1442 d_advance (di, 2); in d_name()
1443 dc = d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, in d_name()
1444 d_make_name (di, "std", 3), in d_name()
1445 d_unqualified_name (di)); in d_name()
1446 di->expansion += 3; in d_name()
1450 if (d_peek_char (di) != 'I') in d_name()
1464 if (! d_add_substitution (di, dc)) in d_name()
1467 dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc, in d_name()
1468 d_template_args (di)); in d_name()
1476 dc = d_unqualified_name (di); in d_name()
1477 if (d_peek_char (di) == 'I') in d_name()
1482 if (! d_add_substitution (di, dc)) in d_name()
1484 dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc, in d_name()
1485 d_template_args (di)); in d_name()
1496 d_nested_name (struct d_info *di) in d_nested_name() argument
1502 if (! d_check_char (di, 'N')) in d_nested_name()
1505 pret = d_cv_qualifiers (di, &ret, 1); in d_nested_name()
1511 rqual = d_ref_qualifier (di, NULL); in d_nested_name()
1513 *pret = d_prefix (di); in d_nested_name()
1523 if (! d_check_char (di, 'E')) in d_nested_name()
1542 d_prefix (struct d_info *di) in d_prefix() argument
1552 peek = d_peek_char (di); in d_prefix()
1563 char peek2 = d_peek_next_char (di); in d_prefix()
1566 dc = cplus_demangle_type (di); in d_prefix()
1569 dc = d_unqualified_name (di); in d_prefix()
1576 dc = d_unqualified_name (di); in d_prefix()
1578 dc = d_substitution (di, 1); in d_prefix()
1584 dc = d_template_args (di); in d_prefix()
1587 dc = d_template_param (di); in d_prefix()
1597 d_advance (di, 1); in d_prefix()
1606 ret = d_make_comp (di, comb_type, ret, dc); in d_prefix()
1608 if (peek != 'S' && d_peek_char (di) != 'E') in d_prefix()
1610 if (! d_add_substitution (di, ret)) in d_prefix()
1625 d_unqualified_name (struct d_info *di) in d_unqualified_name() argument
1630 peek = d_peek_char (di); in d_unqualified_name()
1632 ret = d_source_name (di); in d_unqualified_name()
1635 if (peek == 'o' && d_peek_next_char (di) == 'n') in d_unqualified_name()
1636 d_advance (di, 2); in d_unqualified_name()
1637 ret = d_operator_name (di); in d_unqualified_name()
1640 di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2; in d_unqualified_name()
1642 ret = d_make_comp (di, DEMANGLE_COMPONENT_UNARY, ret, in d_unqualified_name()
1643 d_source_name (di)); in d_unqualified_name()
1647 ret = d_ctor_dtor_name (di); in d_unqualified_name()
1650 d_advance (di, 1); in d_unqualified_name()
1652 ret = d_source_name (di); in d_unqualified_name()
1655 if (! d_discriminator (di)) in d_unqualified_name()
1660 switch (d_peek_next_char (di)) in d_unqualified_name()
1663 ret = d_lambda (di); in d_unqualified_name()
1666 ret = d_unnamed_type (di); in d_unqualified_name()
1675 if (d_peek_char (di) == 'B') in d_unqualified_name()
1676 ret = d_abi_tags (di, ret); in d_unqualified_name()
1683 d_source_name (struct d_info *di) in d_source_name() argument
1688 len = d_number (di); in d_source_name()
1691 ret = d_identifier (di, len); in d_source_name()
1692 di->last_name = ret; in d_source_name()
1699 d_number (struct d_info *di) in d_number() argument
1706 peek = d_peek_char (di); in d_number()
1710 d_advance (di, 1); in d_number()
1711 peek = d_peek_char (di); in d_number()
1726 d_advance (di, 1); in d_number()
1727 peek = d_peek_char (di); in d_number()
1734 d_number_component (struct d_info *di) in d_number_component() argument
1736 struct demangle_component *ret = d_make_empty (di); in d_number_component()
1740 ret->u.s_number.number = d_number (di); in d_number_component()
1748 d_identifier (struct d_info *di, int len) in d_identifier() argument
1752 name = d_str (di); in d_identifier()
1754 if (di->send - name < len) in d_identifier()
1757 d_advance (di, len); in d_identifier()
1762 if ((di->options & DMGL_JAVA) != 0 in d_identifier()
1763 && d_peek_char (di) == '$') in d_identifier()
1764 d_advance (di, 1); in d_identifier()
1779 di->expansion -= len - sizeof "(anonymous namespace)"; in d_identifier()
1780 return d_make_name (di, "(anonymous namespace)", in d_identifier()
1785 return d_make_name (di, name, len); in d_identifier()
1872 d_operator_name (struct d_info *di) in d_operator_name() argument
1877 c1 = d_next_char (di); in d_operator_name()
1878 c2 = d_next_char (di); in d_operator_name()
1880 return d_make_extended_operator (di, c2 - '0', d_source_name (di)); in d_operator_name()
1884 int was_conversion = di->is_conversion; in d_operator_name()
1887 di->is_conversion = ! di->is_expression; in d_operator_name()
1888 type = cplus_demangle_type (di); in d_operator_name()
1889 if (di->is_conversion) in d_operator_name()
1890 res = d_make_comp (di, DEMANGLE_COMPONENT_CONVERSION, type, NULL); in d_operator_name()
1892 res = d_make_comp (di, DEMANGLE_COMPONENT_CAST, type, NULL); in d_operator_name()
1893 di->is_conversion = was_conversion; in d_operator_name()
1915 return d_make_operator (di, p); in d_operator_name()
1928 d_make_character (struct d_info *di, int c) in d_make_character() argument
1931 p = d_make_empty (di); in d_make_character()
1941 d_java_resource (struct d_info *di) in d_java_resource() argument
1949 len = d_number (di); in d_java_resource()
1954 if (d_next_char (di) != '_') in d_java_resource()
1958 str = d_str (di); in d_java_resource()
1985 next = d_make_character (di, c); in d_java_resource()
1986 d_advance (di, i); in d_java_resource()
1987 str = d_str (di); in d_java_resource()
1999 next = d_make_name (di, str, i); in d_java_resource()
2000 d_advance (di, i); in d_java_resource()
2001 str = d_str (di); in d_java_resource()
2012 p = d_make_comp (di, DEMANGLE_COMPONENT_COMPOUND_NAME, p, next); in d_java_resource()
2018 p = d_make_comp (di, DEMANGLE_COMPONENT_JAVA_RESOURCE, p, NULL); in d_java_resource()
2043 d_special_name (struct d_info *di) in d_special_name() argument
2045 di->expansion += 20; in d_special_name()
2046 if (d_check_char (di, 'T')) in d_special_name()
2048 switch (d_next_char (di)) in d_special_name()
2051 di->expansion -= 5; in d_special_name()
2052 return d_make_comp (di, DEMANGLE_COMPONENT_VTABLE, in d_special_name()
2053 cplus_demangle_type (di), NULL); in d_special_name()
2055 di->expansion -= 10; in d_special_name()
2056 return d_make_comp (di, DEMANGLE_COMPONENT_VTT, in d_special_name()
2057 cplus_demangle_type (di), NULL); in d_special_name()
2059 return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO, in d_special_name()
2060 cplus_demangle_type (di), NULL); in d_special_name()
2062 return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_NAME, in d_special_name()
2063 cplus_demangle_type (di), NULL); in d_special_name()
2066 if (! d_call_offset (di, 'h')) in d_special_name()
2068 return d_make_comp (di, DEMANGLE_COMPONENT_THUNK, in d_special_name()
2069 d_encoding (di, 0), NULL); in d_special_name()
2072 if (! d_call_offset (di, 'v')) in d_special_name()
2074 return d_make_comp (di, DEMANGLE_COMPONENT_VIRTUAL_THUNK, in d_special_name()
2075 d_encoding (di, 0), NULL); in d_special_name()
2078 if (! d_call_offset (di, '\0')) in d_special_name()
2080 if (! d_call_offset (di, '\0')) in d_special_name()
2082 return d_make_comp (di, DEMANGLE_COMPONENT_COVARIANT_THUNK, in d_special_name()
2083 d_encoding (di, 0), NULL); in d_special_name()
2091 derived_type = cplus_demangle_type (di); in d_special_name()
2092 offset = d_number (di); in d_special_name()
2095 if (! d_check_char (di, '_')) in d_special_name()
2097 base_type = cplus_demangle_type (di); in d_special_name()
2100 di->expansion += 5; in d_special_name()
2101 return d_make_comp (di, DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE, in d_special_name()
2106 return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_FN, in d_special_name()
2107 cplus_demangle_type (di), NULL); in d_special_name()
2109 return d_make_comp (di, DEMANGLE_COMPONENT_JAVA_CLASS, in d_special_name()
2110 cplus_demangle_type (di), NULL); in d_special_name()
2113 return d_make_comp (di, DEMANGLE_COMPONENT_TLS_INIT, in d_special_name()
2114 d_name (di), NULL); in d_special_name()
2117 return d_make_comp (di, DEMANGLE_COMPONENT_TLS_WRAPPER, in d_special_name()
2118 d_name (di), NULL); in d_special_name()
2121 return d_make_comp (di, DEMANGLE_COMPONENT_TPARM_OBJ, in d_special_name()
2122 d_template_arg (di), NULL); in d_special_name()
2128 else if (d_check_char (di, 'G')) in d_special_name()
2130 switch (d_next_char (di)) in d_special_name()
2133 return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, in d_special_name()
2134 d_name (di), NULL); in d_special_name()
2138 struct demangle_component *name = d_name (di); in d_special_name()
2139 return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, name, in d_special_name()
2140 d_number_component (di)); in d_special_name()
2144 return d_make_comp (di, DEMANGLE_COMPONENT_HIDDEN_ALIAS, in d_special_name()
2145 d_encoding (di, 0), NULL); in d_special_name()
2148 switch (d_next_char (di)) in d_special_name()
2151 return d_make_comp (di, DEMANGLE_COMPONENT_NONTRANSACTION_CLONE, in d_special_name()
2152 d_encoding (di, 0), NULL); in d_special_name()
2160 return d_make_comp (di, DEMANGLE_COMPONENT_TRANSACTION_CLONE, in d_special_name()
2161 d_encoding (di, 0), NULL); in d_special_name()
2165 return d_java_resource (di); in d_special_name()
2189 d_call_offset (struct d_info *di, int c) in d_call_offset() argument
2192 c = d_next_char (di); in d_call_offset()
2195 d_number (di); in d_call_offset()
2198 d_number (di); in d_call_offset()
2199 if (! d_check_char (di, '_')) in d_call_offset()
2201 d_number (di); in d_call_offset()
2206 if (! d_check_char (di, '_')) in d_call_offset()
2221 d_ctor_dtor_name (struct d_info *di) in d_ctor_dtor_name() argument
2223 if (di->last_name != NULL) in d_ctor_dtor_name()
2225 if (di->last_name->type == DEMANGLE_COMPONENT_NAME) in d_ctor_dtor_name()
2226 di->expansion += di->last_name->u.s_name.len; in d_ctor_dtor_name()
2227 else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD) in d_ctor_dtor_name()
2228 di->expansion += di->last_name->u.s_string.len; in d_ctor_dtor_name()
2230 switch (d_peek_char (di)) in d_ctor_dtor_name()
2237 if (d_peek_next_char (di) == 'I') in d_ctor_dtor_name()
2240 d_advance (di, 1); in d_ctor_dtor_name()
2243 switch (d_peek_next_char (di)) in d_ctor_dtor_name()
2264 d_advance (di, 2); in d_ctor_dtor_name()
2267 cplus_demangle_type (di); in d_ctor_dtor_name()
2269 return d_make_ctor (di, kind, di->last_name); in d_ctor_dtor_name()
2276 switch (d_peek_next_char (di)) in d_ctor_dtor_name()
2297 d_advance (di, 2); in d_ctor_dtor_name()
2298 return d_make_dtor (di, kind, di->last_name); in d_ctor_dtor_name()
2310 next_is_type_qual (struct d_info *di) in next_is_type_qual() argument
2312 char peek = d_peek_char (di); in next_is_type_qual()
2317 peek = d_peek_next_char (di); in next_is_type_qual()
2389 cplus_demangle_type (struct d_info *di) in cplus_demangle_type() argument
2410 if (next_is_type_qual (di)) in cplus_demangle_type()
2414 pret = d_cv_qualifiers (di, &ret, 0); in cplus_demangle_type()
2417 if (d_peek_char (di) == 'F') in cplus_demangle_type()
2422 *pret = d_function_type (di); in cplus_demangle_type()
2425 *pret = cplus_demangle_type (di); in cplus_demangle_type()
2438 if (! d_add_substitution (di, ret)) in cplus_demangle_type()
2445 peek = d_peek_char (di); in cplus_demangle_type()
2452 ret = d_make_builtin_type (di, in cplus_demangle_type()
2454 di->expansion += ret->u.s_builtin.type->len; in cplus_demangle_type()
2456 d_advance (di, 1); in cplus_demangle_type()
2460 d_advance (di, 1); in cplus_demangle_type()
2461 ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE, in cplus_demangle_type()
2462 d_source_name (di), NULL); in cplus_demangle_type()
2466 ret = d_function_type (di); in cplus_demangle_type()
2473 ret = d_class_enum_type (di); in cplus_demangle_type()
2477 ret = d_array_type (di); in cplus_demangle_type()
2481 ret = d_pointer_to_member_type (di); in cplus_demangle_type()
2485 ret = d_template_param (di); in cplus_demangle_type()
2486 if (d_peek_char (di) == 'I') in cplus_demangle_type()
2519 if (! di->is_conversion) in cplus_demangle_type()
2521 if (! d_add_substitution (di, ret)) in cplus_demangle_type()
2523 ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret, in cplus_demangle_type()
2524 d_template_args (di)); in cplus_demangle_type()
2531 d_checkpoint (di, &checkpoint); in cplus_demangle_type()
2532 args = d_template_args (di); in cplus_demangle_type()
2533 if (d_peek_char (di) == 'I') in cplus_demangle_type()
2535 if (! d_add_substitution (di, ret)) in cplus_demangle_type()
2537 ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret, in cplus_demangle_type()
2541 d_backtrack (di, &checkpoint); in cplus_demangle_type()
2552 peek_next = d_peek_next_char (di); in cplus_demangle_type()
2557 ret = d_substitution (di, 0); in cplus_demangle_type()
2560 if (d_peek_char (di) == 'I') in cplus_demangle_type()
2561 ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret, in cplus_demangle_type()
2562 d_template_args (di)); in cplus_demangle_type()
2568 ret = d_class_enum_type (di); in cplus_demangle_type()
2580 d_advance (di, 1); in cplus_demangle_type()
2581 ret = d_make_comp (di, DEMANGLE_COMPONENT_RVALUE_REFERENCE, in cplus_demangle_type()
2582 cplus_demangle_type (di), NULL); in cplus_demangle_type()
2586 d_advance (di, 1); in cplus_demangle_type()
2587 ret = d_make_comp (di, DEMANGLE_COMPONENT_POINTER, in cplus_demangle_type()
2588 cplus_demangle_type (di), NULL); in cplus_demangle_type()
2592 d_advance (di, 1); in cplus_demangle_type()
2593 ret = d_make_comp (di, DEMANGLE_COMPONENT_REFERENCE, in cplus_demangle_type()
2594 cplus_demangle_type (di), NULL); in cplus_demangle_type()
2598 d_advance (di, 1); in cplus_demangle_type()
2599 ret = d_make_comp (di, DEMANGLE_COMPONENT_COMPLEX, in cplus_demangle_type()
2600 cplus_demangle_type (di), NULL); in cplus_demangle_type()
2604 d_advance (di, 1); in cplus_demangle_type()
2605 ret = d_make_comp (di, DEMANGLE_COMPONENT_IMAGINARY, in cplus_demangle_type()
2606 cplus_demangle_type (di), NULL); in cplus_demangle_type()
2610 d_advance (di, 1); in cplus_demangle_type()
2611 ret = d_source_name (di); in cplus_demangle_type()
2612 if (d_peek_char (di) == 'I') in cplus_demangle_type()
2613 ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret, in cplus_demangle_type()
2614 d_template_args (di)); in cplus_demangle_type()
2615 ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL, in cplus_demangle_type()
2616 cplus_demangle_type (di), ret); in cplus_demangle_type()
2621 d_advance (di, 1); in cplus_demangle_type()
2622 peek = d_next_char (di); in cplus_demangle_type()
2628 ret = d_make_comp (di, DEMANGLE_COMPONENT_DECLTYPE, in cplus_demangle_type()
2629 d_expression (di), NULL); in cplus_demangle_type()
2630 if (ret && d_next_char (di) != 'E') in cplus_demangle_type()
2637 ret = d_make_comp (di, DEMANGLE_COMPONENT_PACK_EXPANSION, in cplus_demangle_type()
2638 cplus_demangle_type (di), NULL); in cplus_demangle_type()
2644 ret = d_make_name (di, "auto", 4); in cplus_demangle_type()
2648 ret = d_make_name (di, "decltype(auto)", 14); in cplus_demangle_type()
2653 ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[26]); in cplus_demangle_type()
2654 di->expansion += ret->u.s_builtin.type->len; in cplus_demangle_type()
2658 ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[27]); in cplus_demangle_type()
2659 di->expansion += ret->u.s_builtin.type->len; in cplus_demangle_type()
2663 ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[28]); in cplus_demangle_type()
2664 di->expansion += ret->u.s_builtin.type->len; in cplus_demangle_type()
2668 ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[29]); in cplus_demangle_type()
2669 di->expansion += ret->u.s_builtin.type->len; in cplus_demangle_type()
2673 ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[30]); in cplus_demangle_type()
2674 di->expansion += ret->u.s_builtin.type->len; in cplus_demangle_type()
2678 ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[31]); in cplus_demangle_type()
2679 di->expansion += ret->u.s_builtin.type->len; in cplus_demangle_type()
2683 ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[32]); in cplus_demangle_type()
2684 di->expansion += ret->u.s_builtin.type->len; in cplus_demangle_type()
2689 ret = d_make_empty (di); in cplus_demangle_type()
2691 if ((ret->u.s_fixed.accum = IS_DIGIT (d_peek_char (di)))) in cplus_demangle_type()
2693 d_number (di); in cplus_demangle_type()
2694 ret->u.s_fixed.length = cplus_demangle_type (di); in cplus_demangle_type()
2697 d_number (di); in cplus_demangle_type()
2698 peek = d_next_char (di); in cplus_demangle_type()
2703 ret = d_vector_type (di); in cplus_demangle_type()
2709 ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[33]); in cplus_demangle_type()
2710 di->expansion += ret->u.s_builtin.type->len; in cplus_demangle_type()
2724 if (! d_add_substitution (di, ret)) in cplus_demangle_type()
2734 d_cv_qualifiers (struct d_info *di, in d_cv_qualifiers() argument
2741 peek = d_peek_char (di); in d_cv_qualifiers()
2742 while (next_is_type_qual (di)) in d_cv_qualifiers()
2747 d_advance (di, 1); in d_cv_qualifiers()
2753 di->expansion += sizeof "restrict"; in d_cv_qualifiers()
2760 di->expansion += sizeof "volatile"; in d_cv_qualifiers()
2767 di->expansion += sizeof "const"; in d_cv_qualifiers()
2771 peek = d_next_char (di); in d_cv_qualifiers()
2775 di->expansion += sizeof "transaction_safe"; in d_cv_qualifiers()
2781 di->expansion += sizeof "noexcept"; in d_cv_qualifiers()
2784 right = d_expression (di); in d_cv_qualifiers()
2787 if (! d_check_char (di, 'E')) in d_cv_qualifiers()
2794 di->expansion += sizeof "throw"; in d_cv_qualifiers()
2795 right = d_parmlist (di); in d_cv_qualifiers()
2798 if (! d_check_char (di, 'E')) in d_cv_qualifiers()
2805 *pret = d_make_comp (di, t, NULL, right); in d_cv_qualifiers()
2810 peek = d_peek_char (di); in d_cv_qualifiers()
2842 d_ref_qualifier (struct d_info *di, struct demangle_component *sub) in d_ref_qualifier() argument
2847 peek = d_peek_char (di); in d_ref_qualifier()
2854 di->expansion += sizeof "&"; in d_ref_qualifier()
2859 di->expansion += sizeof "&&"; in d_ref_qualifier()
2861 d_advance (di, 1); in d_ref_qualifier()
2863 ret = d_make_comp (di, t, ret, NULL); in d_ref_qualifier()
2872 d_function_type (struct d_info *di) in d_function_type() argument
2876 if ((di->options & DMGL_NO_RECURSE_LIMIT) == 0) in d_function_type()
2878 if (di->recursion_level > DEMANGLE_RECURSION_LIMIT) in d_function_type()
2883 di->recursion_level ++; in d_function_type()
2886 if (d_check_char (di, 'F')) in d_function_type()
2888 if (d_peek_char (di) == 'Y') in d_function_type()
2892 d_advance (di, 1); in d_function_type()
2894 ret = d_bare_function_type (di, 1); in d_function_type()
2895 ret = d_ref_qualifier (di, ret); in d_function_type()
2897 if (! d_check_char (di, 'E')) in d_function_type()
2901 if ((di->options & DMGL_NO_RECURSE_LIMIT) == 0) in d_function_type()
2902 di->recursion_level --; in d_function_type()
2909 d_parmlist (struct d_info *di) in d_parmlist() argument
2920 char peek = d_peek_char (di); in d_parmlist()
2924 && d_peek_next_char (di) == 'E') in d_parmlist()
2927 type = cplus_demangle_type (di); in d_parmlist()
2930 *ptl = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, type, NULL); in d_parmlist()
2947 di->expansion -= d_left (tl)->u.s_builtin.type->len; in d_parmlist()
2957 d_bare_function_type (struct d_info *di, int has_return_type) in d_bare_function_type() argument
2965 peek = d_peek_char (di); in d_bare_function_type()
2968 d_advance (di, 1); in d_bare_function_type()
2974 return_type = cplus_demangle_type (di); in d_bare_function_type()
2981 tl = d_parmlist (di); in d_bare_function_type()
2985 return d_make_comp (di, DEMANGLE_COMPONENT_FUNCTION_TYPE, in d_bare_function_type()
2992 d_class_enum_type (struct d_info *di) in d_class_enum_type() argument
2994 return d_name (di); in d_class_enum_type()
3002 d_array_type (struct d_info *di) in d_array_type() argument
3007 if (! d_check_char (di, 'A')) in d_array_type()
3010 peek = d_peek_char (di); in d_array_type()
3017 s = d_str (di); in d_array_type()
3020 d_advance (di, 1); in d_array_type()
3021 peek = d_peek_char (di); in d_array_type()
3024 dim = d_make_name (di, s, d_str (di) - s); in d_array_type()
3030 dim = d_expression (di); in d_array_type()
3035 if (! d_check_char (di, '_')) in d_array_type()
3038 return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim, in d_array_type()
3039 cplus_demangle_type (di)); in d_array_type()
3046 d_vector_type (struct d_info *di) in d_vector_type() argument
3051 peek = d_peek_char (di); in d_vector_type()
3054 d_advance (di, 1); in d_vector_type()
3055 dim = d_expression (di); in d_vector_type()
3058 dim = d_number_component (di); in d_vector_type()
3063 if (! d_check_char (di, '_')) in d_vector_type()
3066 return d_make_comp (di, DEMANGLE_COMPONENT_VECTOR_TYPE, dim, in d_vector_type()
3067 cplus_demangle_type (di)); in d_vector_type()
3073 d_pointer_to_member_type (struct d_info *di) in d_pointer_to_member_type() argument
3078 if (! d_check_char (di, 'M')) in d_pointer_to_member_type()
3081 cl = cplus_demangle_type (di); in d_pointer_to_member_type()
3100 mem = cplus_demangle_type (di); in d_pointer_to_member_type()
3104 return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem); in d_pointer_to_member_type()
3110 d_compact_number (struct d_info *di) in d_compact_number() argument
3113 if (d_peek_char (di) == '_') in d_compact_number()
3115 else if (d_peek_char (di) == 'n') in d_compact_number()
3118 num = d_number (di) + 1; in d_compact_number()
3120 if (num < 0 || ! d_check_char (di, '_')) in d_compact_number()
3130 d_template_param (struct d_info *di) in d_template_param() argument
3134 if (! d_check_char (di, 'T')) in d_template_param()
3137 param = d_compact_number (di); in d_template_param()
3141 return d_make_template_param (di, param); in d_template_param()
3147 d_template_args (struct d_info *di) in d_template_args() argument
3149 if (d_peek_char (di) != 'I' in d_template_args()
3150 && d_peek_char (di) != 'J') in d_template_args()
3152 d_advance (di, 1); in d_template_args()
3154 return d_template_args_1 (di); in d_template_args()
3160 d_template_args_1 (struct d_info *di) in d_template_args_1() argument
3169 hold_last_name = di->last_name; in d_template_args_1()
3171 if (d_peek_char (di) == 'E') in d_template_args_1()
3174 d_advance (di, 1); in d_template_args_1()
3175 return d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, NULL, NULL); in d_template_args_1()
3184 a = d_template_arg (di); in d_template_args_1()
3188 *pal = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, a, NULL); in d_template_args_1()
3193 if (d_peek_char (di) == 'E') in d_template_args_1()
3195 d_advance (di, 1); in d_template_args_1()
3200 di->last_name = hold_last_name; in d_template_args_1()
3211 d_template_arg (struct d_info *di) in d_template_arg() argument
3215 switch (d_peek_char (di)) in d_template_arg()
3218 d_advance (di, 1); in d_template_arg()
3219 ret = d_expression (di); in d_template_arg()
3220 if (! d_check_char (di, 'E')) in d_template_arg()
3225 return d_expr_primary (di); in d_template_arg()
3230 return d_template_args (di); in d_template_arg()
3233 return cplus_demangle_type (di); in d_template_arg()
3241 d_exprlist (struct d_info *di, char terminator) in d_exprlist() argument
3246 if (d_peek_char (di) == terminator) in d_exprlist()
3248 d_advance (di, 1); in d_exprlist()
3249 return d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, NULL, NULL); in d_exprlist()
3254 struct demangle_component *arg = d_expression (di); in d_exprlist()
3258 *p = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, arg, NULL); in d_exprlist()
3263 if (d_peek_char (di) == terminator) in d_exprlist()
3265 d_advance (di, 1); in d_exprlist()
3297 d_expression_1 (struct d_info *di) in d_expression_1() argument
3301 peek = d_peek_char (di); in d_expression_1()
3303 return d_expr_primary (di); in d_expression_1()
3305 return d_template_param (di); in d_expression_1()
3306 else if (peek == 's' && d_peek_next_char (di) == 'r') in d_expression_1()
3311 d_advance (di, 2); in d_expression_1()
3312 type = cplus_demangle_type (di); in d_expression_1()
3313 name = d_unqualified_name (di); in d_expression_1()
3314 if (d_peek_char (di) != 'I') in d_expression_1()
3315 return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, name); in d_expression_1()
3317 return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, in d_expression_1()
3318 d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name, in d_expression_1()
3319 d_template_args (di))); in d_expression_1()
3321 else if (peek == 's' && d_peek_next_char (di) == 'p') in d_expression_1()
3323 d_advance (di, 2); in d_expression_1()
3324 return d_make_comp (di, DEMANGLE_COMPONENT_PACK_EXPANSION, in d_expression_1()
3325 d_expression_1 (di), NULL); in d_expression_1()
3327 else if (peek == 'f' && d_peek_next_char (di) == 'p') in d_expression_1()
3331 d_advance (di, 2); in d_expression_1()
3332 if (d_peek_char (di) == 'T') in d_expression_1()
3335 d_advance (di, 1); in d_expression_1()
3340 index = d_compact_number (di); in d_expression_1()
3345 return d_make_function_param (di, index); in d_expression_1()
3348 || (peek == 'o' && d_peek_next_char (di) == 'n')) in d_expression_1()
3356 d_advance (di, 2); in d_expression_1()
3358 name = d_unqualified_name (di); in d_expression_1()
3361 if (d_peek_char (di) == 'I') in d_expression_1()
3362 return d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name, in d_expression_1()
3363 d_template_args (di)); in d_expression_1()
3368 && d_peek_next_char (di) == 'l') in d_expression_1()
3372 d_advance (di, 2); in d_expression_1()
3374 type = cplus_demangle_type (di); in d_expression_1()
3375 if (!d_peek_char (di) || !d_peek_next_char (di)) in d_expression_1()
3377 return d_make_comp (di, DEMANGLE_COMPONENT_INITIALIZER_LIST, in d_expression_1()
3378 type, d_exprlist (di, 'E')); in d_expression_1()
3386 op = d_operator_name (di); in d_expression_1()
3393 di->expansion += op->u.s_operator.op->len - 2; in d_expression_1()
3395 return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op, in d_expression_1()
3396 cplus_demangle_type (di)); in d_expression_1()
3417 return d_make_comp (di, DEMANGLE_COMPONENT_NULLARY, op, NULL); in d_expression_1()
3427 suffix = !d_check_char (di, '_'); in d_expression_1()
3430 && d_check_char (di, '_')) in d_expression_1()
3431 operand = d_exprlist (di, 'E'); in d_expression_1()
3433 operand = d_template_args_1 (di); in d_expression_1()
3435 operand = d_expression_1 (di); in d_expression_1()
3439 operand = d_make_comp (di, DEMANGLE_COMPONENT_BINARY_ARGS, in d_expression_1()
3442 return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op, operand); in d_expression_1()
3452 left = cplus_demangle_type (di); in d_expression_1()
3455 left = d_operator_name (di); in d_expression_1()
3457 left = d_expression_1 (di); in d_expression_1()
3459 right = d_exprlist (di, 'E'); in d_expression_1()
3462 right = d_unqualified_name (di); in d_expression_1()
3463 if (d_peek_char (di) == 'I') in d_expression_1()
3464 right = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, in d_expression_1()
3465 right, d_template_args (di)); in d_expression_1()
3468 right = d_expression_1 (di); in d_expression_1()
3470 return d_make_comp (di, DEMANGLE_COMPONENT_BINARY, op, in d_expression_1()
3471 d_make_comp (di, in d_expression_1()
3486 first = d_expression_1 (di); in d_expression_1()
3487 second = d_expression_1 (di); in d_expression_1()
3488 third = d_expression_1 (di); in d_expression_1()
3495 first = d_operator_name (di); in d_expression_1()
3496 second = d_expression_1 (di); in d_expression_1()
3497 third = d_expression_1 (di); in d_expression_1()
3506 first = d_exprlist (di, '_'); in d_expression_1()
3507 second = cplus_demangle_type (di); in d_expression_1()
3508 if (d_peek_char (di) == 'E') in d_expression_1()
3510 d_advance (di, 1); in d_expression_1()
3513 else if (d_peek_char (di) == 'p' in d_expression_1()
3514 && d_peek_next_char (di) == 'i') in d_expression_1()
3517 d_advance (di, 2); in d_expression_1()
3518 third = d_exprlist (di, 'E'); in d_expression_1()
3520 else if (d_peek_char (di) == 'i' in d_expression_1()
3521 && d_peek_next_char (di) == 'l') in d_expression_1()
3523 third = d_expression_1 (di); in d_expression_1()
3529 return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op, in d_expression_1()
3530 d_make_comp (di, in d_expression_1()
3533 d_make_comp (di, in d_expression_1()
3544 d_expression (struct d_info *di) in d_expression() argument
3547 int was_expression = di->is_expression; in d_expression()
3549 di->is_expression = 1; in d_expression()
3550 ret = d_expression_1 (di); in d_expression()
3551 di->is_expression = was_expression; in d_expression()
3561 d_expr_primary (struct d_info *di) in d_expr_primary() argument
3565 if (! d_check_char (di, 'L')) in d_expr_primary()
3567 if (d_peek_char (di) == '_' in d_expr_primary()
3569 || d_peek_char (di) == 'Z') in d_expr_primary()
3570 ret = cplus_demangle_mangled_name (di, 0); in d_expr_primary()
3577 type = cplus_demangle_type (di); in d_expr_primary()
3585 di->expansion -= type->u.s_builtin.type->len; in d_expr_primary()
3591 if (d_peek_char (di) == 'E') in d_expr_primary()
3593 d_advance (di, 1); in d_expr_primary()
3610 if (d_peek_char (di) == 'n') in d_expr_primary()
3613 d_advance (di, 1); in d_expr_primary()
3615 s = d_str (di); in d_expr_primary()
3616 while (d_peek_char (di) != 'E') in d_expr_primary()
3618 if (d_peek_char (di) == '\0') in d_expr_primary()
3620 d_advance (di, 1); in d_expr_primary()
3622 ret = d_make_comp (di, t, type, d_make_name (di, s, d_str (di) - s)); in d_expr_primary()
3624 if (! d_check_char (di, 'E')) in d_expr_primary()
3635 d_local_name (struct d_info *di) in d_local_name() argument
3640 if (! d_check_char (di, 'Z')) in d_local_name()
3643 function = d_encoding (di, 0); in d_local_name()
3647 if (! d_check_char (di, 'E')) in d_local_name()
3650 if (d_peek_char (di) == 's') in d_local_name()
3652 d_advance (di, 1); in d_local_name()
3653 if (! d_discriminator (di)) in d_local_name()
3655 name = d_make_name (di, "string literal", sizeof "string literal" - 1); in d_local_name()
3661 if (d_peek_char (di) == 'd') in d_local_name()
3664 d_advance (di, 1); in d_local_name()
3665 num = d_compact_number (di); in d_local_name()
3670 name = d_name (di); in d_local_name()
3679 if (! d_discriminator (di)) in d_local_name()
3684 name = d_make_default_arg (di, num, name); in d_local_name()
3694 return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name); in d_local_name()
3707 d_discriminator (struct d_info *di) in d_discriminator() argument
3711 if (d_peek_char (di) != '_') in d_discriminator()
3713 d_advance (di, 1); in d_discriminator()
3714 if (d_peek_char (di) == '_') in d_discriminator()
3717 d_advance (di, 1); in d_discriminator()
3720 discrim = d_number (di); in d_discriminator()
3725 if (d_peek_char (di) == '_') in d_discriminator()
3726 d_advance (di, 1); in d_discriminator()
3737 d_lambda (struct d_info *di) in d_lambda() argument
3743 if (! d_check_char (di, 'U')) in d_lambda()
3745 if (! d_check_char (di, 'l')) in d_lambda()
3748 tl = d_parmlist (di); in d_lambda()
3752 if (! d_check_char (di, 'E')) in d_lambda()
3755 num = d_compact_number (di); in d_lambda()
3759 ret = d_make_empty (di); in d_lambda()
3767 if (! d_add_substitution (di, ret)) in d_lambda()
3776 d_unnamed_type (struct d_info *di) in d_unnamed_type() argument
3781 if (! d_check_char (di, 'U')) in d_unnamed_type()
3783 if (! d_check_char (di, 't')) in d_unnamed_type()
3786 num = d_compact_number (di); in d_unnamed_type()
3790 ret = d_make_empty (di); in d_unnamed_type()
3797 if (! d_add_substitution (di, ret)) in d_unnamed_type()
3807 d_clone_suffix (struct d_info *di, struct demangle_component *encoding) in d_clone_suffix() argument
3809 const char *suffix = d_str (di); in d_clone_suffix()
3825 d_advance (di, pend - suffix); in d_clone_suffix()
3826 n = d_make_name (di, suffix, pend - suffix); in d_clone_suffix()
3827 return d_make_comp (di, DEMANGLE_COMPONENT_CLONE, encoding, n); in d_clone_suffix()
3833 d_add_substitution (struct d_info *di, struct demangle_component *dc) in d_add_substitution() argument
3837 if (di->next_sub >= di->num_subs) in d_add_substitution()
3839 di->subs[di->next_sub] = dc; in d_add_substitution()
3840 ++di->next_sub; in d_add_substitution()
3889 d_substitution (struct d_info *di, int prefix) in d_substitution() argument
3893 if (! d_check_char (di, 'S')) in d_substitution()
3896 c = d_next_char (di); in d_substitution()
3917 c = d_next_char (di); in d_substitution()
3924 if (id >= (unsigned int) di->next_sub) in d_substitution()
3927 return di->subs[id]; in d_substitution()
3935 verbose = (di->options & DMGL_VERBOSE) != 0; in d_substitution()
3940 peek = d_peek_char (di); in d_substitution()
3956 di->last_name = d_make_sub (di, p->set_last_name, in d_substitution()
3968 di->expansion += len; in d_substitution()
3969 dc = d_make_sub (di, s, len); in d_substitution()
3970 if (d_peek_char (di) == 'B') in d_substitution()
3974 dc = d_abi_tags (di, dc); in d_substitution()
3975 if (! d_add_substitution (di, dc)) in d_substitution()
3987 d_checkpoint (struct d_info *di, struct d_info_checkpoint *checkpoint) in d_checkpoint() argument
3989 checkpoint->n = di->n; in d_checkpoint()
3990 checkpoint->next_comp = di->next_comp; in d_checkpoint()
3991 checkpoint->next_sub = di->next_sub; in d_checkpoint()
3992 checkpoint->expansion = di->expansion; in d_checkpoint()
3996 d_backtrack (struct d_info *di, struct d_info_checkpoint *checkpoint) in d_backtrack() argument
3998 di->n = checkpoint->n; in d_backtrack()
3999 di->next_comp = checkpoint->next_comp; in d_backtrack()
4000 di->next_sub = checkpoint->next_sub; in d_backtrack()
4001 di->expansion = checkpoint->expansion; in d_backtrack()
6233 struct d_info *di) in cplus_demangle_init_info() argument
6235 di->s = mangled; in cplus_demangle_init_info()
6236 di->send = mangled + len; in cplus_demangle_init_info()
6237 di->options = options; in cplus_demangle_init_info()
6239 di->n = mangled; in cplus_demangle_init_info()
6244 di->num_comps = 2 * len; in cplus_demangle_init_info()
6245 di->next_comp = 0; in cplus_demangle_init_info()
6249 di->num_subs = len; in cplus_demangle_init_info()
6250 di->next_sub = 0; in cplus_demangle_init_info()
6252 di->last_name = NULL; in cplus_demangle_init_info()
6254 di->expansion = 0; in cplus_demangle_init_info()
6255 di->is_expression = 0; in cplus_demangle_init_info()
6256 di->is_conversion = 0; in cplus_demangle_init_info()
6257 di->recursion_level = 0; in cplus_demangle_init_info()
6277 struct d_info di; in d_demangle_callback() local
6295 cplus_demangle_init_info (mangled, options, strlen (mangled), &di); in d_demangle_callback()
6305 && (unsigned long) di.num_comps > DEMANGLE_RECURSION_LIMIT) in d_demangle_callback()
6313 __extension__ struct demangle_component comps[di.num_comps]; in d_demangle_callback()
6314 __extension__ struct demangle_component *subs[di.num_subs]; in d_demangle_callback()
6316 di.comps = comps; in d_demangle_callback()
6317 di.subs = subs; in d_demangle_callback()
6319 di.comps = alloca (di.num_comps * sizeof (*di.comps)); in d_demangle_callback()
6320 di.subs = alloca (di.num_subs * sizeof (*di.subs)); in d_demangle_callback()
6326 dc = cplus_demangle_type (&di); in d_demangle_callback()
6329 dc = cplus_demangle_mangled_name (&di, 1); in d_demangle_callback()
6333 d_advance (&di, 11); in d_demangle_callback()
6334 dc = d_make_comp (&di, in d_demangle_callback()
6338 d_make_demangle_mangled_name (&di, d_str (&di)), in d_demangle_callback()
6340 d_advance (&di, strlen (d_str (&di))); in d_demangle_callback()
6350 if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0') in d_demangle_callback()
6583 struct d_info di; in is_ctor_or_dtor() local
6590 cplus_demangle_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di); in is_ctor_or_dtor()
6594 __extension__ struct demangle_component comps[di.num_comps]; in is_ctor_or_dtor()
6595 __extension__ struct demangle_component *subs[di.num_subs]; in is_ctor_or_dtor()
6597 di.comps = comps; in is_ctor_or_dtor()
6598 di.subs = subs; in is_ctor_or_dtor()
6600 di.comps = alloca (di.num_comps * sizeof (*di.comps)); in is_ctor_or_dtor()
6601 di.subs = alloca (di.num_subs * sizeof (*di.subs)); in is_ctor_or_dtor()
6604 dc = cplus_demangle_mangled_name (&di, 1); in is_ctor_or_dtor()