• Home
  • Raw
  • Download

Lines Matching refs:first

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);
61 printf("{%s#%s}\n", s.first.c_str(), s.second.c_str()); in print_stack()
71 printf("{%s#%s}", s.first.c_str(), s.second.c_str()); in print_stack()
87 printf("{%s#%s}", s.first.c_str(), s.second.c_str()); in print_stack()
97 print_state(const char* msg, const char* first, const char* last, const C& db) in print_state() argument
100 for (; first != last; ++first) in print_state()
101 printf("%c", *first); in print_state()
109 parse_number(const char* first, const char* last) in parse_number() argument
111 if (first != last) in parse_number()
113 const char* t = first; in parse_number()
120 first = t+1; in parse_number()
124 first = t+1; in parse_number()
125 while (first != last && std::isdigit(*first)) in parse_number()
126 ++first; in parse_number()
130 return first; in parse_number()
172 parse_floating_number(const char* first, const char* last, C& db) in parse_floating_number() argument
175 if (static_cast<std::size_t>(last - first) > N) in parse_floating_number()
177 last = first + N; in parse_floating_number()
183 const char* t = first; in parse_floating_number()
188 return first; in parse_floating_number()
204 return first; in parse_floating_number()
206 first = t+1; in parse_floating_number()
209 return first; in parse_floating_number()
216 parse_source_name(const char* first, const char* last, C& db) in parse_source_name() argument
218 if (first != last) in parse_source_name()
220 char c = *first; in parse_source_name()
221 if (isdigit(c) && first+1 != last) in parse_source_name()
223 const char* t = first+1; in parse_source_name()
229 return first; in parse_source_name()
238 first = t + n; in parse_source_name()
242 return first; in parse_source_name()
258 parse_substitution(const char* first, const char* last, C& db) in parse_substitution() argument
260 if (last - first >= 2) in parse_substitution()
262 if (*first == 'S') in parse_substitution()
264 switch (first[1]) in parse_substitution()
268 first += 2; in parse_substitution()
272 first += 2; in parse_substitution()
276 first += 2; in parse_substitution()
280 first += 2; in parse_substitution()
284 first += 2; in parse_substitution()
288 first += 2; in parse_substitution()
295 first += 2; in parse_substitution()
299 if (std::isdigit(first[1]) || std::isupper(first[1])) in parse_substitution()
302 const char* t = first+1; in parse_substitution()
316 return first; in parse_substitution()
322 first = t+1; in parse_substitution()
329 return first; in parse_substitution()
366 parse_builtin_type(const char* first, const char* last, C& db) in parse_builtin_type() argument
368 if (first != last) in parse_builtin_type()
370 switch (*first) in parse_builtin_type()
374 ++first; in parse_builtin_type()
378 ++first; in parse_builtin_type()
382 ++first; in parse_builtin_type()
386 ++first; in parse_builtin_type()
390 ++first; in parse_builtin_type()
394 ++first; in parse_builtin_type()
398 ++first; in parse_builtin_type()
402 ++first; in parse_builtin_type()
406 ++first; in parse_builtin_type()
410 ++first; in parse_builtin_type()
414 ++first; in parse_builtin_type()
418 ++first; in parse_builtin_type()
422 ++first; in parse_builtin_type()
426 ++first; in parse_builtin_type()
430 ++first; in parse_builtin_type()
434 ++first; in parse_builtin_type()
438 ++first; in parse_builtin_type()
442 ++first; in parse_builtin_type()
446 ++first; in parse_builtin_type()
450 ++first; in parse_builtin_type()
454 ++first; in parse_builtin_type()
458 const char*t = parse_source_name(first+1, last, db); in parse_builtin_type()
459 if (t != first+1) in parse_builtin_type()
460 first = t; in parse_builtin_type()
464 if (first+1 != last) in parse_builtin_type()
466 switch (first[1]) in parse_builtin_type()
470 first += 2; in parse_builtin_type()
474 first += 2; in parse_builtin_type()
478 first += 2; in parse_builtin_type()
482 first += 2; in parse_builtin_type()
486 first += 2; in parse_builtin_type()
490 first += 2; in parse_builtin_type()
494 first += 2; in parse_builtin_type()
498 first += 2; in parse_builtin_type()
502 first += 2; in parse_builtin_type()
509 return first; in parse_builtin_type()
515 parse_cv_qualifiers(const char* first, const char* last, unsigned& cv) in parse_cv_qualifiers() argument
518 if (first != last) in parse_cv_qualifiers()
520 if (*first == 'r') in parse_cv_qualifiers()
523 ++first; in parse_cv_qualifiers()
525 if (*first == 'V') in parse_cv_qualifiers()
528 ++first; in parse_cv_qualifiers()
530 if (*first == 'K') in parse_cv_qualifiers()
533 ++first; in parse_cv_qualifiers()
536 return first; in parse_cv_qualifiers()
544 parse_template_param(const char* first, const char* last, C& db) in parse_template_param() argument
546 if (last - first >= 2) in parse_template_param()
548 if (*first == 'T') in parse_template_param()
550 if (first[1] == '_') in parse_template_param()
553 return first; in parse_template_param()
558 first += 2; in parse_template_param()
563 first += 2; in parse_template_param()
567 else if (isdigit(first[1])) in parse_template_param()
569 const char* t = first+1; in parse_template_param()
577 return first; in parse_template_param()
583 first = t+1; in parse_template_param()
587 db.names.push_back(typename C::String(first, t+1)); in parse_template_param()
588 first = t+1; in parse_template_param()
594 return first; in parse_template_param()
601 parse_const_cast_expr(const char* first, const char* last, C& db) in parse_const_cast_expr() argument
603 if (last - first >= 3 && first[0] == 'c' && first[1] == 'c') in parse_const_cast_expr()
605 const char* t = parse_type(first+2, last, db); in parse_const_cast_expr()
606 if (t != first+2) in parse_const_cast_expr()
612 return first; in parse_const_cast_expr()
616 first = t1; in parse_const_cast_expr()
620 return first; in parse_const_cast_expr()
627 parse_dynamic_cast_expr(const char* first, const char* last, C& db) in parse_dynamic_cast_expr() argument
629 if (last - first >= 3 && first[0] == 'd' && first[1] == 'c') in parse_dynamic_cast_expr()
631 const char* t = parse_type(first+2, last, db); in parse_dynamic_cast_expr()
632 if (t != first+2) in parse_dynamic_cast_expr()
638 return first; in parse_dynamic_cast_expr()
642 first = t1; in parse_dynamic_cast_expr()
646 return first; in parse_dynamic_cast_expr()
653 parse_reinterpret_cast_expr(const char* first, const char* last, C& db) in parse_reinterpret_cast_expr() argument
655 if (last - first >= 3 && first[0] == 'r' && first[1] == 'c') in parse_reinterpret_cast_expr()
657 const char* t = parse_type(first+2, last, db); in parse_reinterpret_cast_expr()
658 if (t != first+2) in parse_reinterpret_cast_expr()
664 return first; in parse_reinterpret_cast_expr()
668 first = t1; in parse_reinterpret_cast_expr()
672 return first; in parse_reinterpret_cast_expr()
679 parse_static_cast_expr(const char* first, const char* last, C& db) in parse_static_cast_expr() argument
681 if (last - first >= 3 && first[0] == 's' && first[1] == 'c') in parse_static_cast_expr()
683 const char* t = parse_type(first+2, last, db); in parse_static_cast_expr()
684 if (t != first+2) in parse_static_cast_expr()
690 return first; in parse_static_cast_expr()
694 first = t1; in parse_static_cast_expr()
698 return first; in parse_static_cast_expr()
705 parse_pack_expansion(const char* first, const char* last, C& db) in parse_pack_expansion() argument
707 if (last - first >= 3 && first[0] == 's' && first[1] == 'p') in parse_pack_expansion()
709 const char* t = parse_expression(first+2, last, db); in parse_pack_expansion()
710 if (t != first+2) in parse_pack_expansion()
711 first = t; in parse_pack_expansion()
713 return first; in parse_pack_expansion()
720 parse_sizeof_type_expr(const char* first, const char* last, C& db) in parse_sizeof_type_expr() argument
722 if (last - first >= 3 && first[0] == 's' && first[1] == 't') in parse_sizeof_type_expr()
724 const char* t = parse_type(first+2, last, db); in parse_sizeof_type_expr()
725 if (t != first+2) in parse_sizeof_type_expr()
728 return first; in parse_sizeof_type_expr()
730 first = t; in parse_sizeof_type_expr()
733 return first; in parse_sizeof_type_expr()
740 parse_sizeof_expr_expr(const char* first, const char* last, C& db) in parse_sizeof_expr_expr() argument
742 if (last - first >= 3 && first[0] == 's' && first[1] == 'z') in parse_sizeof_expr_expr()
744 const char* t = parse_expression(first+2, last, db); in parse_sizeof_expr_expr()
745 if (t != first+2) in parse_sizeof_expr_expr()
748 return first; in parse_sizeof_expr_expr()
750 first = t; in parse_sizeof_expr_expr()
753 return first; in parse_sizeof_expr_expr()
760 parse_sizeof_param_pack_expr(const char* first, const char* last, C& db) in parse_sizeof_param_pack_expr() argument
762 if (last - first >= 3 && first[0] == 's' && first[1] == 'Z' && first[2] == 'T') in parse_sizeof_param_pack_expr()
765 const char* t = parse_template_param(first+2, last, db); in parse_sizeof_param_pack_expr()
767 if (t != first+2) in parse_sizeof_param_pack_expr()
781 first = t; in parse_sizeof_param_pack_expr()
784 return first; in parse_sizeof_param_pack_expr()
794 parse_function_param(const char* first, const char* last, C& db) in parse_function_param() argument
796 if (last - first >= 3 && *first == 'f') in parse_function_param()
798 if (first[1] == 'p') in parse_function_param()
801 const char* t = parse_cv_qualifiers(first+2, last, cv); in parse_function_param()
806 first = t1+1; in parse_function_param()
809 else if (first[1] == 'L') in parse_function_param()
812 const char* t0 = parse_number(first+2, last); in parse_function_param()
821 first = t1+1; in parse_function_param()
826 return first; in parse_function_param()
833 parse_sizeof_function_param_pack_expr(const char* first, const char* last, C& db) in parse_sizeof_function_param_pack_expr() argument
835 if (last - first >= 3 && first[0] == 's' && first[1] == 'Z' && first[2] == 'f') in parse_sizeof_function_param_pack_expr()
837 const char* t = parse_function_param(first+2, last, db); in parse_sizeof_function_param_pack_expr()
838 if (t != first+2) in parse_sizeof_function_param_pack_expr()
841 return first; in parse_sizeof_function_param_pack_expr()
843 first = t; in parse_sizeof_function_param_pack_expr()
846 return first; in parse_sizeof_function_param_pack_expr()
854 parse_typeid_expr(const char* first, const char* last, C& db) in parse_typeid_expr() argument
856 if (last - first >= 3 && first[0] == 't' && (first[1] == 'e' || first[1] == 'i')) in parse_typeid_expr()
859 if (first[1] == 'e') in parse_typeid_expr()
860 t = parse_expression(first+2, last, db); in parse_typeid_expr()
862 t = parse_type(first+2, last, db); in parse_typeid_expr()
863 if (t != first+2) in parse_typeid_expr()
866 return first; in parse_typeid_expr()
868 first = t; in parse_typeid_expr()
871 return first; in parse_typeid_expr()
878 parse_throw_expr(const char* first, const char* last, C& db) in parse_throw_expr() argument
880 if (last - first >= 3 && first[0] == 't' && first[1] == 'w') in parse_throw_expr()
882 const char* t = parse_expression(first+2, last, db); in parse_throw_expr()
883 if (t != first+2) in parse_throw_expr()
886 return first; in parse_throw_expr()
888 first = t; in parse_throw_expr()
891 return first; in parse_throw_expr()
898 parse_dot_star_expr(const char* first, const char* last, C& db) in parse_dot_star_expr() argument
900 if (last - first >= 3 && first[0] == 'd' && first[1] == 's') in parse_dot_star_expr()
902 const char* t = parse_expression(first+2, last, db); in parse_dot_star_expr()
903 if (t != first+2) in parse_dot_star_expr()
909 return first; in parse_dot_star_expr()
912 db.names.back().first += ".*" + expr; in parse_dot_star_expr()
913 first = t1; in parse_dot_star_expr()
917 return first; in parse_dot_star_expr()
924 parse_simple_id(const char* first, const char* last, C& db) in parse_simple_id() argument
926 if (first != last) in parse_simple_id()
928 const char* t = parse_source_name(first, last, db); in parse_simple_id()
929 if (t != first) in parse_simple_id()
935 return first; in parse_simple_id()
938 db.names.back().first += std::move(args); in parse_simple_id()
940 first = t1; in parse_simple_id()
943 first = t; in parse_simple_id()
945 return first; in parse_simple_id()
954 parse_unresolved_type(const char* first, const char* last, C& db) in parse_unresolved_type() argument
956 if (first != last) in parse_unresolved_type()
958 const char* t = first; in parse_unresolved_type()
959 switch (*first) in parse_unresolved_type()
964 t = parse_template_param(first, last, db); in parse_unresolved_type()
966 if (t != first && k1 == k0 + 1) in parse_unresolved_type()
969 first = t; in parse_unresolved_type()
979 t = parse_decltype(first, last, db); in parse_unresolved_type()
980 if (t != first) in parse_unresolved_type()
983 return first; in parse_unresolved_type()
985 first = t; in parse_unresolved_type()
989 t = parse_substitution(first, last, db); in parse_unresolved_type()
990 if (t != first) in parse_unresolved_type()
991 first = t; in parse_unresolved_type()
994 if (last - first > 2 && first[1] == 't') in parse_unresolved_type()
996 t = parse_unqualified_name(first+2, last, db); in parse_unresolved_type()
997 if (t != first+2) in parse_unresolved_type()
1000 return first; in parse_unresolved_type()
1001 db.names.back().first.insert(0, "std::"); in parse_unresolved_type()
1003 first = t; in parse_unresolved_type()
1010 return first; in parse_unresolved_type()
1018 parse_destructor_name(const char* first, const char* last, C& db) in parse_destructor_name() argument
1020 if (first != last) in parse_destructor_name()
1022 const char* t = parse_unresolved_type(first, last, db); in parse_destructor_name()
1023 if (t == first) in parse_destructor_name()
1024 t = parse_simple_id(first, last, db); in parse_destructor_name()
1025 if (t != first) in parse_destructor_name()
1028 return first; in parse_destructor_name()
1029 db.names.back().first.insert(0, "~"); in parse_destructor_name()
1030 first = t; in parse_destructor_name()
1033 return first; in parse_destructor_name()
1046 parse_base_unresolved_name(const char* first, const char* last, C& db) in parse_base_unresolved_name() argument
1048 if (last - first >= 2) in parse_base_unresolved_name()
1050 if ((first[0] == 'o' || first[0] == 'd') && first[1] == 'n') in parse_base_unresolved_name()
1052 if (first[0] == 'o') in parse_base_unresolved_name()
1054 const char* t = parse_operator_name(first+2, last, db); in parse_base_unresolved_name()
1055 if (t != first+2) in parse_base_unresolved_name()
1057 first = parse_template_args(t, last, db); in parse_base_unresolved_name()
1058 if (first != t) in parse_base_unresolved_name()
1061 return first; in parse_base_unresolved_name()
1064 db.names.back().first += std::move(args); in parse_base_unresolved_name()
1070 const char* t = parse_destructor_name(first+2, last, db); in parse_base_unresolved_name()
1071 if (t != first+2) in parse_base_unresolved_name()
1072 first = t; in parse_base_unresolved_name()
1077 const char* t = parse_simple_id(first, last, db); in parse_base_unresolved_name()
1078 if (t == first) in parse_base_unresolved_name()
1080 t = parse_operator_name(first, last, db); in parse_base_unresolved_name()
1081 if (t != first) in parse_base_unresolved_name()
1083 first = parse_template_args(t, last, db); in parse_base_unresolved_name()
1084 if (first != t) in parse_base_unresolved_name()
1087 return first; in parse_base_unresolved_name()
1090 db.names.back().first += std::move(args); in parse_base_unresolved_name()
1095 first = t; in parse_base_unresolved_name()
1098 return first; in parse_base_unresolved_name()
1105 parse_unresolved_qualifier_level(const char* first, const char* last, C& db) in parse_unresolved_qualifier_level() argument
1107 return parse_simple_id(first, last, db); in parse_unresolved_qualifier_level()
1122 parse_unresolved_name(const char* first, const char* last, C& db) in parse_unresolved_name() argument
1124 if (last - first > 2) in parse_unresolved_name()
1126 const char* t = first; in parse_unresolved_name()
1139 return first; in parse_unresolved_name()
1140 db.names.back().first.insert(0, "::"); in parse_unresolved_name()
1142 first = t2; in parse_unresolved_name()
1151 return first; in parse_unresolved_name()
1157 return first; in parse_unresolved_name()
1160 db.names.back().first += std::move(args); in parse_unresolved_name()
1165 return first; in parse_unresolved_name()
1172 return first; in parse_unresolved_name()
1175 db.names.back().first += "::" + std::move(s); in parse_unresolved_name()
1184 return first; in parse_unresolved_name()
1187 return first; in parse_unresolved_name()
1190 db.names.back().first += "::" + std::move(s); in parse_unresolved_name()
1191 first = t1; in parse_unresolved_name()
1204 return first; in parse_unresolved_name()
1207 db.names.back().first += std::move(args); in parse_unresolved_name()
1215 return first; in parse_unresolved_name()
1218 return first; in parse_unresolved_name()
1221 db.names.back().first += "::" + std::move(s); in parse_unresolved_name()
1222 first = t1; in parse_unresolved_name()
1228 return first; in parse_unresolved_name()
1233 return first; in parse_unresolved_name()
1234 db.names.back().first.insert(0, "::"); in parse_unresolved_name()
1240 return first; in parse_unresolved_name()
1243 db.names.back().first += "::" + std::move(s); in parse_unresolved_name()
1252 return first; in parse_unresolved_name()
1255 return first; in parse_unresolved_name()
1258 db.names.back().first += "::" + std::move(s); in parse_unresolved_name()
1259 first = t1; in parse_unresolved_name()
1264 return first; in parse_unresolved_name()
1271 parse_dot_expr(const char* first, const char* last, C& db) in parse_dot_expr() argument
1273 if (last - first >= 3 && first[0] == 'd' && first[1] == 't') in parse_dot_expr()
1275 const char* t = parse_expression(first+2, last, db); in parse_dot_expr()
1276 if (t != first+2) in parse_dot_expr()
1282 return first; in parse_dot_expr()
1285 db.names.back().first += "." + name; in parse_dot_expr()
1286 first = t1; in parse_dot_expr()
1290 return first; in parse_dot_expr()
1297 parse_call_expr(const char* first, const char* last, C& db) in parse_call_expr() argument
1299 if (last - first >= 4 && first[0] == 'c' && first[1] == 'l') in parse_call_expr()
1301 const char* t = parse_expression(first+2, last, db); in parse_call_expr()
1302 if (t != first+2) in parse_call_expr()
1305 return first; in parse_call_expr()
1307 return first; in parse_call_expr()
1308 db.names.back().first += db.names.back().second; in parse_call_expr()
1310 db.names.back().first.append("("); in parse_call_expr()
1316 return first; in parse_call_expr()
1318 return first; in parse_call_expr()
1324 return first; in parse_call_expr()
1327 db.names.back().first.append(", "); in parse_call_expr()
1330 db.names.back().first.append(tmp); in parse_call_expr()
1336 return first; in parse_call_expr()
1337 db.names.back().first.append(")"); in parse_call_expr()
1338 first = t; in parse_call_expr()
1341 return first; in parse_call_expr()
1352 parse_new_expr(const char* first, const char* last, C& db) in parse_new_expr() argument
1354 if (last - first >= 4) in parse_new_expr()
1356 const char* t = first; in parse_new_expr()
1368 return first; in parse_new_expr()
1375 return first; in parse_new_expr()
1380 return first; in parse_new_expr()
1386 return first; in parse_new_expr()
1387 db.names.back().first.append(", "); in parse_new_expr()
1388 db.names.back().first.append(tmp); in parse_new_expr()
1397 return first; in parse_new_expr()
1409 return first; in parse_new_expr()
1413 return first; in parse_new_expr()
1419 return first; in parse_new_expr()
1420 db.names.back().first.append(", "); in parse_new_expr()
1421 db.names.back().first.append(tmp); in parse_new_expr()
1429 return first; in parse_new_expr()
1434 return first; in parse_new_expr()
1439 return first; in parse_new_expr()
1446 return first; in parse_new_expr()
1463 first = t+1; in parse_new_expr()
1466 return first; in parse_new_expr()
1474 parse_conversion_expr(const char* first, const char* last, C& db) in parse_conversion_expr() argument
1476 if (last - first >= 3 && first[0] == 'c' && first[1] == 'v') in parse_conversion_expr()
1480 const char* t = parse_type(first+2, last, db); in parse_conversion_expr()
1482 if (t != first+2 && t != last) in parse_conversion_expr()
1488 return first; in parse_conversion_expr()
1495 return first; in parse_conversion_expr()
1505 return first; in parse_conversion_expr()
1509 return first; in parse_conversion_expr()
1515 return first; in parse_conversion_expr()
1516 db.names.back().first.append(", "); in parse_conversion_expr()
1517 db.names.back().first.append(tmp); in parse_conversion_expr()
1527 return first; in parse_conversion_expr()
1531 first = t; in parse_conversion_expr()
1534 return first; in parse_conversion_expr()
1541 parse_arrow_expr(const char* first, const char* last, C& db) in parse_arrow_expr() argument
1543 if (last - first >= 3 && first[0] == 'p' && first[1] == 't') in parse_arrow_expr()
1545 const char* t = parse_expression(first+2, last, db); in parse_arrow_expr()
1546 if (t != first+2) in parse_arrow_expr()
1552 return first; in parse_arrow_expr()
1555 db.names.back().first += "->"; in parse_arrow_expr()
1556 db.names.back().first += tmp; in parse_arrow_expr()
1557 first = t1; in parse_arrow_expr()
1561 return first; in parse_arrow_expr()
1571 parse_function_type(const char* first, const char* last, C& db) in parse_function_type() argument
1573 if (first != last && *first == 'F') in parse_function_type()
1575 const char* t = first+1; in parse_function_type()
1583 return first; in parse_function_type()
1596 return first; in parse_function_type()
1624 return first; in parse_function_type()
1646 return first; in parse_function_type()
1647 db.names.back().first += " "; in parse_function_type()
1649 first = t; in parse_function_type()
1653 return first; in parse_function_type()
1660 parse_pointer_to_member_type(const char* first, const char* last, C& db) in parse_pointer_to_member_type() argument
1662 if (first != last && *first == 'M') in parse_pointer_to_member_type()
1664 const char* t = parse_type(first+1, last, db); in parse_pointer_to_member_type()
1665 if (t != first+1) in parse_pointer_to_member_type()
1671 return first; in parse_pointer_to_member_type()
1677 … db.names.back().first = std::move(func.first) + "(" + class_type.move_full() + "::*"; in parse_pointer_to_member_type()
1682 … db.names.back().first = std::move(func.first) + " " + class_type.move_full() + "::*"; in parse_pointer_to_member_type()
1685 first = t2; in parse_pointer_to_member_type()
1689 return first; in parse_pointer_to_member_type()
1697 parse_array_type(const char* first, const char* last, C& db) in parse_array_type() argument
1699 if (first != last && *first == 'A' && first+1 != last) in parse_array_type()
1701 if (first[1] == '_') in parse_array_type()
1703 const char* t = parse_type(first+2, last, db); in parse_array_type()
1704 if (t != first+2) in parse_array_type()
1707 return first; in parse_array_type()
1711 first = t; in parse_array_type()
1714 else if ('1' <= first[1] && first[1] <= '9') in parse_array_type()
1716 const char* t = parse_number(first+1, last); in parse_array_type()
1723 return first; in parse_array_type()
1726 db.names.back().second.insert(0, " [" + typename C::String(first+1, t) + "]"); in parse_array_type()
1727 first = t2; in parse_array_type()
1733 const char* t = parse_expression(first+1, last, db); in parse_array_type()
1734 if (t != first+1 && t != last && *t == '_') in parse_array_type()
1740 return first; in parse_array_type()
1744 db.names.back().first = std::move(type.first); in parse_array_type()
1748 first = t2; in parse_array_type()
1753 return first; in parse_array_type()
1761 parse_decltype(const char* first, const char* last, C& db) in parse_decltype() argument
1763 if (last - first >= 4 && first[0] == 'D') in parse_decltype()
1765 switch (first[1]) in parse_decltype()
1770 const char* t = parse_expression(first+2, last, db); in parse_decltype()
1771 if (t != first+2 && t != last && *t == 'E') in parse_decltype()
1774 return first; in parse_decltype()
1776 first = t+1; in parse_decltype()
1782 return first; in parse_decltype()
1794 parse_vector_type(const char* first, const char* last, C& db) in parse_vector_type() argument
1796 if (last - first > 3 && first[0] == 'D' && first[1] == 'v') in parse_vector_type()
1798 if ('1' <= first[2] && first[2] <= '9') in parse_vector_type()
1800 const char* t = parse_number(first+2, last); in parse_vector_type()
1802 return first; in parse_vector_type()
1803 const char* num = first + 2; in parse_vector_type()
1813 return first; in parse_vector_type()
1814 db.names.back().first += " vector[" + typename C::String(num, sz) + "]"; in parse_vector_type()
1815 first = t1; in parse_vector_type()
1822 first = t; in parse_vector_type()
1829 const char* t1 = first+2; in parse_vector_type()
1836 return first; in parse_vector_type()
1848 return first; in parse_vector_type()
1849 db.names.back().first += " vector[" + num + "]"; in parse_vector_type()
1850 first = t; in parse_vector_type()
1855 return first; in parse_vector_type()
1883 parse_type(const char* first, const char* last, C& db) in parse_type() argument
1885 if (first != last) in parse_type()
1887 switch (*first) in parse_type()
1894 const char* t = parse_cv_qualifiers(first, last, cv); in parse_type()
1895 if (t != first) in parse_type()
1931 db.names[k].first.append(" const"); in parse_type()
1933 db.names[k].first.append(" volatile"); in parse_type()
1935 db.names[k].first.append(" restrict"); in parse_type()
1939 first = t1; in parse_type()
1946 const char* t = parse_builtin_type(first, last, db); in parse_type()
1947 if (t != first) in parse_type()
1949 first = t; in parse_type()
1953 switch (*first) in parse_type()
1956 t = parse_array_type(first, last, db); in parse_type()
1957 if (t != first) in parse_type()
1960 return first; in parse_type()
1961 first = t; in parse_type()
1966 t = parse_type(first+1, last, db); in parse_type()
1967 if (t != first+1) in parse_type()
1970 return first; in parse_type()
1971 db.names.back().first.append(" complex"); in parse_type()
1972 first = t; in parse_type()
1977 t = parse_function_type(first, last, db); in parse_type()
1978 if (t != first) in parse_type()
1981 return first; in parse_type()
1982 first = t; in parse_type()
1987 t = parse_type(first+1, last, db); in parse_type()
1988 if (t != first+1) in parse_type()
1991 return first; in parse_type()
1992 db.names.back().first.append(" imaginary"); in parse_type()
1993 first = t; in parse_type()
1998 t = parse_pointer_to_member_type(first, last, db); in parse_type()
1999 if (t != first) in parse_type()
2002 return first; in parse_type()
2003 first = t; in parse_type()
2010 t = parse_type(first+1, last, db); in parse_type()
2012 if (t != first+1) in parse_type()
2019 db.names[k].first += " ("; in parse_type()
2024 db.names[k].first += "("; in parse_type()
2027 db.names[k].first.append("&&"); in parse_type()
2030 first = t; in parse_type()
2037 t = parse_type(first+1, last, db); in parse_type()
2039 if (t != first+1) in parse_type()
2046 db.names[k].first += " ("; in parse_type()
2051 db.names[k].first += "("; in parse_type()
2054 … if (first[1] != 'U' || db.names[k].first.substr(0, 12) != "objc_object<") in parse_type()
2056 db.names[k].first.append("*"); in parse_type()
2060 db.names[k].first.replace(0, 11, "id"); in parse_type()
2064 first = t; in parse_type()
2071 t = parse_type(first+1, last, db); in parse_type()
2073 if (t != first+1) in parse_type()
2080 db.names[k].first += " ("; in parse_type()
2085 db.names[k].first += "("; in parse_type()
2088 db.names[k].first.append("&"); in parse_type()
2091 first = t; in parse_type()
2098 t = parse_template_param(first, last, db); in parse_type()
2100 if (t != first) in parse_type()
2112 db.names.back().first += std::move(args); in parse_type()
2117 first = t; in parse_type()
2122 if (first+1 != last) in parse_type()
2124 t = parse_source_name(first+1, last, db); in parse_type()
2125 if (t != first+1) in parse_type()
2131 return first; in parse_type()
2134 if (db.names.back().first.substr(0, 9) != "objcproto") in parse_type()
2153 first = t2; in parse_type()
2159 if (first+1 != last && first[1] == 't') in parse_type()
2161 t = parse_name(first, last, db); in parse_type()
2162 if (t != first) in parse_type()
2165 return first; in parse_type()
2167 first = t; in parse_type()
2172 t = parse_substitution(first, last, db); in parse_type()
2173 if (t != first) in parse_type()
2175 first = t; in parse_type()
2178 t = parse_template_args(first, last, db); in parse_type()
2179 if (t != first) in parse_type()
2182 return first; in parse_type()
2185 db.names.back().first += template_args; in parse_type()
2188 first = t; in parse_type()
2194 if (first+1 != last) in parse_type()
2196 switch (first[1]) in parse_type()
2201 t = parse_type(first+2, last, db); in parse_type()
2203 if (t != first+2) in parse_type()
2208 first = t; in parse_type()
2209 return first; in parse_type()
2215 t = parse_decltype(first, last, db); in parse_type()
2216 if (t != first) in parse_type()
2219 return first; in parse_type()
2221 first = t; in parse_type()
2222 return first; in parse_type()
2226 t = parse_vector_type(first, last, db); in parse_type()
2227 if (t != first) in parse_type()
2230 return first; in parse_type()
2232 first = t; in parse_type()
2233 return first; in parse_type()
2242 t = parse_builtin_type(first, last, db); in parse_type()
2243 if (t != first) in parse_type()
2245 first = t; in parse_type()
2249 t = parse_name(first, last, db); in parse_type()
2250 if (t != first) in parse_type()
2253 return first; in parse_type()
2255 first = t; in parse_type()
2265 return first; in parse_type()
2322 parse_operator_name(const char* first, const char* last, C& db) in parse_operator_name() argument
2324 if (last - first >= 2) in parse_operator_name()
2326 switch (first[0]) in parse_operator_name()
2329 switch (first[1]) in parse_operator_name()
2333 first += 2; in parse_operator_name()
2338 first += 2; in parse_operator_name()
2342 first += 2; in parse_operator_name()
2346 first += 2; in parse_operator_name()
2351 switch (first[1]) in parse_operator_name()
2355 first += 2; in parse_operator_name()
2359 first += 2; in parse_operator_name()
2363 first += 2; in parse_operator_name()
2369 const char* t = parse_type(first+2, last, db); in parse_operator_name()
2371 if (t != first+2) in parse_operator_name()
2374 return first; in parse_operator_name()
2375 db.names.back().first.insert(0, "operator "); in parse_operator_name()
2377 first = t; in parse_operator_name()
2384 switch (first[1]) in parse_operator_name()
2388 first += 2; in parse_operator_name()
2392 first += 2; in parse_operator_name()
2396 first += 2; in parse_operator_name()
2400 first += 2; in parse_operator_name()
2404 first += 2; in parse_operator_name()
2409 switch (first[1]) in parse_operator_name()
2413 first += 2; in parse_operator_name()
2417 first += 2; in parse_operator_name()
2421 first += 2; in parse_operator_name()
2426 switch (first[1]) in parse_operator_name()
2430 first += 2; in parse_operator_name()
2434 first += 2; in parse_operator_name()
2439 if (first[1] == 'x') in parse_operator_name()
2442 first += 2; in parse_operator_name()
2446 switch (first[1]) in parse_operator_name()
2450 first += 2; in parse_operator_name()
2454 const char* t = parse_source_name(first+2, last, db); in parse_operator_name()
2455 if (t != first+2) in parse_operator_name()
2458 return first; in parse_operator_name()
2459 db.names.back().first.insert(0, "operator\"\" "); in parse_operator_name()
2460 first = t; in parse_operator_name()
2466 first += 2; in parse_operator_name()
2470 first += 2; in parse_operator_name()
2474 first += 2; in parse_operator_name()
2479 switch (first[1]) in parse_operator_name()
2483 first += 2; in parse_operator_name()
2487 first += 2; in parse_operator_name()
2491 first += 2; in parse_operator_name()
2495 first += 2; in parse_operator_name()
2499 first += 2; in parse_operator_name()
2504 switch (first[1]) in parse_operator_name()
2508 first += 2; in parse_operator_name()
2512 first += 2; in parse_operator_name()
2516 first += 2; in parse_operator_name()
2520 first += 2; in parse_operator_name()
2524 first += 2; in parse_operator_name()
2529 switch (first[1]) in parse_operator_name()
2533 first += 2; in parse_operator_name()
2537 first += 2; in parse_operator_name()
2541 first += 2; in parse_operator_name()
2546 switch (first[1]) in parse_operator_name()
2550 first += 2; in parse_operator_name()
2554 first += 2; in parse_operator_name()
2558 first += 2; in parse_operator_name()
2562 first += 2; in parse_operator_name()
2566 first += 2; in parse_operator_name()
2570 first += 2; in parse_operator_name()
2575 if (first[1] == 'u') in parse_operator_name()
2578 first += 2; in parse_operator_name()
2582 switch (first[1]) in parse_operator_name()
2586 first += 2; in parse_operator_name()
2590 first += 2; in parse_operator_name()
2594 first += 2; in parse_operator_name()
2598 first += 2; in parse_operator_name()
2603 if (std::isdigit(first[1])) in parse_operator_name()
2605 const char* t = parse_source_name(first+2, last, db); in parse_operator_name()
2606 if (t != first+2) in parse_operator_name()
2609 return first; in parse_operator_name()
2610 db.names.back().first.insert(0, "operator "); in parse_operator_name()
2611 first = t; in parse_operator_name()
2617 return first; in parse_operator_name()
2622 parse_integer_literal(const char* first, const char* last, const typename C::String& lit, C& db) in parse_integer_literal() argument
2624 const char* t = parse_number(first, last); in parse_integer_literal()
2625 if (t != first && t != last && *t == 'E') in parse_integer_literal()
2631 if (*first == 'n') in parse_integer_literal()
2633 db.names.back().first += '-'; in parse_integer_literal()
2634 ++first; in parse_integer_literal()
2636 db.names.back().first.append(first, t); in parse_integer_literal()
2638 db.names.back().first += lit; in parse_integer_literal()
2639 first = t+1; in parse_integer_literal()
2641 return first; in parse_integer_literal()
2653 parse_expr_primary(const char* first, const char* last, C& db) in parse_expr_primary() argument
2655 if (last - first >= 4 && *first == 'L') in parse_expr_primary()
2657 switch (first[1]) in parse_expr_primary()
2661 const char* t = parse_integer_literal(first+2, last, "wchar_t", db); in parse_expr_primary()
2662 if (t != first+2) in parse_expr_primary()
2663 first = t; in parse_expr_primary()
2667 if (first[3] == 'E') in parse_expr_primary()
2669 switch (first[2]) in parse_expr_primary()
2673 first += 4; in parse_expr_primary()
2677 first += 4; in parse_expr_primary()
2684 const char* t = parse_integer_literal(first+2, last, "char", db); in parse_expr_primary()
2685 if (t != first+2) in parse_expr_primary()
2686 first = t; in parse_expr_primary()
2691 const char* t = parse_integer_literal(first+2, last, "signed char", db); in parse_expr_primary()
2692 if (t != first+2) in parse_expr_primary()
2693 first = t; in parse_expr_primary()
2698 const char* t = parse_integer_literal(first+2, last, "unsigned char", db); in parse_expr_primary()
2699 if (t != first+2) in parse_expr_primary()
2700 first = t; in parse_expr_primary()
2705 const char* t = parse_integer_literal(first+2, last, "short", db); in parse_expr_primary()
2706 if (t != first+2) in parse_expr_primary()
2707 first = t; in parse_expr_primary()
2712 const char* t = parse_integer_literal(first+2, last, "unsigned short", db); in parse_expr_primary()
2713 if (t != first+2) in parse_expr_primary()
2714 first = t; in parse_expr_primary()
2719 const char* t = parse_integer_literal(first+2, last, "", db); in parse_expr_primary()
2720 if (t != first+2) in parse_expr_primary()
2721 first = t; in parse_expr_primary()
2726 const char* t = parse_integer_literal(first+2, last, "u", db); in parse_expr_primary()
2727 if (t != first+2) in parse_expr_primary()
2728 first = t; in parse_expr_primary()
2733 const char* t = parse_integer_literal(first+2, last, "l", db); in parse_expr_primary()
2734 if (t != first+2) in parse_expr_primary()
2735 first = t; in parse_expr_primary()
2740 const char* t = parse_integer_literal(first+2, last, "ul", db); in parse_expr_primary()
2741 if (t != first+2) in parse_expr_primary()
2742 first = t; in parse_expr_primary()
2747 const char* t = parse_integer_literal(first+2, last, "ll", db); in parse_expr_primary()
2748 if (t != first+2) in parse_expr_primary()
2749 first = t; in parse_expr_primary()
2754 const char* t = parse_integer_literal(first+2, last, "ull", db); in parse_expr_primary()
2755 if (t != first+2) in parse_expr_primary()
2756 first = t; in parse_expr_primary()
2761 const char* t = parse_integer_literal(first+2, last, "__int128", db); in parse_expr_primary()
2762 if (t != first+2) in parse_expr_primary()
2763 first = t; in parse_expr_primary()
2768 const char* t = parse_integer_literal(first+2, last, "unsigned __int128", db); in parse_expr_primary()
2769 if (t != first+2) in parse_expr_primary()
2770 first = t; in parse_expr_primary()
2775 const char* t = parse_floating_number<float>(first+2, last, db); in parse_expr_primary()
2776 if (t != first+2) in parse_expr_primary()
2777 first = t; in parse_expr_primary()
2782 const char* t = parse_floating_number<double>(first+2, last, db); in parse_expr_primary()
2783 if (t != first+2) in parse_expr_primary()
2784 first = t; in parse_expr_primary()
2789 const char* t = parse_floating_number<long double>(first+2, last, db); in parse_expr_primary()
2790 if (t != first+2) in parse_expr_primary()
2791 first = t; in parse_expr_primary()
2795 if (first[2] == 'Z') in parse_expr_primary()
2797 const char* t = parse_encoding(first+3, last, db); in parse_expr_primary()
2798 if (t != first+3 && t != last && *t == 'E') in parse_expr_primary()
2799 first = t+1; in parse_expr_primary()
2809 const char* t = parse_type(first+1, last, db); in parse_expr_primary()
2810 if (t != first+1 && t != last) in parse_expr_primary()
2820 return first; in parse_expr_primary()
2822 first = n+1; in parse_expr_primary()
2828 first = t+1; in parse_expr_primary()
2835 return first; in parse_expr_primary()
2908 parse_ctor_dtor_name(const char* first, const char* last, C& db) in parse_ctor_dtor_name() argument
2910 if (last-first >= 2 && !db.names.empty()) in parse_ctor_dtor_name()
2912 switch (first[0]) in parse_ctor_dtor_name()
2915 switch (first[1]) in parse_ctor_dtor_name()
2922 return first; in parse_ctor_dtor_name()
2923 db.names.push_back(base_name(db.names.back().first)); in parse_ctor_dtor_name()
2924 first += 2; in parse_ctor_dtor_name()
2930 switch (first[1]) in parse_ctor_dtor_name()
2937 return first; in parse_ctor_dtor_name()
2938 db.names.push_back("~" + base_name(db.names.back().first)); in parse_ctor_dtor_name()
2939 first += 2; in parse_ctor_dtor_name()
2946 return first; in parse_ctor_dtor_name()
2958 parse_unnamed_type_name(const char* first, const char* last, C& db) in parse_unnamed_type_name() argument
2960 if (last - first > 2 && first[0] == 'U') in parse_unnamed_type_name()
2962 char type = first[1]; in parse_unnamed_type_name()
2968 const char* t0 = first+2; in parse_unnamed_type_name()
2972 return first; in parse_unnamed_type_name()
2979 db.names.back().first.append(t0, t1); in parse_unnamed_type_name()
2982 db.names.back().first.push_back('\''); in parse_unnamed_type_name()
2986 return first; in parse_unnamed_type_name()
2988 first = t0 + 1; in parse_unnamed_type_name()
2994 const char* t0 = first+2; in parse_unnamed_type_name()
2995 if (first[2] == 'v') in parse_unnamed_type_name()
2997 db.names.back().first += ')'; in parse_unnamed_type_name()
3006 return first; in parse_unnamed_type_name()
3009 return first; in parse_unnamed_type_name()
3012 db.names.back().first.append(tmp); in parse_unnamed_type_name()
3020 return first; in parse_unnamed_type_name()
3025 db.names.back().first.append(", "); in parse_unnamed_type_name()
3026 db.names.back().first.append(tmp); in parse_unnamed_type_name()
3030 db.names.back().first.append(")"); in parse_unnamed_type_name()
3035 return first; in parse_unnamed_type_name()
3041 return first; in parse_unnamed_type_name()
3048 db.names.back().first.insert(db.names.back().first.begin()+7, t0, t1); in parse_unnamed_type_name()
3054 return first; in parse_unnamed_type_name()
3056 first = t0 + 1; in parse_unnamed_type_name()
3061 return first; in parse_unnamed_type_name()
3071 parse_unqualified_name(const char* first, const char* last, C& db) in parse_unqualified_name() argument
3073 if (first != last) in parse_unqualified_name()
3076 switch (*first) in parse_unqualified_name()
3080 t = parse_ctor_dtor_name(first, last, db); in parse_unqualified_name()
3081 if (t != first) in parse_unqualified_name()
3082 first = t; in parse_unqualified_name()
3085 t = parse_unnamed_type_name(first, last, db); in parse_unqualified_name()
3086 if (t != first) in parse_unqualified_name()
3087 first = t; in parse_unqualified_name()
3098 t = parse_source_name(first, last, db); in parse_unqualified_name()
3099 if (t != first) in parse_unqualified_name()
3100 first = t; in parse_unqualified_name()
3103 t = parse_operator_name(first, last, db); in parse_unqualified_name()
3104 if (t != first) in parse_unqualified_name()
3105 first = t; in parse_unqualified_name()
3109 return first; in parse_unqualified_name()
3118 parse_unscoped_name(const char* first, const char* last, C& db) in parse_unscoped_name() argument
3120 if (last - first >= 2) in parse_unscoped_name()
3122 const char* t0 = first; in parse_unscoped_name()
3124 if (first[0] == 'S' && first[1] == 't') in parse_unscoped_name()
3137 return first; in parse_unscoped_name()
3138 db.names.back().first.insert(0, "std::"); in parse_unscoped_name()
3140 first = t1; in parse_unscoped_name()
3143 return first; in parse_unscoped_name()
3150 parse_alignof_type(const char* first, const char* last, C& db) in parse_alignof_type() argument
3152 if (last - first >= 3 && first[0] == 'a' && first[1] == 't') in parse_alignof_type()
3154 const char* t = parse_type(first+2, last, db); in parse_alignof_type()
3155 if (t != first+2) in parse_alignof_type()
3158 return first; in parse_alignof_type()
3159 db.names.back().first = "alignof (" + db.names.back().move_full() + ")"; in parse_alignof_type()
3160 first = t; in parse_alignof_type()
3163 return first; in parse_alignof_type()
3170 parse_alignof_expr(const char* first, const char* last, C& db) in parse_alignof_expr() argument
3172 if (last - first >= 3 && first[0] == 'a' && first[1] == 'z') in parse_alignof_expr()
3174 const char* t = parse_expression(first+2, last, db); in parse_alignof_expr()
3175 if (t != first+2) in parse_alignof_expr()
3178 return first; in parse_alignof_expr()
3179 db.names.back().first = "alignof (" + db.names.back().move_full() + ")"; in parse_alignof_expr()
3180 first = t; in parse_alignof_expr()
3183 return first; in parse_alignof_expr()
3188 parse_noexcept_expression(const char* first, const char* last, C& db) in parse_noexcept_expression() argument
3190 const char* t1 = parse_expression(first, last, db); in parse_noexcept_expression()
3191 if (t1 != first) in parse_noexcept_expression()
3194 return first; in parse_noexcept_expression()
3195 db.names.back().first = "noexcept (" + db.names.back().move_full() + ")"; in parse_noexcept_expression()
3196 first = t1; in parse_noexcept_expression()
3198 return first; in parse_noexcept_expression()
3203 parse_prefix_expression(const char* first, const char* last, const typename C::String& op, C& db) in parse_prefix_expression() argument
3205 const char* t1 = parse_expression(first, last, db); in parse_prefix_expression()
3206 if (t1 != first) in parse_prefix_expression()
3209 return first; in parse_prefix_expression()
3210 db.names.back().first = op + "(" + db.names.back().move_full() + ")"; in parse_prefix_expression()
3211 first = t1; in parse_prefix_expression()
3213 return first; in parse_prefix_expression()
3218 parse_binary_expression(const char* first, const char* last, const typename C::String& op, C& db) in parse_binary_expression() argument
3220 const char* t1 = parse_expression(first, last, db); in parse_binary_expression()
3221 if (t1 != first) in parse_binary_expression()
3227 return first; in parse_binary_expression()
3231 auto& nm = db.names.back().first; in parse_binary_expression()
3238 first = t2; in parse_binary_expression()
3243 return first; in parse_binary_expression()
3288 parse_expression(const char* first, const char* last, C& db) in parse_expression() argument
3290 if (last - first >= 2) in parse_expression()
3292 const char* t = first; in parse_expression()
3294 if (last - first >= 4 && t[0] == 'g' && t[1] == 's') in parse_expression()
3302 first = parse_expr_primary(first, last, db); in parse_expression()
3305 first = parse_template_param(first, last, db); in parse_expression()
3308 first = parse_function_param(first, last, db); in parse_expression()
3314 t = parse_binary_expression(first+2, last, "&&", db); in parse_expression()
3315 if (t != first+2) in parse_expression()
3316 first = t; in parse_expression()
3319 t = parse_prefix_expression(first+2, last, "&", db); in parse_expression()
3320 if (t != first+2) in parse_expression()
3321 first = t; in parse_expression()
3324 t = parse_binary_expression(first+2, last, "&", db); in parse_expression()
3325 if (t != first+2) in parse_expression()
3326 first = t; in parse_expression()
3329 t = parse_binary_expression(first+2, last, "&=", db); in parse_expression()
3330 if (t != first+2) in parse_expression()
3331 first = t; in parse_expression()
3334 t = parse_binary_expression(first+2, last, "=", db); in parse_expression()
3335 if (t != first+2) in parse_expression()
3336 first = t; in parse_expression()
3339 first = parse_alignof_type(first, last, db); in parse_expression()
3342 first = parse_alignof_expr(first, last, db); in parse_expression()
3350 first = parse_const_cast_expr(first, last, db); in parse_expression()
3353 first = parse_call_expr(first, last, db); in parse_expression()
3356 t = parse_binary_expression(first+2, last, ",", db); in parse_expression()
3357 if (t != first+2) in parse_expression()
3358 first = t; in parse_expression()
3361 t = parse_prefix_expression(first+2, last, "~", db); in parse_expression()
3362 if (t != first+2) in parse_expression()
3363 first = t; in parse_expression()
3366 first = parse_conversion_expr(first, last, db); in parse_expression()
3379 return first; in parse_expression()
3380 … db.names.back().first = (parsed_gs ? typename C::String("::") : typename C::String()) + in parse_expression()
3382 first = t1; in parse_expression()
3387 first = parse_dynamic_cast_expr(first, last, db); in parse_expression()
3390 t = parse_prefix_expression(first+2, last, "*", db); in parse_expression()
3391 if (t != first+2) in parse_expression()
3392 first = t; in parse_expression()
3400 return first; in parse_expression()
3401 … db.names.back().first = (parsed_gs ? typename C::String("::") : typename C::String()) + in parse_expression()
3403 first = t1; in parse_expression()
3408 return parse_unresolved_name(first, last, db); in parse_expression()
3410 first = parse_dot_star_expr(first, last, db); in parse_expression()
3413 first = parse_dot_expr(first, last, db); in parse_expression()
3416 t = parse_binary_expression(first+2, last, "/", db); in parse_expression()
3417 if (t != first+2) in parse_expression()
3418 first = t; in parse_expression()
3421 t = parse_binary_expression(first+2, last, "/=", db); in parse_expression()
3422 if (t != first+2) in parse_expression()
3423 first = t; in parse_expression()
3431 t = parse_binary_expression(first+2, last, "^", db); in parse_expression()
3432 if (t != first+2) in parse_expression()
3433 first = t; in parse_expression()
3436 t = parse_binary_expression(first+2, last, "^=", db); in parse_expression()
3437 if (t != first+2) in parse_expression()
3438 first = t; in parse_expression()
3441 t = parse_binary_expression(first+2, last, "==", db); in parse_expression()
3442 if (t != first+2) in parse_expression()
3443 first = t; in parse_expression()
3451 t = parse_binary_expression(first+2, last, ">=", db); in parse_expression()
3452 if (t != first+2) in parse_expression()
3453 first = t; in parse_expression()
3456 t = parse_binary_expression(first+2, last, ">", db); in parse_expression()
3457 if (t != first+2) in parse_expression()
3458 first = t; in parse_expression()
3465 const char* t1 = parse_expression(first+2, last, db); in parse_expression()
3466 if (t1 != first+2) in parse_expression()
3472 return first; in parse_expression()
3477 first = t2; in parse_expression()
3488 t = parse_binary_expression(first+2, last, "<=", db); in parse_expression()
3489 if (t != first+2) in parse_expression()
3490 first = t; in parse_expression()
3493 t = parse_binary_expression(first+2, last, "<<", db); in parse_expression()
3494 if (t != first+2) in parse_expression()
3495 first = t; in parse_expression()
3498 t = parse_binary_expression(first+2, last, "<<=", db); in parse_expression()
3499 if (t != first+2) in parse_expression()
3500 first = t; in parse_expression()
3503 t = parse_binary_expression(first+2, last, "<", db); in parse_expression()
3504 if (t != first+2) in parse_expression()
3505 first = t; in parse_expression()
3513 t = parse_binary_expression(first+2, last, "-", db); in parse_expression()
3514 if (t != first+2) in parse_expression()
3515 first = t; in parse_expression()
3518 t = parse_binary_expression(first+2, last, "-=", db); in parse_expression()
3519 if (t != first+2) in parse_expression()
3520 first = t; in parse_expression()
3523 t = parse_binary_expression(first+2, last, "*", db); in parse_expression()
3524 if (t != first+2) in parse_expression()
3525 first = t; in parse_expression()
3528 t = parse_binary_expression(first+2, last, "*=", db); in parse_expression()
3529 if (t != first+2) in parse_expression()
3530 first = t; in parse_expression()
3533 if (first+2 != last && first[2] == '_') in parse_expression()
3535 t = parse_prefix_expression(first+3, last, "--", db); in parse_expression()
3536 if (t != first+3) in parse_expression()
3537 first = t; in parse_expression()
3541 const char* t1 = parse_expression(first+2, last, db); in parse_expression()
3542 if (t1 != first+2) in parse_expression()
3545 return first; in parse_expression()
3547 first = t1; in parse_expression()
3558 first = parse_new_expr(first, last, db); in parse_expression()
3561 t = parse_binary_expression(first+2, last, "!=", db); in parse_expression()
3562 if (t != first+2) in parse_expression()
3563 first = t; in parse_expression()
3566 t = parse_prefix_expression(first+2, last, "-", db); in parse_expression()
3567 if (t != first+2) in parse_expression()
3568 first = t; in parse_expression()
3571 t = parse_prefix_expression(first+2, last, "!", db); in parse_expression()
3572 if (t != first+2) in parse_expression()
3573 first = t; in parse_expression()
3576 t = parse_noexcept_expression(first+2, last, db); in parse_expression()
3577 if (t != first+2) in parse_expression()
3578 first = t; in parse_expression()
3586 return parse_unresolved_name(first, last, db); in parse_expression()
3588 t = parse_binary_expression(first+2, last, "||", db); in parse_expression()
3589 if (t != first+2) in parse_expression()
3590 first = t; in parse_expression()
3593 t = parse_binary_expression(first+2, last, "|", db); in parse_expression()
3594 if (t != first+2) in parse_expression()
3595 first = t; in parse_expression()
3598 t = parse_binary_expression(first+2, last, "|=", db); in parse_expression()
3599 if (t != first+2) in parse_expression()
3600 first = t; in parse_expression()
3608 t = parse_binary_expression(first+2, last, "->*", db); in parse_expression()
3609 if (t != first+2) in parse_expression()
3610 first = t; in parse_expression()
3613 t = parse_binary_expression(first+2, last, "+", db); in parse_expression()
3614 if (t != first+2) in parse_expression()
3615 first = t; in parse_expression()
3618 t = parse_binary_expression(first+2, last, "+=", db); in parse_expression()
3619 if (t != first+2) in parse_expression()
3620 first = t; in parse_expression()
3623 if (first+2 != last && first[2] == '_') in parse_expression()
3625 t = parse_prefix_expression(first+3, last, "++", db); in parse_expression()
3626 if (t != first+3) in parse_expression()
3627 first = t; in parse_expression()
3631 const char* t1 = parse_expression(first+2, last, db); in parse_expression()
3632 if (t1 != first+2) in parse_expression()
3635 return first; in parse_expression()
3637 first = t1; in parse_expression()
3642 t = parse_prefix_expression(first+2, last, "+", db); in parse_expression()
3643 if (t != first+2) in parse_expression()
3644 first = t; in parse_expression()
3647 first = parse_arrow_expr(first, last, db); in parse_expression()
3654 const char* t1 = parse_expression(first+2, last, db); in parse_expression()
3655 if (t1 != first+2) in parse_expression()
3664 return first; in parse_expression()
3671 first = t3; in parse_expression()
3688 first = parse_reinterpret_cast_expr(first, last, db); in parse_expression()
3691 t = parse_binary_expression(first+2, last, "%", db); in parse_expression()
3692 if (t != first+2) in parse_expression()
3693 first = t; in parse_expression()
3696 t = parse_binary_expression(first+2, last, "%=", db); in parse_expression()
3697 if (t != first+2) in parse_expression()
3698 first = t; in parse_expression()
3701 t = parse_binary_expression(first+2, last, ">>", db); in parse_expression()
3702 if (t != first+2) in parse_expression()
3703 first = t; in parse_expression()
3706 t = parse_binary_expression(first+2, last, ">>=", db); in parse_expression()
3707 if (t != first+2) in parse_expression()
3708 first = t; in parse_expression()
3716 first = parse_static_cast_expr(first, last, db); in parse_expression()
3719 first = parse_pack_expansion(first, last, db); in parse_expression()
3722 return parse_unresolved_name(first, last, db); in parse_expression()
3724 first = parse_sizeof_type_expr(first, last, db); in parse_expression()
3727 first = parse_sizeof_expr_expr(first, last, db); in parse_expression()
3735 first = parse_sizeof_param_pack_expr(first, last, db); in parse_expression()
3738 first = parse_sizeof_function_param_pack_expr(first, last, db); in parse_expression()
3750 first = parse_typeid_expr(first, last, db); in parse_expression()
3754 first += 2; in parse_expression()
3757 first = parse_throw_expr(first, last, db); in parse_expression()
3770 return parse_unresolved_name(first, last, db); in parse_expression()
3773 return first; in parse_expression()
3784 parse_template_arg(const char* first, const char* last, C& db) in parse_template_arg() argument
3786 if (first != last) in parse_template_arg()
3789 switch (*first) in parse_template_arg()
3792 t = parse_expression(first+1, last, db); in parse_template_arg()
3793 if (t != first+1) in parse_template_arg()
3796 first = t+1; in parse_template_arg()
3800 t = first+1; in parse_template_arg()
3802 return first; in parse_template_arg()
3807 return first; in parse_template_arg()
3810 first = t+1; in parse_template_arg()
3814 if (first+1 != last && first[1] == 'Z') in parse_template_arg()
3816 t = parse_encoding(first+2, last, db); in parse_template_arg()
3817 if (t != first+2 && t != last && *t == 'E') in parse_template_arg()
3818 first = t+1; in parse_template_arg()
3821 first = parse_expr_primary(first, last, db); in parse_template_arg()
3825 first = parse_type(first, last, db); in parse_template_arg()
3829 return first; in parse_template_arg()
3837 parse_template_args(const char* first, const char* last, C& db) in parse_template_args() argument
3839 if (last - first >= 2 && *first == 'I') in parse_template_args()
3843 const char* t = first+1; in parse_template_args()
3855 return first; in parse_template_args()
3872 first = t + 1; in parse_template_args()
3880 return first; in parse_template_args()
3901 parse_nested_name(const char* first, const char* last, C& db, in parse_nested_name() argument
3904 if (first != last && *first == 'N') in parse_nested_name()
3907 const char* t0 = parse_cv_qualifiers(first+1, last, cv); in parse_nested_name()
3909 return first; in parse_nested_name()
3925 db.names.back().first = "std"; in parse_nested_name()
3930 return first; in parse_nested_name()
3948 if (!db.names.back().first.empty()) in parse_nested_name()
3950 db.names.back().first += "::" + name; in parse_nested_name()
3954 db.names.back().first = name; in parse_nested_name()
3959 return first; in parse_nested_name()
3967 if (!db.names.back().first.empty()) in parse_nested_name()
3968 db.names.back().first += "::" + name; in parse_nested_name()
3970 db.names.back().first = name; in parse_nested_name()
3976 return first; in parse_nested_name()
3986 if (!db.names.back().first.empty()) in parse_nested_name()
3987 db.names.back().first += "::" + name; in parse_nested_name()
3989 db.names.back().first = name; in parse_nested_name()
3995 return first; in parse_nested_name()
4003 db.names.back().first += name; in parse_nested_name()
4009 return first; in parse_nested_name()
4013 return first; in parse_nested_name()
4022 if (!db.names.back().first.empty()) in parse_nested_name()
4023 db.names.back().first += "::" + name; in parse_nested_name()
4025 db.names.back().first = name; in parse_nested_name()
4031 return first; in parse_nested_name()
4034 first = t0 + 1; in parse_nested_name()
4041 return first; in parse_nested_name()
4049 parse_discriminator(const char* first, const char* last) in parse_discriminator() argument
4052 if (first != last) in parse_discriminator()
4054 if (*first == '_') in parse_discriminator()
4056 const char* t1 = first+1; in parse_discriminator()
4060 first = t1+1; in parse_discriminator()
4066 first = t1 + 1; in parse_discriminator()
4070 else if (std::isdigit(*first)) in parse_discriminator()
4072 const char* t1 = first+1; in parse_discriminator()
4075 first = t1; in parse_discriminator()
4078 return first; in parse_discriminator()
4087 parse_local_name(const char* first, const char* last, C& db, in parse_local_name() argument
4090 if (first != last && *first == 'Z') in parse_local_name()
4092 const char* t = parse_encoding(first+1, last, db); in parse_local_name()
4093 if (t != first+1 && t != last && *t == 'E' && ++t != last) in parse_local_name()
4098 first = parse_discriminator(t+1, last); in parse_local_name()
4100 return first; in parse_local_name()
4101 db.names.back().first.append("::string literal"); in parse_local_name()
4115 return first; in parse_local_name()
4118 db.names.back().first.append("::"); in parse_local_name()
4119 db.names.back().first.append(name); in parse_local_name()
4120 first = t1; in parse_local_name()
4134 first = parse_discriminator(t1, last); in parse_local_name()
4136 return first; in parse_local_name()
4139 db.names.back().first.append("::"); in parse_local_name()
4140 db.names.back().first.append(name); in parse_local_name()
4149 return first; in parse_local_name()
4162 parse_name(const char* first, const char* last, C& db, in parse_name() argument
4165 if (last - first >= 2) in parse_name()
4167 const char* t0 = first; in parse_name()
4178 first = t1; in parse_name()
4186 first = t1; in parse_name()
4197 return first; in parse_name()
4204 return first; in parse_name()
4207 db.names.back().first += tmp; in parse_name()
4208 first = t1; in parse_name()
4214 first = t1; in parse_name()
4226 return first; in parse_name()
4229 db.names.back().first += tmp; in parse_name()
4230 first = t1; in parse_name()
4240 return first; in parse_name()
4253 parse_call_offset(const char* first, const char* last) in parse_call_offset() argument
4255 if (first != last) in parse_call_offset()
4257 switch (*first) in parse_call_offset()
4261 const char* t = parse_number(first + 1, last); in parse_call_offset()
4262 if (t != first + 1 && t != last && *t == '_') in parse_call_offset()
4263 first = t + 1; in parse_call_offset()
4268 const char* t = parse_number(first + 1, last); in parse_call_offset()
4269 if (t != first + 1 && t != last && *t == '_') in parse_call_offset()
4273 first = t2 + 1; in parse_call_offset()
4279 return first; in parse_call_offset()
4299 parse_special_name(const char* first, const char* last, C& db) in parse_special_name() argument
4301 if (last - first > 2) in parse_special_name()
4304 switch (*first) in parse_special_name()
4307 switch (first[1]) in parse_special_name()
4311 t = parse_type(first+2, last, db); in parse_special_name()
4312 if (t != first+2) in parse_special_name()
4315 return first; in parse_special_name()
4316 db.names.back().first.insert(0, "vtable for "); in parse_special_name()
4317 first = t; in parse_special_name()
4322 t = parse_type(first+2, last, db); in parse_special_name()
4323 if (t != first+2) in parse_special_name()
4326 return first; in parse_special_name()
4327 db.names.back().first.insert(0, "VTT for "); in parse_special_name()
4328 first = t; in parse_special_name()
4333 t = parse_type(first+2, last, db); in parse_special_name()
4334 if (t != first+2) in parse_special_name()
4337 return first; in parse_special_name()
4338 db.names.back().first.insert(0, "typeinfo for "); in parse_special_name()
4339 first = t; in parse_special_name()
4344 t = parse_type(first+2, last, db); in parse_special_name()
4345 if (t != first+2) in parse_special_name()
4348 return first; in parse_special_name()
4349 db.names.back().first.insert(0, "typeinfo name for "); in parse_special_name()
4350 first = t; in parse_special_name()
4356 const char* t0 = parse_call_offset(first+2, last); in parse_special_name()
4357 if (t0 == first+2) in parse_special_name()
4366 return first; in parse_special_name()
4367 db.names.back().first.insert(0, "covariant return thunk to "); in parse_special_name()
4368 first = t; in parse_special_name()
4374 t = parse_type(first+2, last, db); in parse_special_name()
4375 if (t != first+2) in parse_special_name()
4384 return first; in parse_special_name()
4387 db.names.back().first = "construction vtable for " + in parse_special_name()
4390 first = t1; in parse_special_name()
4398 const char* t0 = parse_call_offset(first+1, last); in parse_special_name()
4399 if (t0 == first+1) in parse_special_name()
4405 return first; in parse_special_name()
4406 if (first[2] == 'v') in parse_special_name()
4408 db.names.back().first.insert(0, "virtual thunk to "); in parse_special_name()
4409 first = t; in parse_special_name()
4413 db.names.back().first.insert(0, "non-virtual thunk to "); in parse_special_name()
4414 first = t; in parse_special_name()
4422 switch (first[1]) in parse_special_name()
4426 t = parse_name(first+2, last, db); in parse_special_name()
4427 if (t != first+2) in parse_special_name()
4430 return first; in parse_special_name()
4431 db.names.back().first.insert(0, "guard variable for "); in parse_special_name()
4432 first = t; in parse_special_name()
4437 t = parse_name(first+2, last, db); in parse_special_name()
4438 if (t != first+2) in parse_special_name()
4441 return first; in parse_special_name()
4442 db.names.back().first.insert(0, "reference temporary for "); in parse_special_name()
4443 first = t; in parse_special_name()
4450 return first; in parse_special_name()
4479 parse_encoding(const char* first, const char* last, C& db) in parse_encoding() argument
4481 if (first != last) in parse_encoding()
4488 switch (*first) in parse_encoding()
4492 first = parse_special_name(first, last, db); in parse_encoding()
4497 const char* t = parse_name(first, last, db, in parse_encoding()
4501 if (t != first) in parse_encoding()
4510 return first; in parse_encoding()
4511 const typename C::String& nm = db.names.back().first; in parse_encoding()
4513 return first; in parse_encoding()
4518 return first; in parse_encoding()
4520 return first; in parse_encoding()
4521 auto ret1 = std::move(db.names.back().first); in parse_encoding()
4526 db.names.back().first.insert(0, ret1); in parse_encoding()
4529 db.names.back().first += '('; in parse_encoding()
4558 return first; in parse_encoding()
4560 db.names.back().first += ", "; in parse_encoding()
4563 db.names.back().first += tmp; in parse_encoding()
4570 return first; in parse_encoding()
4571 db.names.back().first += ')'; in parse_encoding()
4573 db.names.back().first.append(" const"); in parse_encoding()
4575 db.names.back().first.append(" volatile"); in parse_encoding()
4577 db.names.back().first.append(" restrict"); in parse_encoding()
4579 db.names.back().first.append(" &"); in parse_encoding()
4581 db.names.back().first.append(" &&"); in parse_encoding()
4582 db.names.back().first += ret2; in parse_encoding()
4583 first = t; in parse_encoding()
4586 first = t; in parse_encoding()
4592 return first; in parse_encoding()
4601 parse_block_invoke(const char* first, const char* last, C& db) in parse_block_invoke() argument
4603 if (last - first >= 13) in parse_block_invoke()
4606 const char* t = first; in parse_block_invoke()
4610 return first; in parse_block_invoke()
4618 return first; in parse_block_invoke()
4626 return first; in parse_block_invoke()
4627 db.names.back().first.insert(0, "invocation function for block in "); in parse_block_invoke()
4628 first = t; in parse_block_invoke()
4630 return first; in parse_block_invoke()
4638 parse_dot_suffix(const char* first, const char* last, C& db) in parse_dot_suffix() argument
4640 if (first != last && *first == '.') in parse_dot_suffix()
4643 return first; in parse_dot_suffix()
4644 db.names.back().first += " (" + typename C::String(first, last) + ")"; in parse_dot_suffix()
4645 first = last; in parse_dot_suffix()
4647 return first; in parse_dot_suffix()
4658 demangle(const char* first, const char* last, C& db, int& status) in demangle() argument
4660 if (first >= last) in demangle()
4665 if (*first == '_') in demangle()
4667 if (last - first >= 4) in demangle()
4669 if (first[1] == 'Z') in demangle()
4671 const char* t = parse_encoding(first+2, last, db); in demangle()
4672 if (t != first+2 && t != last && *t == '.') in demangle()
4677 else if (first[1] == '_' && first[2] == '_' && first[3] == 'Z') in demangle()
4679 const char* t = parse_encoding(first+4, last, db); in demangle()
4680 if (t != first+4 && t != last) in demangle()
4697 const char* t = parse_type(first, last, db); in demangle()
4854 StrT first; member
4858 string_pair(StrT f) : first(std::move(f)) {} in string_pair()
4860 : first(std::move(f)), second(std::move(s)) {} in string_pair()
4862 string_pair(const char (&s)[N]) : first(s, N-1) {} in string_pair()
4864 size_t size() const {return first.size() + second.size();} in size()
4865 StrT full() const {return first + second;} in full()
4866 StrT move_full() {return std::move(first) + std::move(second);} in move_full()
4953 db.names.back().first += db.names.back().second; in __cxa_demangle()
4954 std::memcpy(buf, db.names.back().first.data(), sz-1); in __cxa_demangle()