Lines Matching refs:last

37     const char* parse_type(const char* first, const char* last, C& db);
39 const char* parse_encoding(const char* first, const char* last, C& db);
41 const char* parse_name(const char* first, const char* last, C& db,
44 const char* parse_expression(const char* first, const char* last, C& db);
46 const char* parse_template_args(const char* first, const char* last, C& db);
48 const char* parse_operator_name(const char* first, const char* last, C& db);
50 const char* parse_unqualified_name(const char* first, const char* last, C& db);
52 const char* parse_decltype(const char* first, const char* last, C& db);
97 print_state(const char* msg, const char* first, const char* last, const C& db)
100 for (; first != last; ++first)
109 parse_number(const char* first, const char* last)
111 if (first != last)
116 if (t != last)
125 while (first != last && std::isdigit(*first))
172 parse_floating_number(const char* first, const char* last, C& db)
175 if (static_cast<std::size_t>(last - first) > N)
177 last = first + N;
185 for (; t != last; ++t, ++e)
216 parse_source_name(const char* first, const char* last, C& db)
218 if (first != last)
221 if (isdigit(c) && first+1 != last)
228 if (++t == last)
231 if (static_cast<size_t>(last - t) >= n)
258 parse_substitution(const char* first, const char* last, C& db)
260 if (last - first >= 2)
307 for (++t; t != last && (std::isdigit(*t) || std::isupper(*t)); ++t)
315 if (t == last || *t != '_')
366 parse_builtin_type(const char* first, const char* last, C& db)
368 if (first != last)
458 const char*t = parse_source_name(first+1, last, db);
464 if (first+1 != last)
515 parse_cv_qualifiers(const char* first, const char* last, unsigned& cv)
518 if (first != last)
544 parse_template_param(const char* first, const char* last, C& db)
546 if (last - first >= 2)
571 for (++t; t != last && isdigit(*t); ++t)
576 if (t == last || *t != '_' || db.template_param.empty())
601 parse_const_cast_expr(const char* first, const char* last, C& db)
603 if (last - first >= 3 && first[0] == 'c' && first[1] == 'c')
605 const char* t = parse_type(first+2, last, db);
608 const char* t1 = parse_expression(t, last, db);
627 parse_dynamic_cast_expr(const char* first, const char* last, C& db)
629 if (last - first >= 3 && first[0] == 'd' && first[1] == 'c')
631 const char* t = parse_type(first+2, last, db);
634 const char* t1 = parse_expression(t, last, db);
653 parse_reinterpret_cast_expr(const char* first, const char* last, C& db)
655 if (last - first >= 3 && first[0] == 'r' && first[1] == 'c')
657 const char* t = parse_type(first+2, last, db);
660 const char* t1 = parse_expression(t, last, db);
679 parse_static_cast_expr(const char* first, const char* last, C& db)
681 if (last - first >= 3 && first[0] == 's' && first[1] == 'c')
683 const char* t = parse_type(first+2, last, db);
686 const char* t1 = parse_expression(t, last, db);
705 parse_pack_expansion(const char* first, const char* last, C& db)
707 if (last - first >= 3 && first[0] == 's' && first[1] == 'p')
709 const char* t = parse_expression(first+2, last, db);
720 parse_sizeof_type_expr(const char* first, const char* last, C& db)
722 if (last - first >= 3 && first[0] == 's' && first[1] == 't')
724 const char* t = parse_type(first+2, last, db);
740 parse_sizeof_expr_expr(const char* first, const char* last, C& db)
742 if (last - first >= 3 && first[0] == 's' && first[1] == 'z')
744 const char* t = parse_expression(first+2, last, db);
760 parse_sizeof_param_pack_expr(const char* first, const char* last, C& db)
762 if (last - first >= 3 && first[0] == 's' && first[1] == 'Z' && first[2] == 'T')
765 const char* t = parse_template_param(first+2, last, db);
794 parse_function_param(const char* first, const char* last, C& db)
796 if (last - first >= 3 && *first == 'f')
801 const char* t = parse_cv_qualifiers(first+2, last, cv);
802 const char* t1 = parse_number(t, last);
803 if (t1 != last && *t1 == '_')
812 const char* t0 = parse_number(first+2, last);
813 if (t0 != last && *t0 == 'p')
816 const char* t = parse_cv_qualifiers(t0, last, cv);
817 const char* t1 = parse_number(t, last);
818 if (t1 != last && *t1 == '_')
833 parse_sizeof_function_param_pack_expr(const char* first, const char* last, C& db)
835 if (last - first >= 3 && first[0] == 's' && first[1] == 'Z' && first[2] == 'f')
837 const char* t = parse_function_param(first+2, last, db);
854 parse_typeid_expr(const char* first, const char* last, C& db)
856 if (last - first >= 3 && first[0] == 't' && (first[1] == 'e' || first[1] == 'i'))
860 t = parse_expression(first+2, last, db);
862 t = parse_type(first+2, last, db);
878 parse_throw_expr(const char* first, const char* last, C& db)
880 if (last - first >= 3 && first[0] == 't' && first[1] == 'w')
882 const char* t = parse_expression(first+2, last, db);
898 parse_dot_star_expr(const char* first, const char* last, C& db)
900 if (last - first >= 3 && first[0] == 'd' && first[1] == 's')
902 const char* t = parse_expression(first+2, last, db);
905 const char* t1 = parse_expression(t, last, db);
924 parse_simple_id(const char* first, const char* last, C& db)
926 if (first != last)
928 const char* t = parse_source_name(first, last, db);
931 const char* t1 = parse_template_args(t, last, db);
954 parse_unresolved_type(const char* first, const char* last, C& db)
956 if (first != last)
964 t = parse_template_param(first, last, db);
979 t = parse_decltype(first, last, db);
989 t = parse_substitution(first, last, db);
994 if (last - first > 2 && first[1] == 't')
996 t = parse_unqualified_name(first+2, last, db);
1018 parse_destructor_name(const char* first, const char* last, C& db)
1020 if (first != last)
1022 const char* t = parse_unresolved_type(first, last, db);
1024 t = parse_simple_id(first, last, db);
1046 parse_base_unresolved_name(const char* first, const char* last, C& db)
1048 if (last - first >= 2)
1054 const char* t = parse_operator_name(first+2, last, db);
1057 first = parse_template_args(t, last, db);
1070 const char* t = parse_destructor_name(first+2, last, db);
1077 const char* t = parse_simple_id(first, last, db);
1080 t = parse_operator_name(first, last, db);
1083 first = parse_template_args(t, last, db);
1105 parse_unresolved_qualifier_level(const char* first, const char* last, C& db)
1107 return parse_simple_id(first, last, db);
1122 parse_unresolved_name(const char* first, const char* last, C& db)
1124 if (last - first > 2)
1133 const char* t2 = parse_base_unresolved_name(t, last, db);
1144 else if (last - t > 2 && t[0] == 's' && t[1] == 'r')
1149 const char* t1 = parse_unresolved_type(t, last, db);
1150 if (t1 == t || t1 == last)
1153 t1 = parse_template_args(t, last, db);
1162 if (t == last)
1170 t1 = parse_unresolved_qualifier_level(t, last, db);
1171 if (t1 == t || t1 == last || db.names.size() < 2)
1179 t1 = parse_base_unresolved_name(t, last, db);
1196 const char* t1 = parse_unresolved_type(t, last, db);
1200 t1 = parse_template_args(t, last, db);
1210 t1 = parse_base_unresolved_name(t, last, db);
1226 t1 = parse_unresolved_qualifier_level(t, last, db);
1227 if (t1 == t || t1 == last)
1238 t1 = parse_unresolved_qualifier_level(t, last, db);
1239 if (t1 == t || t1 == last || db.names.size() < 2)
1247 t1 = parse_base_unresolved_name(t, last, db);
1271 parse_dot_expr(const char* first, const char* last, C& db)
1273 if (last - first >= 3 && first[0] == 'd' && first[1] == 't')
1275 const char* t = parse_expression(first+2, last, db);
1278 const char* t1 = parse_unresolved_name(t, last, db);
1297 parse_call_expr(const char* first, const char* last, C& db)
1299 if (last - first >= 4 && first[0] == 'c' && first[1] == 'l')
1301 const char* t = parse_expression(first+2, last, db);
1304 if (t == last)
1314 const char* t1 = parse_expression(t, last, db);
1315 if (t1 == t || t1 == last)
1352 parse_new_expr(const char* first, const char* last, C& db)
1354 if (last - first >= 4)
1367 if (t == last)
1373 const char* t1 = parse_expression(t, last, db);
1374 if (t1 == t || t1 == last)
1395 const char* t1 = parse_type(t, last, db);
1396 if (t1 == t || t1 == last)
1400 if (last - t >= 3 && t[0] == 'p' && t[1] == 'i')
1407 t1 = parse_expression(t, last, db);
1408 if (t1 == t || t1 == last)
1474 parse_conversion_expr(const char* first, const char* last, C& db)
1476 if (last - first >= 3 && first[0] == 'c' && first[1] == 'v')
1480 const char* t = parse_type(first+2, last, db);
1482 if (t != first+2 && t != last)
1486 const char* t1 = parse_expression(t, last, db);
1494 if (t == last)
1503 const char* t1 = parse_expression(t, last, db);
1504 if (t1 == t || t1 == last)
1541 parse_arrow_expr(const char* first, const char* last, C& db)
1543 if (last - first >= 3 && first[0] == 'p' && first[1] == 't')
1545 const char* t = parse_expression(first+2, last, db);
1548 const char* t1 = parse_expression(t, last, db);
1571 parse_function_type(const char* first, const char* last, C& db)
1573 if (first != last && *first == 'F')
1576 if (t != last)
1582 if (++t == last)
1585 const char* t1 = parse_type(t, last, db);
1593 if (t == last)
1608 if (*t == 'R' && t+1 != last && t[1] == 'E')
1614 if (*t == 'O' && t+1 != last && t[1] == 'E')
1621 t1 = parse_type(t, last, db);
1623 if (t1 == t || t1 == last)
1660 parse_pointer_to_member_type(const char* first, const char* last, C& db)
1662 if (first != last && *first == 'M')
1664 const char* t = parse_type(first+1, last, db);
1667 const char* t2 = parse_type(t, last, db);
1697 parse_array_type(const char* first, const char* last, C& db)
1699 if (first != last && *first == 'A' && first+1 != last)
1703 const char* t = parse_type(first+2, last, db);
1716 const char* t = parse_number(first+1, last);
1717 if (t != last && *t == '_')
1719 const char* t2 = parse_type(t+1, last, db);
1733 const char* t = parse_expression(first+1, last, db);
1734 if (t != first+1 && t != last && *t == '_')
1736 const char* t2 = parse_type(++t, last, db);
1761 parse_decltype(const char* first, const char* last, C& db)
1763 if (last - first >= 4 && first[0] == 'D')
1770 const char* t = parse_expression(first+2, last, db);
1771 if (t != first+2 && t != last && *t == 'E')
1794 parse_vector_type(const char* first, const char* last, C& db)
1796 if (last - first > 3 && first[0] == 'D' && first[1] == 'v')
1800 const char* t = parse_number(first+2, last);
1801 if (t == last || *t != '_')
1805 if (++t != last)
1809 const char* t1 = parse_type(t, last, db);
1832 const char* t = parse_expression(t1, last, db);
1842 if (t1 != last && *t1 == '_' && ++t1 != last)
1844 const char* t = parse_type(t1, last, db);
1883 parse_type(const char* first, const char* last, C& db)
1885 if (first != last)
1894 const char* t = parse_cv_qualifiers(first, last, cv);
1899 const char* t1 = parse_type(t, last, db);
1946 const char* t = parse_builtin_type(first, last, db);
1956 t = parse_array_type(first, last, db);
1966 t = parse_type(first+1, last, db);
1977 t = parse_function_type(first, last, db);
1987 t = parse_type(first+1, last, db);
1998 t = parse_pointer_to_member_type(first, last, db);
2010 t = parse_type(first+1, last, db);
2037 t = parse_type(first+1, last, db);
2071 t = parse_type(first+1, last, db);
2098 t = parse_template_param(first, last, db);
2107 const char* t1 = parse_template_args(t, last, db);
2122 if (first+1 != last)
2124 t = parse_source_name(first+1, last, db);
2127 const char* t2 = parse_type(t, last, db);
2159 if (first+1 != last && first[1] == 't')
2161 t = parse_name(first, last, db);
2172 t = parse_substitution(first, last, db);
2178 t = parse_template_args(first, last, db);
2194 if (first+1 != last)
2201 t = parse_type(first+2, last, db);
2215 t = parse_decltype(first, last, db);
2226 t = parse_vector_type(first, last, db);
2242 t = parse_builtin_type(first, last, db);
2249 t = parse_name(first, last, db);
2322 parse_operator_name(const char* first, const char* last, C& db)
2324 if (last - first >= 2)
2369 const char* t = parse_type(first+2, last, db);
2454 const char* t = parse_source_name(first+2, last, db);
2605 const char* t = parse_source_name(first+2, last, db);
2622 parse_integer_literal(const char* first, const char* last, const typename C::String& lit, C& db)
2624 const char* t = parse_number(first, last);
2625 if (t != first && t != last && *t == 'E')
2653 parse_expr_primary(const char* first, const char* last, C& db)
2655 if (last - first >= 4 && *first == 'L')
2661 const char* t = parse_integer_literal(first+2, last, "wchar_t", db);
2684 const char* t = parse_integer_literal(first+2, last, "char", db);
2691 const char* t = parse_integer_literal(first+2, last, "signed char", db);
2698 const char* t = parse_integer_literal(first+2, last, "unsigned char", db);
2705 const char* t = parse_integer_literal(first+2, last, "short", db);
2712 const char* t = parse_integer_literal(first+2, last, "unsigned short", db);
2719 const char* t = parse_integer_literal(first+2, last, "", db);
2726 const char* t = parse_integer_literal(first+2, last, "u", db);
2733 const char* t = parse_integer_literal(first+2, last, "l", db);
2740 const char* t = parse_integer_literal(first+2, last, "ul", db);
2747 const char* t = parse_integer_literal(first+2, last, "ll", db);
2754 const char* t = parse_integer_literal(first+2, last, "ull", db);
2761 const char* t = parse_integer_literal(first+2, last, "__int128", db);
2768 const char* t = parse_integer_literal(first+2, last, "unsigned __int128", db);
2775 const char* t = parse_floating_number<float>(first+2, last, db);
2782 const char* t = parse_floating_number<double>(first+2, last, db);
2789 const char* t = parse_floating_number<long double>(first+2, last, db);
2797 const char* t = parse_encoding(first+3, last, db);
2798 if (t != first+3 && t != last && *t == 'E')
2809 const char* t = parse_type(first+1, last, db);
2810 if (t != first+1 && t != last)
2815 for (; n != last && isdigit(*n); ++n)
2817 if (n != t && n != last && *n == 'E')
2908 parse_ctor_dtor_name(const char* first, const char* last, C& db)
2910 if (last-first >= 2 && !db.names.empty())
2958 parse_unnamed_type_name(const char* first, const char* last, C& db)
2960 if (last - first > 2 && first[0] == 'U')
2969 if (t0 == last)
2977 while (t1 != last && std::isdigit(*t1))
2983 if (t0 == last || *t0 != '_')
3002 const char* t1 = parse_type(t0, last, db);
3016 t1 = parse_type(t0, last, db);
3032 if (t0 == last || *t0 != 'E')
3038 if (t0 == last)
3046 while (t1 != last && std::isdigit(*t1))
3051 if (t0 == last || *t0 != '_')
3071 parse_unqualified_name(const char* first, const char* last, C& db)
3073 if (first != last)
3080 t = parse_ctor_dtor_name(first, last, db);
3085 t = parse_unnamed_type_name(first, last, db);
3098 t = parse_source_name(first, last, db);
3103 t = parse_operator_name(first, last, db);
3118 parse_unscoped_name(const char* first, const char* last, C& db)
3120 if (last - first >= 2)
3128 if (t0 != last && *t0 == 'L')
3131 const char* t1 = parse_unqualified_name(t0, last, db);
3150 parse_alignof_type(const char* first, const char* last, C& db)
3152 if (last - first >= 3 && first[0] == 'a' && first[1] == 't')
3154 const char* t = parse_type(first+2, last, db);
3170 parse_alignof_expr(const char* first, const char* last, C& db)
3172 if (last - first >= 3 && first[0] == 'a' && first[1] == 'z')
3174 const char* t = parse_expression(first+2, last, db);
3188 parse_noexcept_expression(const char* first, const char* last, C& db)
3190 const char* t1 = parse_expression(first, last, db);
3203 parse_prefix_expression(const char* first, const char* last, const typename C::String& op, C& db)
3205 const char* t1 = parse_expression(first, last, db);
3218 parse_binary_expression(const char* first, const char* last, const typename C::String& op, C& db)
3220 const char* t1 = parse_expression(first, last, db);
3223 const char* t2 = parse_expression(t1, last, db);
3288 parse_expression(const char* first, const char* last, C& db)
3290 if (last - first >= 2)
3294 if (last - first >= 4 && t[0] == 'g' && t[1] == 's')
3302 first = parse_expr_primary(first, last, db);
3305 first = parse_template_param(first, last, db);
3308 first = parse_function_param(first, last, db);
3314 t = parse_binary_expression(first+2, last, "&&", db);
3319 t = parse_prefix_expression(first+2, last, "&", db);
3324 t = parse_binary_expression(first+2, last, "&", db);
3329 t = parse_binary_expression(first+2, last, "&=", db);
3334 t = parse_binary_expression(first+2, last, "=", db);
3339 first = parse_alignof_type(first, last, db);
3342 first = parse_alignof_expr(first, last, db);
3350 first = parse_const_cast_expr(first, last, db);
3353 first = parse_call_expr(first, last, db);
3356 t = parse_binary_expression(first+2, last, ",", db);
3361 t = parse_prefix_expression(first+2, last, "~", db);
3366 first = parse_conversion_expr(first, last, db);
3375 const char* t1 = parse_expression(t+2, last, db);
3387 first = parse_dynamic_cast_expr(first, last, db);
3390 t = parse_prefix_expression(first+2, last, "*", db);
3396 const char* t1 = parse_expression(t+2, last, db);
3408 return parse_unresolved_name(first, last, db);
3410 first = parse_dot_star_expr(first, last, db);
3413 first = parse_dot_expr(first, last, db);
3416 t = parse_binary_expression(first+2, last, "/", db);
3421 t = parse_binary_expression(first+2, last, "/=", db);
3431 t = parse_binary_expression(first+2, last, "^", db);
3436 t = parse_binary_expression(first+2, last, "^=", db);
3441 t = parse_binary_expression(first+2, last, "==", db);
3451 t = parse_binary_expression(first+2, last, ">=", db);
3456 t = parse_binary_expression(first+2, last, ">", db);
3465 const char* t1 = parse_expression(first+2, last, db);
3468 const char* t2 = parse_expression(t1, last, db);
3488 t = parse_binary_expression(first+2, last, "<=", db);
3493 t = parse_binary_expression(first+2, last, "<<", db);
3498 t = parse_binary_expression(first+2, last, "<<=", db);
3503 t = parse_binary_expression(first+2, last, "<", db);
3513 t = parse_binary_expression(first+2, last, "-", db);
3518 t = parse_binary_expression(first+2, last, "-=", db);
3523 t = parse_binary_expression(first+2, last, "*", db);
3528 t = parse_binary_expression(first+2, last, "*=", db);
3533 if (first+2 != last && first[2] == '_')
3535 t = parse_prefix_expression(first+3, last, "--", db);
3541 const char* t1 = parse_expression(first+2, last, db);
3558 first = parse_new_expr(first, last, db);
3561 t = parse_binary_expression(first+2, last, "!=", db);
3566 t = parse_prefix_expression(first+2, last, "-", db);
3571 t = parse_prefix_expression(first+2, last, "!", db);
3576 t = parse_noexcept_expression(first+2, last, db);
3586 return parse_unresolved_name(first, last, db);
3588 t = parse_binary_expression(first+2, last, "||", db);
3593 t = parse_binary_expression(first+2, last, "|", db);
3598 t = parse_binary_expression(first+2, last, "|=", db);
3608 t = parse_binary_expression(first+2, last, "->*", db);
3613 t = parse_binary_expression(first+2, last, "+", db);
3618 t = parse_binary_expression(first+2, last, "+=", db);
3623 if (first+2 != last && first[2] == '_')
3625 t = parse_prefix_expression(first+3, last, "++", db);
3631 const char* t1 = parse_expression(first+2, last, db);
3642 t = parse_prefix_expression(first+2, last, "+", db);
3647 first = parse_arrow_expr(first, last, db);
3654 const char* t1 = parse_expression(first+2, last, db);
3657 const char* t2 = parse_expression(t1, last, db);
3660 const char* t3 = parse_expression(t2, last, db);
3688 first = parse_reinterpret_cast_expr(first, last, db);
3691 t = parse_binary_expression(first+2, last, "%", db);
3696 t = parse_binary_expression(first+2, last, "%=", db);
3701 t = parse_binary_expression(first+2, last, ">>", db);
3706 t = parse_binary_expression(first+2, last, ">>=", db);
3716 first = parse_static_cast_expr(first, last, db);
3719 first = parse_pack_expansion(first, last, db);
3722 return parse_unresolved_name(first, last, db);
3724 first = parse_sizeof_type_expr(first, last, db);
3727 first = parse_sizeof_expr_expr(first, last, db);
3730 if (last - t >= 3)
3735 first = parse_sizeof_param_pack_expr(first, last, db);
3738 first = parse_sizeof_function_param_pack_expr(first, last, db);
3750 first = parse_typeid_expr(first, last, db);
3757 first = parse_throw_expr(first, last, db);
3770 return parse_unresolved_name(first, last, db);
3784 parse_template_arg(const char* first, const char* last, C& db)
3786 if (first != last)
3792 t = parse_expression(first+1, last, db);
3795 if (t != last && *t == 'E')
3801 if (t == last)
3805 const char* t1 = parse_template_arg(t, last, db);
3814 if (first+1 != last && first[1] == 'Z')
3816 t = parse_encoding(first+2, last, db);
3817 if (t != first+2 && t != last && *t == 'E')
3821 first = parse_expr_primary(first, last, db);
3825 first = parse_type(first, last, db);
3837 parse_template_args(const char* first, const char* last, C& db)
3839 if (last - first >= 2 && *first == 'I')
3850 const char* t1 = parse_template_arg(t, last, db);
3854 if (t1 == t || t1 == last)
3901 parse_nested_name(const char* first, const char* last, C& db,
3904 if (first != last && *first == 'N')
3907 const char* t0 = parse_cv_qualifiers(first+1, last, cv);
3908 if (t0 == last)
3922 if (last - t0 >= 2 && t0[0] == 'S' && t0[1] == 't')
3927 if (t0 == last)
3941 if (t0 + 1 != last && t0[1] == 't')
3943 t1 = parse_substitution(t0, last, db);
3944 if (t1 != t0 && t1 != last)
3962 t1 = parse_template_param(t0, last, db);
3963 if (t1 != t0 && t1 != last)
3979 if (t0 + 1 != last && t0[1] != 't' && t0[1] != 'T')
3981 t1 = parse_decltype(t0, last, db);
3982 if (t1 != t0 && t1 != last)
3998 t1 = parse_template_args(t0, last, db);
3999 if (t1 != t0 && t1 != last)
4012 if (++t0 == last)
4017 t1 = parse_unqualified_name(t0, last, db);
4018 if (t1 != t0 && t1 != last)
4049 parse_discriminator(const char* first, const char* last)
4052 if (first != last)
4057 if (t1 != last)
4063 for (++t1; t1 != last && std::isdigit(*t1); ++t1)
4065 if (t1 != last && *t1 == '_')
4073 for (; t1 != last && std::isdigit(*t1); ++t1)
4087 parse_local_name(const char* first, const char* last, C& db,
4090 if (first != last && *first == 'Z')
4092 const char* t = parse_encoding(first+1, last, db);
4093 if (t != first+1 && t != last && *t == 'E' && ++t != last)
4098 first = parse_discriminator(t+1, last);
4104 if (++t != last)
4106 const char* t1 = parse_number(t, last);
4107 if (t1 != last && *t1 == '_')
4110 t1 = parse_name(t, last, db,
4129 const char* t1 = parse_name(t, last, db,
4134 first = parse_discriminator(t1, last);
4162 parse_name(const char* first, const char* last, C& db,
4165 if (last - first >= 2)
4175 const char* t1 = parse_nested_name(t0, last, db,
4183 const char* t1 = parse_local_name(t0, last, db,
4191 const char* t1 = parse_unscoped_name(t0, last, db);
4194 if (t1 != last && *t1 == 'I') // <unscoped-template-name> <template-args>
4200 t1 = parse_template_args(t0, last, db);
4218 t1 = parse_substitution(t0, last, db);
4219 if (t1 != t0 && t1 != last && *t1 == 'I')
4222 t1 = parse_template_args(t0, last, db);
4253 parse_call_offset(const char* first, const char* last)
4255 if (first != last)
4261 const char* t = parse_number(first + 1, last);
4262 if (t != first + 1 && t != last && *t == '_')
4268 const char* t = parse_number(first + 1, last);
4269 if (t != first + 1 && t != last && *t == '_')
4271 const char* t2 = parse_number(++t, last);
4272 if (t2 != t && t2 != last && *t2 == '_')
4299 parse_special_name(const char* first, const char* last, C& db)
4301 if (last - first > 2)
4311 t = parse_type(first+2, last, db);
4322 t = parse_type(first+2, last, db);
4333 t = parse_type(first+2, last, db);
4344 t = parse_type(first+2, last, db);
4356 const char* t0 = parse_call_offset(first+2, last);
4359 const char* t1 = parse_call_offset(t0, last);
4362 t = parse_encoding(t1, last, db);
4374 t = parse_type(first+2, last, db);
4377 const char* t0 = parse_number(t, last);
4378 if (t0 != t && t0 != last && *t0 == '_')
4380 const char* t1 = parse_type(++t0, last, db);
4398 const char* t0 = parse_call_offset(first+1, last);
4401 t = parse_encoding(t0, last, db);
4426 t = parse_name(first+2, last, db);
4437 t = parse_name(first+2, last, db);
4479 parse_encoding(const char* first, const char* last, C& db)
4481 if (first != last)
4492 first = parse_special_name(first, last, db);
4497 const char* t = parse_name(first, last, db,
4503 if (t != last && *t != 'E' && *t != '.')
4516 t2 = parse_type(t, last, db);
4530 if (t != last && *t == 'v')
4540 t2 = parse_type(t, last, db);
4601 parse_block_invoke(const char* first, const char* last, C& db)
4603 if (last - first >= 13)
4612 if (t != last)
4617 if (++t == last || !std::isdigit(*t))
4622 while (t != last && isdigit(*t))
4638 parse_dot_suffix(const char* first, const char* last, C& db)
4640 if (first != last && *first == '.')
4644 db.names.back().first += " (" + typename C::String(first, last) + ")";
4645 first = last;
4658 demangle(const char* first, const char* last, C& db, int& status)
4660 if (first >= last)
4667 if (last - first >= 4)
4671 const char* t = parse_encoding(first+2, last, db);
4672 if (t != first+2 && t != last && *t == '.')
4673 t = parse_dot_suffix(t, last, db);
4674 if (t != last)
4679 const char* t = parse_encoding(first+4, last, db);
4680 if (t != first+4 && t != last)
4682 const char* t1 = parse_block_invoke(t, last, db);
4683 if (t1 != last)
4697 const char* t = parse_type(first, last, db);
4698 if (t != last)