Lines Matching +full:10 +full:base +full:- +full:t1
21 #include "demangle-sys.h"
47 longjmp(db->cpp_jmp, 1); \
52 #define TOP_L(db) (&(name_top(&(db)->cpp_name)->strp_l))
53 #define RLEN(f, l) ((size_t)((l) - (f)))
54 #define NAMT(db, n) (nlen(db) - n)
203 char *res = zalloc(ops, s->str_len + 1); in cpp_demangle()
207 (void) memcpy(res, s->str_s, s->str_len); in cpp_demangle()
238 if (last - first < 4) { in demangle()
294 if (last - first < 13) in parse_block_invoke()
300 if (strncmp(first, test, sizeof (test) - 1) != 0) in parse_block_invoke()
326 * <encoding> ::= <function name><bare-function-type>
342 boolean_t tag_templ_save = db->cpp_tag_templates; in parse_encoding()
344 if (++db->cpp_depth > 1) in parse_encoding()
345 db->cpp_tag_templates = B_TRUE; in parse_encoding()
357 cv = db->cpp_cv; in parse_encoding()
358 ref = db->cpp_ref; in parse_encoding()
363 db->cpp_tag_templates = B_FALSE; in parse_encoding()
367 if (!db->cpp_parsed_ctor_dtor_cv && ends_with_template_args) { in parse_encoding()
372 str_pair_t *sp = name_top(&db->cpp_name); in parse_encoding()
374 if (str_length(&sp->strp_r) == 0) in parse_encoding()
375 (void) str_append(&sp->strp_l, " ", 1); in parse_encoding()
403 if (NAMT(db, n) > 1 && str_pair_len(name_top(&db->cpp_name)) == 0) in parse_encoding()
404 name_pop(&db->cpp_name, NULL); in parse_encoding()
430 db->cpp_tag_templates = tag_templ_save; in parse_encoding()
431 db->cpp_depth--; in parse_encoding()
435 db->cpp_tag_templates = tag_templ_save; in parse_encoding()
436 db->cpp_depth--; in parse_encoding()
441 * <special-name> ::= TV <type> # virtual table
444 * ::= TS <type> # typeinfo name (null-terminated byte string)
445 * ::= Tc <call-offset> <call-offset> <base encoding>
446 * # base is the nominal target function of thunk
447 * # first call-offset is 'this' adjustment
448 * # second call-offset is result adjustment
449 * ::= T <call-offset> <base encoding>
450 * # base is the nominal target function of thunk
451 * ::= GV <object name> # Guard variable for one-time init
453 * ::= TW <object name> # Thread-local wrapper
454 * ::= TH <object name> # Thread-local initialization
456 * # construction vtable for second-in-first
465 const char *t1 = NULL; in parse_special_name() local
468 if (last - first < 2) in parse_special_name()
492 t1 = parse_call_offset(first + 2, last); in parse_special_name()
493 if (t1 == t) in parse_special_name()
495 t = parse_call_offset(t1, last); in parse_special_name()
496 if (t == t1) in parse_special_name()
498 t1 = parse_encoding(t, last, db); in parse_special_name()
499 if (t1 == t) in parse_special_name()
506 t1 = parse_number(t, last); in parse_special_name()
507 if (*t1 != '_') in parse_special_name()
509 t = parse_type(t1 + 1, last, db); in parse_special_name()
510 if (t == t1 + 1 || nlen(db) < 2) in parse_special_name()
512 nfmt(db, "construction vtable for {0}-in-{1}", NULL); in parse_special_name()
515 nadd_l(db, "thread-local wrapper routine for", 0); in parse_special_name()
519 nadd_l(db, "thread-local initialization routine for", in parse_special_name()
527 nadd_l(db, "non-virtual thunk to", 0); in parse_special_name()
533 t1 = parse_encoding(t, last, db); in parse_special_name()
534 if (t == t1) in parse_special_name()
536 t = t1; in parse_special_name()
567 * <call-offset> ::= h <nv-offset> _
568 * ::= v <v-offset> _
570 * <nv-offset> ::= <offset number>
571 * # non-virtual base override
573 * <v-offset> ::= <offset number> _ <virtual offset number>
574 * # virtual base override, with vcall offset
582 const char *t1 = NULL; in parse_call_offset() local
600 t1 = parse_number(t, last); in parse_call_offset()
601 if (t == t1 || t1 == last || t1[0] != '_') in parse_call_offset()
605 t1++; in parse_call_offset()
607 return (t1); in parse_call_offset()
611 * <name> ::= <nested-name> // N
612 * ::= <local-name> # See Scope Encoding below // Z
613 * ::= <unscoped-template-name> <template-args>
614 * ::= <unscoped-name>
616 * <unscoped-template-name> ::= <unscoped-name>
626 const char *t1 = NULL; in parse_name() local
628 if (last - first < 2) in parse_name()
637 t1 = parse_nested_name(t, last, ends_with_template_args, db); in parse_name()
638 return ((t == t1) ? first : t1); in parse_name()
640 t1 = parse_local_name(t, last, ends_with_template_args, db); in parse_name()
641 return ((t == t1) ? first : t1); in parse_name()
645 * <unscoped-name> in parse_name()
646 * <unscoped-name> <template-args> in parse_name()
647 * <substitution> <template-args> in parse_name()
649 t1 = parse_unscoped_name(t, last, db); in parse_name()
651 /* <unscoped-name> */ in parse_name()
652 if (t != t1 && t1[0] != 'I') in parse_name()
653 return (t1); in parse_name()
655 if (t == t1) { in parse_name()
656 t1 = parse_substitution(t, last, db); in parse_name()
657 if (t == t1 || t1 == last || t1[0] != 'I') in parse_name()
663 t = parse_template_args(t1, last, db); in parse_name()
664 if (t1 == t || nlen(db) < 2) in parse_name()
677 * <local-name> := Z <function encoding> E <entity name> [<discriminator>]
689 const char *t1 = NULL; in parse_local_name() local
710 t1 = parse_number(t + 1, last); in parse_local_name()
711 if (t1[0] != '_') in parse_local_name()
713 t1++; in parse_local_name()
715 t1 = t; in parse_local_name()
718 t2 = parse_name(t1, last, ends_with_template_args, db); in parse_local_name()
719 if (t2 == t1) in parse_local_name()
733 * <nested-name> ::= N [<CV-qualifiers>] [<ref-qualifier>] <prefix> <unqualified-name> E
734 * ::= N [<CV-qualifiers>] [<ref-qualifier>] <template-prefix> <template-args> E
736 * <prefix> ::= <prefix> <unqualified-name>
737 * ::= <template-prefix> <template-args>
738 * ::= <template-param>
742 * ::= <prefix> <data-member-prefix>
745 * <template-prefix> ::= <prefix> <template unqualified-name>
746 * ::= <template-param>
769 db->cpp_ref = 1; in parse_nested_name()
773 db->cpp_ref = 2; in parse_nested_name()
777 if (last - first < 2 || t[1] != 't') in parse_nested_name()
779 if (last - first == 2) in parse_nested_name()
791 const char *t1 = NULL; in parse_nested_name() local
800 t1 = parse_substitution(t, last, db); in parse_nested_name()
801 if (t1 == t || t1 == last || NAMT(db, n) != 1) in parse_nested_name()
814 t = t1; in parse_nested_name()
818 t1 = parse_template_param(t, last, db); in parse_nested_name()
819 if (t1 == t || t1 == last || NAMT(db, n) != 1) in parse_nested_name()
832 t = t1; in parse_nested_name()
838 t1 = parse_decltype(t, last, db); in parse_nested_name()
839 if (t1 == t || t1 == last || NAMT(db, n) != 1) in parse_nested_name()
852 t = t1; in parse_nested_name()
858 * <template-args> in parse_nested_name()
863 t1 = parse_template_args(t, last, db); in parse_nested_name()
864 if (t1 == t || t1 == last) in parse_nested_name()
870 t = t1; in parse_nested_name()
884 t1 = parse_unqualified_name(t, last, db); in parse_nested_name()
885 if (t1 == t || t1 == last || NAMT(db, n) != 1) in parse_nested_name()
898 t = t1; in parse_nested_name()
905 db->cpp_cv = cv; in parse_nested_name()
906 if (pop_subs && !sub_empty(&db->cpp_subs)) in parse_nested_name()
907 sub_pop(&db->cpp_subs); in parse_nested_name()
919 * <template-arg> ::= <type> # type or template
921 * ::= <expr-primary> # simple expressions
922 * ::= J <template-arg>* E # argument pack
931 const char *t1 = NULL; in parse_template_arg() local
952 t1 = parse_template_arg(t, last, db); in parse_template_arg()
953 if (t == t1) in parse_template_arg()
955 t = t1; in parse_template_arg()
984 * <expression> ::= <unary operator-name> <expression>
985 * ::= <binary operator-name> <expression> <expression>
986 * ::= <ternary operator-name> <expression> <expression> <expression>
990 * ::= [gs] nw <expression>* _ <type> E # new (expr-list) type
991 …* ::= [gs] nw <expression>* _ <type> <initializer> # new (expr-list) type (in…
992 * ::= [gs] na <expression>* _ <type> E # new[] (expr-list) type
993 …* ::= [gs] na <expression>* _ <type> <initializer> # new[] (expr-list) type (…
997 * ::= mm_ <expression> # prefix --
1009 * ::= <template-param>
1010 * ::= <function-param>
1011 * ::= dt <expression> <unresolved-name> # expr.name
1012 * ::= pt <expression> <unresolved-name> # expr->name
1014 * ::= sZ <template-param> # size of a parameter pack
1015 …* ::= sZ <function-param> # size of a function param…
1019 * ::= <unresolved-name> # f(p), N::f(p), ::f(p),
1022 * ::= <expr-primary>
1085 PA("mI", "-=", parse_binary_expr),
1088 PA("mi", "-", parse_binary_expr),
1092 PA("ng", "-", parse_prefix_expr),
1102 PA("pm", "->*", parse_binary_expr),
1130 if (last - first < 2) in parse_expression()
1174 if (last - first < 2) in parse_binary_expr()
1179 const char *t1 = parse_expression(first + 2, last, db); in parse_binary_expr() local
1180 if (t1 == first + 2) in parse_binary_expr()
1185 const char *t2 = parse_expression(t1, last, db); in parse_binary_expr()
1186 if (t2 == t1) in parse_binary_expr()
1207 if (last - first < 2) in parse_prefix_expr()
1230 if (last - first < 4) in parse_gs()
1250 * [gs] nw <expression>* _ <type> E # new (expr-list) type
1251 * [gs] nw <expression>* _ <type> <initializer> # new (expr-list) type (init)
1252 * [gs] na <expression>* _ <type> E # new[] (expr-list) type
1253 * [gs] na <expression>* _ <type> <initializer> # new[] (expr-list) type (init)
1262 if (last - first < 3) in parse_new_expr()
1268 const char *t1 = first + 2; in parse_new_expr() local
1274 while (t1 != last && t1[0] != '_') { in parse_new_expr()
1275 t2 = parse_expression(t1, last, db); in parse_new_expr()
1277 if (t2 == t1) in parse_new_expr()
1279 t1 = t2; in parse_new_expr()
1281 if (t1 == last) in parse_new_expr()
1285 njoin(db, NAMT(db, n) - 1, ", "); in parse_new_expr()
1289 t2 = parse_type(t1 + 1, last, db); in parse_new_expr()
1290 if (t1 + 1 == t2) in parse_new_expr()
1294 if (last - t2 < 3) in parse_new_expr()
1328 if (last - first < 3) in parse_del_expr()
1351 const char *t1 = parse_expression(first + 2, last, db); in parse_idx_expr() local
1352 if (t1 == first + 2) in parse_idx_expr()
1355 const char *t2 = parse_expression(t1, last, db); in parse_idx_expr()
1356 if (t2 == t1 || NAMT(db, n) != 2) in parse_idx_expr()
1369 if (last - first < 3) in parse_ppmm_expr()
1376 t = parse_binary_expr(first + 3, last, "--", db); in parse_ppmm_expr()
1397 return (parse_ppmm_expr(first, last, "({0})--", db)); in parse_mm_expr()
1416 const char *t1, *t2, *t3; in parse_trinary_expr() local
1419 if (last - first < 2) in parse_trinary_expr()
1422 t1 = parse_expression(first + 2, last, db); in parse_trinary_expr()
1423 if (t1 == first + 2) in parse_trinary_expr()
1425 t2 = parse_expression(t1, last, db); in parse_trinary_expr()
1426 if (t1 == t2) in parse_trinary_expr()
1444 if (last - first < 2) in parse_noexcept_expr()
1467 if (last - first < 2) in parse_cast_expr()
1490 const char *t1 = parse_type(first + 2, last, db); in parse_cast_expr() local
1491 if (t1 == first + 2) in parse_cast_expr()
1494 const char *t2 = parse_expression(t1, last, db); in parse_cast_expr()
1495 if (t2 == t1) in parse_cast_expr()
1504 /* pt <expression> <expression> # expr->name */
1510 if (last - first < 4) in parse_arrow_expr()
1515 const char *t1 = parse_expression(first + 2, last, db); in parse_arrow_expr() local
1516 if (t1 == first + 2) in parse_arrow_expr()
1519 const char *t2 = parse_expression(t1, last, db); in parse_arrow_expr()
1520 if (t2 == t1 || NAMT(db, n) != 2) in parse_arrow_expr()
1523 nfmt(db, "{1}->{0}", NULL); in parse_arrow_expr()
1531 str_t *l = &sp->strp_l; in paren()
1532 str_t *r = &sp->strp_r; in paren()
1535 r->str_s[0] == ' ' && r->str_s[1] == '[') { in paren()
1538 } else if (str_length(r) > 0 && r->str_s[0] == '(') { in paren()
1546 * <type> ::= <builtin-type>
1547 * ::= <function-type>
1548 * ::= <class-enum-type>
1549 * ::= <array-type>
1550 * ::= <pointer-to-member-type>
1551 * ::= <template-param>
1552 * ::= <template-template-param> <template-args>
1555 * ::= <CV-qualifiers> <type>
1556 * ::= P <type> # pointer-to
1557 * ::= R <type> # reference-to
1558 * ::= O <type> # rvalue reference-to (C++0x)
1562 * ::= U <source-name> <type> # vendor extended type qualifier
1563 * extension := U <objc-name> <objc-type> # objc-type<identifier>
1564 * extension := <vector-type> # <vector-type> starts with Dv
1566 …* <objc-name> ::= <k0 number> objcproto <k1 number> <identifier> # k0 = 9 + <number of digits in …
1567 …* <objc-type> := <source-name> # PU<11+>objcproto 11objc_object<source-name> 11objc_object -> id<…
1586 const char *t1 = NULL; in parse_type() local
1624 (void) str_append(TOP_L(db), " imaginary", 10); in parse_type()
1641 sp = name_at(&db->cpp_name, amt - 1); in parse_type()
1645 (void) str_append(&sp->strp_l, "&&", 2); in parse_type()
1657 sp = name_at(&db->cpp_name, amt - 1); in parse_type()
1659 str_t *l = &sp->strp_l; in parse_type()
1666 strncmp(l->str_s, "objc_object<", 12) != 0) { in parse_type()
1682 sp = name_at(&db->cpp_name, amt - 1); in parse_type()
1684 if (str_length(&sp->strp_l) == 0 && in parse_type()
1685 str_length(&sp->strp_r) == 0) in parse_type()
1689 (void) str_append(&sp->strp_l, "&", 1); in parse_type()
1702 if (!db->cpp_try_to_parse_template_args || amt != 1) in parse_type()
1705 t1 = parse_template_args(t, last, db); in parse_type()
1706 if (t1 == t) in parse_type()
1711 return (t1); in parse_type()
1723 t1 = parse_type(t, last, db); in parse_type()
1724 if (t1 == t || NAMT(db, n) < 2) in parse_type()
1727 const str_t *name = &name_at(&db->cpp_name, 1)->strp_l; in parse_type()
1730 strncmp(name->str_s, "objcproto", 9) != 0) { in parse_type()
1733 t = parse_source_name(name->str_s + 9, in parse_type()
1734 name->str_s + name->str_len, db); in parse_type()
1735 if (t != name->str_s + 9) { in parse_type()
1740 name_pop(&db->cpp_name, &save); in parse_type()
1743 name_pop(&db->cpp_name, NULL); in parse_type()
1744 CK(name_add_str(&db->cpp_name, &save.strp_l, in parse_type()
1752 return (t1); in parse_type()
1769 * If the substitution is a <template-param>, it might in parse_type()
1770 * be followed by <template-args> in parse_type()
1772 t1 = parse_template_args(t, last, db); in parse_type()
1773 if (t1 == t) in parse_type()
1781 return (t1); in parse_type()
1820 * must check for builtin-types before class-enum-types to avoid in parse_type()
1821 * ambiguities with operator-names in parse_type()
1841 const char *t1 = NULL; in parse_qual_type() local
1851 t1 = parse_type(t, last, db); in parse_qual_type()
1853 if (t == t1 || amt == 0) in parse_qual_type()
1857 sub_pop(&db->cpp_subs); in parse_qual_type()
1859 str_pair_t *sp = name_at(&db->cpp_name, amt - 1); in parse_qual_type()
1865 s = &sp->strp_l; in parse_qual_type()
1880 s = &sp->strp_r; in parse_qual_type()
1883 if (pos > 0 && s->str_s[pos - 1] == '&') { in parse_qual_type()
1884 pos--; in parse_qual_type()
1885 if (s->str_s[pos - 1] == '&') in parse_qual_type()
1886 pos--; in parse_qual_type()
1903 return (t1); in parse_qual_type()
1915 if (last - first < 2) in parse_alignof()
1940 if (last - first < 2) in parse_sizeof()
1967 …* <function-param> ::= fp <top-level CV-qualifiers> _ # L == 0…
1968 …* ::= fp <top-level CV-qualifiers> <parameter-2 non-negative number> _ # L == 0…
1969 …* ::= fL <L-1 non-negative number> p <top-level CV-qualifiers> _ # L > 0,…
1970 …* ::= fL <L-1 non-negative number> p <top-level CV-qualifiers> <parameter-2 non-n…
1978 if (last - first < 3 || first[0] != 'f') in parse_function_param()
1981 const char *t1 = first + 2; in parse_function_param() local
1986 t2 = parse_number(t1, last); in parse_function_param()
1989 t1 = t2; in parse_function_param()
1995 t1 = parse_cv_qualifiers(t1, last, &cv); in parse_function_param()
1996 t2 = parse_number(t1, last); in parse_function_param()
2000 if (t2 - t1 > 0) in parse_function_param()
2001 nadd_l(db, t1, (size_t)(t2 - t1)); in parse_function_param()
2010 * sZ <template-param> # size of a parameter pack
2011 * sZ <function-param> # size of a function parameter pack
2018 if (last - first < 3) in parse_sizeof_param_pack_expr()
2052 if (last - first < 3) in parse_typeid_expr()
2082 if (last - first < 3) in parse_throw_expr()
2108 if (last - first < 3) in parse_dot_star_expr()
2127 /* dt <expression> <unresolved-name> # expr.name */
2133 if (last - first < 3) in parse_dot_expr()
2143 const char *t1 = parse_unresolved_name(t, last, db); in parse_dot_expr() local
2144 if (t1 == t) in parse_dot_expr()
2148 return (t1); in parse_dot_expr()
2157 if (last - first < 4) in parse_call_expr()
2164 const char *t1 = NULL; in parse_call_expr() local
2167 for (t = first + 2; t != last && t[0] != 'E'; t = t1) { in parse_call_expr()
2168 t1 = parse_expression(t, last, db); in parse_call_expr()
2169 if (t1 == t) in parse_call_expr()
2178 njoin(db, amt - 1, ", "); in parse_call_expr()
2196 if (last - first < 3) in parse_conv_expr()
2203 const char *t1 = NULL; in parse_conv_expr() local
2207 db->cpp_try_to_parse_template_args; in parse_conv_expr()
2209 db->cpp_try_to_parse_template_args = B_FALSE; in parse_conv_expr()
2211 db->cpp_try_to_parse_template_args = try_to_parse_template_args; in parse_conv_expr()
2217 t1 = parse_expression(t, last, db); in parse_conv_expr()
2218 if (t1 == t) in parse_conv_expr()
2221 t = t1; in parse_conv_expr()
2228 t1 = parse_expression(t, last, db); in parse_conv_expr()
2229 if (t1 == t) in parse_conv_expr()
2231 t1 = t; in parse_conv_expr()
2247 /* <simple-id> ::= <source-name> [ <template-args> ] */
2257 const char *t1 = parse_template_args(t, last, db); in parse_simple_id() local
2258 if (t == t1) in parse_simple_id()
2262 return (t1); in parse_simple_id()
2266 * <unresolved-type> ::= <template-param>
2286 name_pop(&db->cpp_name, NULL); in parse_unresolved_type()
2304 if (last - first < 2 || first[1] != 't') in parse_unresolved_type()
2325 if (last - first < 3) in parse_pack_expansion()
2339 * <unscoped-name> ::= <unqualified-name>
2340 * ::= St <unqualified-name> # ::std::
2341 * extension ::= StL<unqualified-name>
2348 if (last - first < 2) in parse_unscoped_name()
2352 const char *t1 = NULL; in parse_unscoped_name() local
2363 t1 = parse_unqualified_name(t, last, db); in parse_unscoped_name()
2364 if (t == t1) in parse_unscoped_name()
2370 return (t1); in parse_unscoped_name()
2374 * <unqualified-name> ::= <operator-name>
2375 * ::= <ctor-dtor-name>
2376 * ::= <source-name>
2377 * ::= <unnamed-type-name>
2410 * <unnamed-type-name> ::= Ut [ <nonnegative number> ] _
2411 * ::= <closure-type-name>
2413 * <closure-type-name> ::= Ul <lambda-sig> E [ <nonnegative number> ] _
2415 * <lambda-sig> ::= <parameter type>+
2423 if (last - first < 2 || first[0] != 'U') in parse_unnamed_type_name()
2429 const char *t1 = first + 2; in parse_unnamed_type_name() local
2433 while (t1 != last && t1[0] != '_' && ISDIGIT(t1[0])) in parse_unnamed_type_name()
2434 t1++; in parse_unnamed_type_name()
2436 if (t1[0] != '_') in parse_unnamed_type_name()
2439 if (t1 == first + 2) in parse_unnamed_type_name()
2442 nadd_l(db, first + 2, (size_t)(t1 - first - 2)); in parse_unnamed_type_name()
2445 return (t1 + 1); in parse_unnamed_type_name()
2452 t2 = parse_type(t1, last, db); in parse_unnamed_type_name()
2453 if (t1 == t2) in parse_unnamed_type_name()
2455 t1 = t2; in parse_unnamed_type_name()
2456 } while (t1 != last && t1[0] != 'E'); in parse_unnamed_type_name()
2458 if (t1 == last || NAMT(db, n) < 1) in parse_unnamed_type_name()
2464 t1++; in parse_unnamed_type_name()
2465 if (t1[0] != 'E') in parse_unnamed_type_name()
2472 t1++; in parse_unnamed_type_name()
2474 t2 = t1; in parse_unnamed_type_name()
2484 if (t2 - t1 > 0) in parse_unnamed_type_name()
2485 nadd_l(db, t1, (size_t)(t2 - t1)); in parse_unnamed_type_name()
2531 if (strncmp(aliases[i].alias, s->str_s, str_length(s)) != 0) in basename()
2535 sysdem_ops_t *ops = s->str_ops; in basename()
2544 const char *start = s->str_s; in basename()
2545 const char *end = s->str_s + s->str_len; in basename()
2553 if (end[-1] == '>') { in basename()
2554 for (; end > start; end--) { in basename()
2555 switch (end[-1]) { in basename()
2557 if (--c == 0) { in basename()
2558 end--; in basename()
2572 if (end - start < 2) { in basename()
2577 for (start = end - 1; start > s->str_s; start--) { in basename()
2586 nadd_l(db, start, (size_t)(end - start)); in basename()
2590 * <ctor-dtor-name> ::= C1 # complete object constructor
2591 * ::= C2 # base object constructor
2596 * ::= D2 # base object destructor
2604 if (last - first < 2 || nempty(db) || str_length(TOP_L(db)) == 0) in parse_ctor_dtor_name()
2637 db->cpp_parsed_ctor_dtor_cv = B_TRUE; in parse_ctor_dtor_name()
2656 nadd_l(db, start, (size_t)(t - start)); in parse_integer_literal()
2658 nfmt(db, "-{0}", NULL); in parse_integer_literal()
2691 if (fd == NULL || (size_t)(last - first) < fd->mangled_size) in parse_floating_literal()
2723 last = first + fd->mangled_size + 1; in parse_floating_literal()
2730 unsigned d1 = ISDIGIT(t[0]) ? t[0] - '0' : t[0] - 'a' + 10; in parse_floating_literal()
2732 unsigned d0 = ISDIGIT(t[0]) ? t[0] - '0' : t[0] - 'a' + 10; in parse_floating_literal()
2737 for (t = last - 1; t > first; t--, e++) { in parse_floating_literal()
2741 unsigned d0 = ISDIGIT(t[0]) ? t[0] - '0' : t[0] - 'a' + 10; in parse_floating_literal()
2742 t--; in parse_floating_literal()
2743 unsigned d1 = ISDIGIT(t[0]) ? t[0] - '0' : t[0] - 'a' + 10; in parse_floating_literal()
2756 str_init(&num, db->cpp_ops); in parse_floating_literal()
2758 num.str_size = fd->max_demangled_size + 1; in parse_floating_literal()
2759 num.str_s = zalloc(db->cpp_ops, num.str_size); in parse_floating_literal()
2766 n = snprintf(num.str_s, fd->max_demangled_size, fd->spec, in parse_floating_literal()
2770 n = snprintf(num.str_s, fd->max_demangled_size, fd->spec, in parse_floating_literal()
2774 n = snprintf(num.str_s, fd->max_demangled_size, fd->spec, in parse_floating_literal()
2778 if (n >= fd->max_demangled_size || n <= 0) { in parse_floating_literal()
2784 (void) name_add_str(&db->cpp_name, &num, NULL); in parse_floating_literal()
2790 * <expr-primary> ::= L <type> <value number> E # integer literal
2795 * ::= L <type> <real-part float> _ <imag-part float> E
2799 * ::= L <mangled-name> E # external name
2826 if (last - first < 4 || first[0] != 'L') in parse_expr_primary()
2864 * http://sourcerytools.com/pipermail/cxx-abi-dev/2011-August/002422.html in parse_expr_primary()
2895 nadd_l(db, t, (size_t)(n - t)); in parse_expr_primary()
2903 * <operator-name>
2925 * ::= li <source-name> # operator ""
2929 * ::= mi # -
2930 * ::= mI # -=
2933 * ::= mm # -- (postfix in <expression> context)
2936 * ::= ng # - (unary)
2942 * ::= pm # ->*
2947 * ::= pt # ->
2953 * ::= v <digit> <source-name> # vendor extended operator
2982 { "mi", "operator-" },
2983 { "mI", "operator-=" },
2986 { "mm", "operator--" },
2989 { "ng", "operator-" },
2995 { "pm", "operator->*" },
3000 { "pt", "operator->" },
3013 if (last - first < 2) in parse_operator_name()
3051 db->cpp_try_to_parse_template_args; in parse_operator_name()
3053 db->cpp_try_to_parse_template_args = B_FALSE; in parse_operator_name()
3055 db->cpp_try_to_parse_template_args = try_to_parse_template_args; in parse_operator_name()
3061 db->cpp_parsed_ctor_dtor_cv = B_TRUE; in parse_operator_name()
3158 *val += t[0] - '0'; in parse_base36()
3160 *val += t[0] - 'A' + 10; in parse_base36()
3179 if (first == last || last - first < 2) in parse_substitution()
3208 if (n >= sub_len(&db->cpp_subs)) in parse_substitution()
3232 size_t nn = n * 10; in parse_source_name()
3236 nn += t[0] - '0'; in parse_source_name()
3247 if (strncmp(t, "_GLOBAL__N", 10) == 0) in parse_source_name()
3257 * <vector-type> ::= Dv <positive dimension number> _
3268 if (last - first < 3) in parse_vector_type()
3275 const char *t1 = NULL; in parse_vector_type() local
3278 t1 = parse_number(t, last); in parse_vector_type()
3279 if (t1 == last || t1 + 1 == last || t1[0] != '_') in parse_vector_type()
3282 nadd_l(db, t, (size_t)(t1 - t)); in parse_vector_type()
3285 t = t1 + 1; in parse_vector_type()
3288 t1 = parse_type(t, last, db); in parse_vector_type()
3289 if (t1 == t) in parse_vector_type()
3293 return (t1); in parse_vector_type()
3296 return (t1); in parse_vector_type()
3300 t1 = parse_expression(first + 2, last, db); in parse_vector_type()
3301 if (first == last || t1 == first + 2 || t1[0] != '_') in parse_vector_type()
3305 t = t1 + 1; in parse_vector_type()
3310 t1 = parse_type(t, last, db); in parse_vector_type()
3311 if (t == t1) in parse_vector_type()
3315 return (t1); in parse_vector_type()
3320 * <decltype> ::= Dt <expression> E # decltype of an id-expression or class member access (C++0x)
3329 if (last - first < 4) in parse_decltype()
3349 * <array-type> ::= A <positive dimension number> _ <element type>
3358 if (last - first < 3) in parse_array_type()
3362 const char *t1 = NULL; in parse_array_type() local
3367 t1 = parse_number(t, last); in parse_array_type()
3368 if (t1 == last) in parse_array_type()
3371 nadd_l(db, t, (size_t)(t1 - t)); in parse_array_type()
3373 t1 = parse_expression(t, last, db); in parse_array_type()
3374 if (t1 == last || t == t1) in parse_array_type()
3378 if (t1[0] != '_') in parse_array_type()
3381 t = t1; in parse_array_type()
3388 t1 = parse_type(t + 1, last, db); in parse_array_type()
3389 if (t1 == t + 1 || NAMT(db, n) != 2) in parse_array_type()
3396 str_t *r = &name_top(&db->cpp_name)->strp_r; in parse_array_type()
3397 if (r->str_len > 1 && r->str_s[0] == ' ' && r->str_s[1] == '[') in parse_array_type()
3401 return (t1); in parse_array_type()
3404 /* <pointer-to-member-type> ::= M <class type> <member type> */
3410 if (last - first < 3) in parse_pointer_to_member_type()
3415 const char *t1 = first + 1; in parse_pointer_to_member_type() local
3419 t2 = parse_type(t1, last, db); in parse_pointer_to_member_type()
3420 if (t1 == t2) in parse_pointer_to_member_type()
3423 t1 = t2; in parse_pointer_to_member_type()
3424 t2 = parse_type(t1, last, db); in parse_pointer_to_member_type()
3425 if (t1 == t2) in parse_pointer_to_member_type()
3431 str_pair_t *func = name_top(&db->cpp_name); in parse_pointer_to_member_type()
3433 if (str_length(&func->strp_r) > 0 && func->strp_r.str_s[0] == '(') in parse_pointer_to_member_type()
3443 * <unresolved-name>
3444 …* extension ::= srN <unresolved-type> [<template-args>] <unresolved-qualifier-level>* E <b…
3445 * ::= [gs] <base-unresolved-name> # x or (with "gs") ::x
3446 * ::= [gs] sr <unresolved-qualifier-level>+ E <base-unresolved-name>
3448 * ::= sr <unresolved-type> <base-unresolved-name> # T::x / decltype(p)::x
3449 * extension ::= sr <unresolved-type> <template-args> <base-unresolved-name>
3451 …* (ignored) ::= srN <unresolved-type> <unresolved-qualifier-level>+ E <base-unresolved-na…
3459 if (last - first < 2) in parse_unresolved_name()
3485 if (t[0] != 's' || t[1] != 'r' || last - t < 2) in parse_unresolved_name()
3572 /* <unresolved-qualifier-level> ::= <simple-id> */
3583 * <base-unresolved-name> ::= <simple-id> # unresolved name
3584 …* extension ::= <operator-name> # unresolved operator-func…
3585 …* extension ::= <operator-name> <template-args> # unresolved operator temp…
3586 …* ::= on <operator-name> # unresolved operator-func…
3587 …* ::= on <operator-name> <template-args> # unresolved operator temp…
3588 …* ::= dn <destructor-name> # destructor or pseudo-des…
3589 * # e.g. ~X or ~X<N-1>
3597 if (last - first < 2) in parse_base_unresolved_name()
3601 const char *t1 = NULL; in parse_base_unresolved_name() local
3612 t1 = parse_template_args(t, last, db); in parse_base_unresolved_name()
3613 if (t1 != t) { in parse_base_unresolved_name()
3619 return (t1); in parse_base_unresolved_name()
3631 t1 = parse_template_args(t, last, db); in parse_base_unresolved_name()
3632 if (t1 != t) in parse_base_unresolved_name()
3634 return (t1); in parse_base_unresolved_name()
3638 * <destructor-name> ::= <unresolved-type> # e.g., ~T or ~decltype(f())
3639 * ::= <simple-id> # e.g., ~A<2*N>
3662 * <ref-qualifier> ::= R # & ref-qualifier
3663 * <ref-qualifier> ::= O # && ref-qualifier
3665 * <function-type> ::= F [Y] <bare-function-type> [<ref-qualifier>] E
3672 if (last - first < 2) in parse_function_type()
3683 const char *t1 = parse_type(t, last, db); in parse_function_type() local
3684 if (t1 == t) in parse_function_type()
3690 t = t1; in parse_function_type()
3711 t1 = parse_type(t, last, db); in parse_function_type()
3712 if (t1 == t || t == last) in parse_function_type()
3715 t = t1; in parse_function_type()
3740 * <template-param> ::= T_ # first template parameter
3741 * ::= T <parameter-2 non-negative number> _
3748 if (last - first < 2 || first[0] != 'T') in parse_template_param()
3758 idx *= 10; in parse_template_param()
3759 idx += t[0] - '0'; in parse_template_param()
3769 * T_ -> idx 0 in parse_template_param()
3770 * T0 -> idx 1 in parse_template_param()
3771 * T1 -> idx 2 in parse_template_param()
3784 nadd_l(db, first, (size_t)(t - first)); in parse_template_param()
3785 db->cpp_fix_forward_references = B_TRUE; in parse_template_param()
3794 * <template-args> ::= I <template-arg>* E
3795 * extension, the abi says <template-arg>+
3802 if (last - first < 2 || first[0] != 'I') in parse_template_args()
3805 if (db->cpp_tag_templates) in parse_template_args()
3806 sub_clear(templ_top(&db->cpp_templ)); in parse_template_args()
3812 if (db->cpp_tag_templates) in parse_template_args()
3816 const char *t1 = parse_template_arg(t, last, db); in parse_template_args() local
3818 if (db->cpp_tag_templates) in parse_template_args()
3821 if (t1 == t || t == last) in parse_template_args()
3824 if (db->cpp_tag_templates) in parse_template_args()
3827 t = t1; in parse_template_args()
3835 str_pair_len(name_top(&db->cpp_name)) == 0) in parse_template_args()
3836 name_pop(&db->cpp_name, NULL); in parse_template_args()
3845 top->str_s[top->str_len - 1] == '>') in parse_template_args()
3855 * <discriminator> := _ <non-negative number> # when number < 10
3856 * := __ <non-negative number> _ # when number >= 10
3857 * extension := decimal-digit+ # at the end of string
3897 /* <CV-qualifiers> ::= [r] [V] [K] */
3924 * <number> ::= [n] <non-negative decimal integer>
3964 return (name_empty(&db->cpp_name)); in nempty()
3970 return (name_len(&db->cpp_name)); in nlen()
3976 CK(name_add(&db->cpp_name, s, len, NULL, 0)); in nadd_l()
3982 name_t *nm = &db->cpp_name; in njoin()
3990 CK(name_fmt(&db->cpp_name, fmt_l, fmt_r)); in nfmt()
3996 CK(sub_save(&db->cpp_subs, &db->cpp_name, amt)); in save_top()
4002 CK(sub_substitute(&db->cpp_subs, n, &db->cpp_name)); in sub()
4008 return (templ_empty(&db->cpp_templ) ? B_TRUE : B_FALSE); in tempty()
4014 return (templ_top_len(&db->cpp_templ)); in ttlen()
4020 CK(templ_sub(&db->cpp_templ, n, &db->cpp_name)); in tsub()
4026 CK(templ_push(&db->cpp_templ)); in tpush()
4032 templ_pop(&db->cpp_templ); in tpop()
4038 CK(templ_save(&db->cpp_name, amt, &db->cpp_templ)); in tsave()
4045 db->cpp_ops = ops; in db_init()
4046 name_init(&db->cpp_name, ops); in db_init()
4047 sub_init(&db->cpp_subs, ops); in db_init()
4048 templ_init(&db->cpp_templ, ops); in db_init()
4049 db->cpp_tag_templates = B_TRUE; in db_init()
4050 db->cpp_try_to_parse_template_args = B_TRUE; in db_init()
4057 name_fini(&db->cpp_name); in db_fini()
4058 sub_fini(&db->cpp_subs); in db_fini()
4059 templ_fini(&db->cpp_templ); in db_fini()
4067 (int)sp->strp_l.str_len, sp->strp_l.str_s, in print_sp()
4068 (int)sp->strp_r.str_len, sp->strp_r.str_s); in print_sp()
4084 for (i = 0; i < n->nm_len; i++, sp--) { in print_name()
4093 /* Print a base-36 number (for substitutions) */
4109 if (r < 10) in base36()
4112 *p++ = r - 10 + 'A'; in base36()
4118 while (--p >= tmp) in base36()
4127 const name_t *n = sub->sub_items; in print_sub()
4131 if (sub->sub_len == 0) in print_sub()
4134 for (size_t i = 0; i < sub->sub_len; i++, n++) { in print_sub()
4137 (void) fprintf(out, "%-4s", "S_"); in print_sub()
4144 (void) fprintf(out, "%-4s", buf); in print_sub()
4149 for (size_t j = 0; j < n->nm_len; j++) { in print_sub()
4152 print_sp(&n->nm_items[j], out); in print_sub()
4169 for (size_t i = 0; i < s->sub_len; i++) { in print_templ()
4175 (void) snprintf(buf, sizeof (buf), "T%zu_", i - 1); in print_templ()
4177 (void) fprintf(out, " %-4s = ", buf); in print_templ()
4181 const name_t *n = &s->sub_items[i]; in print_templ()
4182 for (size_t j = 0; j < n->nm_len; j++) { in print_templ()
4183 const str_pair_t *sp = &n->nm_items[j]; in print_templ()
4189 (int)sp->strp_l.str_len, sp->strp_l.str_s, in print_templ()
4190 (int)sp->strp_r.str_len, sp->strp_r.str_s); in print_templ()
4200 print_name(&db->cpp_name, out); in dump()
4201 print_sub(&db->cpp_subs, out); in dump()
4202 print_templ(&db->cpp_templ, out); in dump()