Lines Matching refs:db

47 			longjmp(db->cpp_jmp, 1);	\
52 #define TOP_L(db) (&(name_top(&(db)->cpp_name)->strp_l)) argument
54 #define NAMT(db, n) (nlen(db) - n) argument
162 cpp_db_t db; in cpp_demangle() local
164 db_init(&db, ops); in cpp_demangle()
166 if (setjmp(db.cpp_jmp) != 0) in cpp_demangle()
170 demangle(src, src + srclen, &db); in cpp_demangle()
172 if (errno == 0 && db.cpp_fix_forward_references && in cpp_demangle()
173 !templ_empty(&db.cpp_templ) && in cpp_demangle()
174 !sub_empty(&db.cpp_templ.tpl_items[0])) { in cpp_demangle()
175 db.cpp_fix_forward_references = B_FALSE; in cpp_demangle()
176 db.cpp_tag_templates = B_FALSE; in cpp_demangle()
177 name_clear(&db.cpp_name); in cpp_demangle()
178 sub_clear(&db.cpp_subs); in cpp_demangle()
180 if (setjmp(db.cpp_jmp) != 0) in cpp_demangle()
183 demangle(src, src + srclen, &db); in cpp_demangle()
185 if (db.cpp_fix_forward_references) { in cpp_demangle()
194 if (nempty(&db)) { in cpp_demangle()
199 njoin(&db, 1, ""); in cpp_demangle()
201 if (nlen(&db) > 0) { in cpp_demangle()
202 str_t *s = TOP_L(&db); in cpp_demangle()
213 dump(&db, stdout); in cpp_demangle()
215 db_fini(&db); in cpp_demangle()
220 demangle(const char *first, const char *last, cpp_db_t *db) in demangle() argument
230 t = parse_type(first, last, db); in demangle()
244 t = parse_encoding(first + 2, last, db); in demangle()
247 t = parse_dot_suffix(t, last, db); in demangle()
248 if (nlen(db) > 1) in demangle()
249 njoin(db, 2, ""); in demangle()
258 t = parse_encoding(first + 4, last, db); in demangle()
260 t = parse_block_invoke(t, last, db); in demangle()
268 parse_dot_suffix(const char *first, const char *last, cpp_db_t *db) in parse_dot_suffix() argument
275 if (nempty(db)) in parse_dot_suffix()
278 nadd_l(db, first, RLEN(first, last)); in parse_dot_suffix()
279 nfmt(db, " ({0})", NULL); in parse_dot_suffix()
290 parse_block_invoke(const char *first, const char *last, cpp_db_t *db) in parse_block_invoke() argument
318 if (nempty(db)) in parse_block_invoke()
321 nfmt(db, "invocation function for block in {0}", NULL); in parse_block_invoke()
331 parse_encoding(const char *first, const char *last, cpp_db_t *db) in parse_encoding() argument
342 boolean_t tag_templ_save = db->cpp_tag_templates; in parse_encoding()
344 if (++db->cpp_depth > 1) in parse_encoding()
345 db->cpp_tag_templates = B_TRUE; in parse_encoding()
348 t = parse_special_name(first, last, db); in parse_encoding()
353 t = parse_name(first, last, &ends_with_template_args, db); in parse_encoding()
357 cv = db->cpp_cv; in parse_encoding()
358 ref = db->cpp_ref; in parse_encoding()
363 db->cpp_tag_templates = B_FALSE; in parse_encoding()
364 if (nempty(db) || str_length(TOP_L(db)) == 0) in parse_encoding()
367 if (!db->cpp_parsed_ctor_dtor_cv && ends_with_template_args) { in parse_encoding()
368 t2 = parse_type(t, last, db); in parse_encoding()
369 if (t2 == t || nlen(db) < 2) in parse_encoding()
372 str_pair_t *sp = name_top(&db->cpp_name); in parse_encoding()
377 nfmt(db, "{0:L}{1:L}", "{1:R}{0:R}"); in parse_encoding()
381 if (t == last || nempty(db)) in parse_encoding()
384 size_t n = nlen(db); in parse_encoding()
390 t2 = parse_type(t, last, db); in parse_encoding()
403 if (NAMT(db, n) > 1 && str_pair_len(name_top(&db->cpp_name)) == 0) in parse_encoding()
404 name_pop(&db->cpp_name, NULL); in parse_encoding()
406 njoin(db, NAMT(db, n), ", "); in parse_encoding()
407 nfmt(db, "({0})", NULL); in parse_encoding()
409 str_t *s = TOP_L(db); in parse_encoding()
427 nfmt(db, "{1:L}{0}{1:R}", NULL); in parse_encoding()
430 db->cpp_tag_templates = tag_templ_save; in parse_encoding()
431 db->cpp_depth--; in parse_encoding()
435 db->cpp_tag_templates = tag_templ_save; in parse_encoding()
436 db->cpp_depth--; in parse_encoding()
460 parse_special_name(const char *first, const char *last, cpp_db_t *db) in parse_special_name() argument
466 size_t n = nlen(db); in parse_special_name()
475 nadd_l(db, "vtable for", 0); in parse_special_name()
476 t = parse_type(first + 2, last, db); in parse_special_name()
479 nadd_l(db, "VTT for", 0); in parse_special_name()
480 t = parse_type(first + 2, last, db); in parse_special_name()
483 nadd_l(db, "typeinfo for", 0); in parse_special_name()
484 t = parse_type(first + 2, last, db); in parse_special_name()
487 nadd_l(db, "typeinfo name for", 0); in parse_special_name()
488 t = parse_type(first + 2, last, db); in parse_special_name()
491 nadd_l(db, "covariant return thunk to", 0); in parse_special_name()
498 t1 = parse_encoding(t, last, db); in parse_special_name()
503 t = parse_type(first + 2, last, db); in parse_special_name()
509 t = parse_type(t1 + 1, last, db); in parse_special_name()
510 if (t == t1 + 1 || nlen(db) < 2) in parse_special_name()
512 nfmt(db, "construction vtable for {0}-in-{1}", NULL); in parse_special_name()
515 nadd_l(db, "thread-local wrapper routine for", 0); in parse_special_name()
516 t = parse_name(first + 2, last, NULL, db); in parse_special_name()
519 nadd_l(db, "thread-local initialization routine for", in parse_special_name()
521 t = parse_name(first + 2, last, NULL, db); in parse_special_name()
525 nadd_l(db, "virtual thunk to", 0); in parse_special_name()
527 nadd_l(db, "non-virtual thunk to", 0); in parse_special_name()
533 t1 = parse_encoding(t, last, db); in parse_special_name()
543 nadd_l(db, "guard variable for", 0); in parse_special_name()
544 t = parse_name(first + 2, last, NULL, db); in parse_special_name()
547 nadd_l(db, "reference temporary for", 0); in parse_special_name()
548 t = parse_name(first + 2, last, NULL, db); in parse_special_name()
558 size_t amt = NAMT(db, n); in parse_special_name()
562 njoin(db, amt, " "); in parse_special_name()
621 boolean_t *ends_with_template_args, cpp_db_t *db) in parse_name() argument
637 t1 = parse_nested_name(t, last, ends_with_template_args, db); in parse_name()
640 t1 = parse_local_name(t, last, ends_with_template_args, db); in parse_name()
649 t1 = parse_unscoped_name(t, last, db); in parse_name()
656 t1 = parse_substitution(t, last, db); in parse_name()
660 save_top(db, 1); in parse_name()
663 t = parse_template_args(t1, last, db); in parse_name()
664 if (t1 == t || nlen(db) < 2) in parse_name()
667 nfmt(db, "{1:L}{0}", "{1:R}"); in parse_name()
684 boolean_t *ends_with_template_args, cpp_db_t *db) in parse_local_name() argument
695 t = parse_encoding(first + 1, last, db); in parse_local_name()
699 VERIFY(!nempty(db)); in parse_local_name()
705 nfmt(db, "{0:L}::string literal", "{0:R}"); in parse_local_name()
718 t2 = parse_name(t1, last, ends_with_template_args, db); in parse_local_name()
722 nfmt(db, "{1:L}::{0}", "{1:R}"); in parse_local_name()
752 boolean_t *ends_with_template_args, cpp_db_t *db) in parse_nested_name() argument
769 db->cpp_ref = 1; in parse_nested_name()
773 db->cpp_ref = 2; in parse_nested_name()
781 nadd_l(db, "std", 3); in parse_nested_name()
792 size_t n = nlen(db); in parse_nested_name()
800 t1 = parse_substitution(t, last, db); in parse_nested_name()
801 if (t1 == t || t1 == last || NAMT(db, n) != 1) in parse_nested_name()
805 nfmt(db, "{0}", NULL); in parse_nested_name()
807 VERIFY3U(nlen(db), >, 1); in parse_nested_name()
808 nfmt(db, "{1:L}::{0}", "{1:R}"); in parse_nested_name()
809 save_top(db, 1); in parse_nested_name()
818 t1 = parse_template_param(t, last, db); in parse_nested_name()
819 if (t1 == t || t1 == last || NAMT(db, n) != 1) in parse_nested_name()
823 nfmt(db, "{0}", NULL); in parse_nested_name()
825 VERIFY3U(nlen(db), >, 1); in parse_nested_name()
826 nfmt(db, "{1:L}::{0}", "{1:R}"); in parse_nested_name()
829 save_top(db, 1); in parse_nested_name()
838 t1 = parse_decltype(t, last, db); in parse_nested_name()
839 if (t1 == t || t1 == last || NAMT(db, n) != 1) in parse_nested_name()
843 nfmt(db, "{0}", NULL); in parse_nested_name()
845 VERIFY3U(nlen(db), >, 1); in parse_nested_name()
846 nfmt(db, "{1:L}::{0}", "{1:R}"); in parse_nested_name()
849 save_top(db, 1); in parse_nested_name()
863 t1 = parse_template_args(t, last, db); in parse_nested_name()
867 VERIFY3U(nlen(db), >, 1); in parse_nested_name()
868 nfmt(db, "{1:L}{0}", "{1:R}"); in parse_nested_name()
869 save_top(db, 1); in parse_nested_name()
884 t1 = parse_unqualified_name(t, last, db); in parse_nested_name()
885 if (t1 == t || t1 == last || NAMT(db, n) != 1) in parse_nested_name()
889 nfmt(db, "{0}", NULL); in parse_nested_name()
891 VERIFY3U(nlen(db), >, 1); in parse_nested_name()
892 nfmt(db, "{1:L}::{0}", "{1:R}"); in parse_nested_name()
895 save_top(db, 1); in parse_nested_name()
905 db->cpp_cv = cv; in parse_nested_name()
906 if (pop_subs && !sub_empty(&db->cpp_subs)) in parse_nested_name()
907 sub_pop(&db->cpp_subs); in parse_nested_name()
926 parse_template_arg(const char *first, const char *last, cpp_db_t *db) in parse_template_arg() argument
938 t = parse_expression(first + 1, last, db); in parse_template_arg()
952 t1 = parse_template_arg(t, last, db); in parse_template_arg()
964 t = parse_expr_primary(first, last, db); in parse_template_arg()
966 t = parse_encoding(first + 2, last, db); in parse_template_arg()
976 t = parse_type(first, last, db); in parse_template_arg()
1126 parse_expression(const char *first, const char *last, cpp_db_t *db) in parse_expression() argument
1139 expr_tbl[i].val, db)); in parse_expression()
1142 db)); in parse_expression()
1148 return (parse_expr_primary(first, last, db)); in parse_expression()
1150 return (parse_template_param(first, last, db)); in parse_expression()
1152 return (parse_function_param(first, last, db)); in parse_expression()
1162 return (parse_unresolved_name(first, last, db)); in parse_expression()
1170 cpp_db_t *db) in parse_binary_expr() argument
1177 size_t n = nlen(db); in parse_binary_expr()
1179 const char *t1 = parse_expression(first + 2, last, db); in parse_binary_expr()
1183 nadd_l(db, op, 0); in parse_binary_expr()
1185 const char *t2 = parse_expression(t1, last, db); in parse_binary_expr()
1189 if (NAMT(db, n) != 3) in parse_binary_expr()
1192 VERIFY3U(nlen(db), >, 2); in parse_binary_expr()
1194 nfmt(db, "({2}) {1} ({0})", NULL); in parse_binary_expr()
1196 nfmt(db, "({0})", NULL); in parse_binary_expr()
1203 cpp_db_t *db) in parse_prefix_expr() argument
1210 nadd_l(db, op, 0); in parse_prefix_expr()
1212 const char *t = parse_expression(first + 2, last, db); in parse_prefix_expr()
1217 VERIFY3U(nlen(db), >, 1); in parse_prefix_expr()
1219 nfmt(db, "{1}({0})", NULL); in parse_prefix_expr()
1224 parse_gs(const char *first, const char *last, cpp_db_t *db) in parse_gs() argument
1234 t = parse_new_expr(first + 2, last, db); in parse_gs()
1236 t = parse_del_expr(first + 2, last, db); in parse_gs()
1243 VERIFY3U(nlen(db), >, 0); in parse_gs()
1245 nfmt(db, "::{0}", NULL); in parse_gs()
1257 parse_new_expr(const char *first, const char *last, cpp_db_t *db) in parse_new_expr() argument
1270 size_t n = nlen(db); in parse_new_expr()
1272 nadd_l(db, (first[1] == 'w') ? "new" : "new[]", 0); in parse_new_expr()
1275 t2 = parse_expression(t1, last, db); in parse_new_expr()
1284 if (NAMT(db, n) > 1) { in parse_new_expr()
1285 njoin(db, NAMT(db, n) - 1, ", "); in parse_new_expr()
1286 nfmt(db, "({0})", NULL); in parse_new_expr()
1289 t2 = parse_type(t1 + 1, last, db); in parse_new_expr()
1301 size_t n1 = nlen(db); in parse_new_expr()
1304 t3 = parse_expression(t2, last, db); in parse_new_expr()
1313 if (NAMT(db, n1) > 0) { in parse_new_expr()
1314 njoin(db, NAMT(db, n1), ", "); in parse_new_expr()
1315 nfmt(db, "({0})", NULL); in parse_new_expr()
1319 njoin(db, NAMT(db, n), " "); in parse_new_expr()
1324 parse_del_expr(const char *first, const char *last, cpp_db_t *db) in parse_del_expr() argument
1334 size_t n = nlen(db); in parse_del_expr()
1335 const char *t = parse_expression(first + 2, last, db); in parse_del_expr()
1336 if (t == first + 2 || NAMT(db, n) != 1) in parse_del_expr()
1339 nfmt(db, (first[1] == 'a') ? "delete[] {0}" : "delete {0}", NULL); in parse_del_expr()
1344 parse_idx_expr(const char *first, const char *last, cpp_db_t *db) in parse_idx_expr() argument
1350 size_t n = nlen(db); in parse_idx_expr()
1351 const char *t1 = parse_expression(first + 2, last, db); in parse_idx_expr()
1355 const char *t2 = parse_expression(t1, last, db); in parse_idx_expr()
1356 if (t2 == t1 || NAMT(db, n) != 2) in parse_idx_expr()
1359 nfmt(db, "({0})[{1}]", NULL); in parse_idx_expr()
1365 cpp_db_t *db) in parse_ppmm_expr() argument
1373 size_t n = nlen(db); in parse_ppmm_expr()
1376 t = parse_binary_expr(first + 3, last, "--", db); in parse_ppmm_expr()
1382 t = parse_expression(first + 2, last, db); in parse_ppmm_expr()
1383 if (t == first + 2 || NAMT(db, n) < 1) in parse_ppmm_expr()
1386 nfmt(db, fmt, NULL); in parse_ppmm_expr()
1391 parse_mm_expr(const char *first, const char *last, cpp_db_t *db) in parse_mm_expr() argument
1397 return (parse_ppmm_expr(first, last, "({0})--", db)); in parse_mm_expr()
1401 parse_pp_expr(const char *first, const char *last, cpp_db_t *db) in parse_pp_expr() argument
1408 return (parse_ppmm_expr(first, last, "({0})++", db)); in parse_pp_expr()
1412 parse_trinary_expr(const char *first, const char *last, cpp_db_t *db) in parse_trinary_expr() argument
1417 size_t n = nlen(db); in parse_trinary_expr()
1422 t1 = parse_expression(first + 2, last, db); in parse_trinary_expr()
1425 t2 = parse_expression(t1, last, db); in parse_trinary_expr()
1428 t3 = parse_expression(t2, last, db); in parse_trinary_expr()
1432 if (NAMT(db, n) != 3) in parse_trinary_expr()
1435 nfmt(db, "({2}) ? ({1}) : ({0})", NULL); in parse_trinary_expr()
1440 parse_noexcept_expr(const char *first, const char *last, cpp_db_t *db) in parse_noexcept_expr() argument
1447 size_t n = nlen(db); in parse_noexcept_expr()
1448 const char *t = parse_expression(first + 2, last, db); in parse_noexcept_expr()
1449 if (t == first + 2 || NAMT(db, n) != 1) in parse_noexcept_expr()
1452 nfmt(db, "noexcept ({0})", NULL); in parse_noexcept_expr()
1463 parse_cast_expr(const char *first, const char *last, cpp_db_t *db) in parse_cast_expr() argument
1490 const char *t1 = parse_type(first + 2, last, db); in parse_cast_expr()
1494 const char *t2 = parse_expression(t1, last, db); in parse_cast_expr()
1498 VERIFY3U(nlen(db), >, 1); in parse_cast_expr()
1500 nfmt(db, fmt, NULL); in parse_cast_expr()
1506 parse_arrow_expr(const char *first, const char *last, cpp_db_t *db) in parse_arrow_expr() argument
1513 size_t n = nlen(db); in parse_arrow_expr()
1515 const char *t1 = parse_expression(first + 2, last, db); in parse_arrow_expr()
1519 const char *t2 = parse_expression(t1, last, db); in parse_arrow_expr()
1520 if (t2 == t1 || NAMT(db, n) != 2) in parse_arrow_expr()
1523 nfmt(db, "{1}->{0}", NULL); in parse_arrow_expr()
1571 parse_type(const char *first, const char *last, cpp_db_t *db) in parse_type() argument
1582 return (parse_qual_type(first, last, db)); in parse_type()
1588 size_t n = nlen(db); in parse_type()
1591 t = parse_builtin_type(first, last, db); in parse_type()
1597 t = parse_array_type(first, last, db); in parse_type()
1598 if (t == first || NAMT(db, n) == 0) in parse_type()
1600 save_top(db, 1); in parse_type()
1604 t = parse_type(first + 1, last, db); in parse_type()
1605 if (t == first + 1 || NAMT(db, n) == 0) in parse_type()
1608 (void) str_append(TOP_L(db), " complex", 8); in parse_type()
1609 save_top(db, 1); in parse_type()
1613 t = parse_function_type(first, last, db); in parse_type()
1614 if (t == first || NAMT(db, n) == 0) in parse_type()
1616 save_top(db, 1); in parse_type()
1620 t = parse_type(first + 1, last, db); in parse_type()
1621 if (t == first + 1 || NAMT(db, n) == 0) in parse_type()
1624 (void) str_append(TOP_L(db), " imaginary", 10); in parse_type()
1625 save_top(db, 1); in parse_type()
1629 t = parse_pointer_to_member_type(first, last, db); in parse_type()
1630 if (t == first || NAMT(db, n) == 0) in parse_type()
1632 save_top(db, 1); in parse_type()
1636 t = parse_type(first + 1, last, db); in parse_type()
1637 amt = NAMT(db, n); in parse_type()
1641 sp = name_at(&db->cpp_name, amt - 1); in parse_type()
1648 save_top(db, amt); in parse_type()
1652 t = parse_type(first + 1, last, db); in parse_type()
1653 amt = NAMT(db, n); in parse_type()
1657 sp = name_at(&db->cpp_name, amt - 1); in parse_type()
1673 save_top(db, amt); in parse_type()
1677 t = parse_type(first + 1, last, db); in parse_type()
1678 amt = NAMT(db, n); in parse_type()
1682 sp = name_at(&db->cpp_name, amt - 1); in parse_type()
1692 save_top(db, amt); in parse_type()
1696 t = parse_template_param(first, last, db); in parse_type()
1700 amt = NAMT(db, n); in parse_type()
1701 save_top(db, amt); in parse_type()
1702 if (!db->cpp_try_to_parse_template_args || amt != 1) in parse_type()
1705 t1 = parse_template_args(t, last, db); in parse_type()
1709 nfmt(db, "{1:L}{0}", "{1:R}"); in parse_type()
1710 save_top(db, 1); in parse_type()
1717 t = parse_source_name(first + 1, last, db); in parse_type()
1721 nfmt(db, "{0}", NULL); in parse_type()
1723 t1 = parse_type(t, last, db); in parse_type()
1724 if (t1 == t || NAMT(db, n) < 2) in parse_type()
1727 const str_t *name = &name_at(&db->cpp_name, 1)->strp_l; in parse_type()
1731 nfmt(db, "{0} {1}", NULL); in parse_type()
1734 name->str_s + name->str_len, db); in parse_type()
1736 nfmt(db, "{1}<{0}>", NULL); in parse_type()
1740 name_pop(&db->cpp_name, &save); in parse_type()
1743 name_pop(&db->cpp_name, NULL); in parse_type()
1744 CK(name_add_str(&db->cpp_name, &save.strp_l, in parse_type()
1747 nfmt(db, "{1} {0}", NULL); in parse_type()
1751 save_top(db, 1); in parse_type()
1756 t = parse_name(first, last, NULL, db); in parse_type()
1757 if (t == first || NAMT(db, n) == 0) in parse_type()
1760 save_top(db, 1); in parse_type()
1764 t = parse_substitution(first, last, db); in parse_type()
1772 t1 = parse_template_args(t, last, db); in parse_type()
1776 if (NAMT(db, n) < 2) in parse_type()
1779 nfmt(db, "{1:L}{0}", "{1:R}"); in parse_type()
1780 save_top(db, 1); in parse_type()
1789 t = parse_type(first + 2, last, db); in parse_type()
1793 save_top(db, NAMT(db, n)); in parse_type()
1798 t = parse_decltype(first, last, db); in parse_type()
1802 save_top(db, 1); in parse_type()
1806 t = parse_vector_type(first, last, db); in parse_type()
1810 if (NAMT(db, n) == 0) in parse_type()
1813 save_top(db, 1); in parse_type()
1823 t = parse_builtin_type(first, last, db); in parse_type()
1827 t = parse_name(first, last, NULL, db); in parse_type()
1828 if (t == first || NAMT(db, n) == 0) in parse_type()
1831 save_top(db, 1); in parse_type()
1836 parse_qual_type(const char *first, const char *last, cpp_db_t *db) in parse_qual_type() argument
1848 size_t n = nlen(db); in parse_qual_type()
1851 t1 = parse_type(t, last, db); in parse_qual_type()
1852 size_t amt = NAMT(db, n); in parse_qual_type()
1857 sub_pop(&db->cpp_subs); in parse_qual_type()
1859 str_pair_t *sp = name_at(&db->cpp_name, amt - 1); in parse_qual_type()
1902 save_top(db, amt); in parse_qual_type()
1911 parse_alignof(const char *first, const char *last, cpp_db_t *db) in parse_alignof() argument
1922 size_t n = nlen(db); in parse_alignof()
1923 const char *t = fn(first + 2, last, db); in parse_alignof()
1924 if (t == first + 2 || NAMT(db, n) != 1) in parse_alignof()
1927 nfmt(db, "alignof ({0})", NULL); in parse_alignof()
1936 parse_sizeof(const char *first, const char *last, cpp_db_t *db) in parse_sizeof() argument
1946 size_t n = nlen(db); in parse_sizeof()
1950 t = parse_type(first + 2, last, db); in parse_sizeof()
1953 t = parse_expression(first + 2, last, db); in parse_sizeof()
1958 if (t == first + 2 || NAMT(db, n) != 1) in parse_sizeof()
1961 nfmt(db, "sizeof ({0})", NULL); in parse_sizeof()
1974 parse_function_param(const char *first, const char *last, cpp_db_t *db) in parse_function_param() argument
2001 nadd_l(db, t1, (size_t)(t2 - t1)); in parse_function_param()
2003 nadd_l(db, "", 0); in parse_function_param()
2005 nfmt(db, "fp{0}", NULL); in parse_function_param()
2014 parse_sizeof_param_pack_expr(const char *first, const char *last, cpp_db_t *db) in parse_sizeof_param_pack_expr() argument
2028 size_t n = nlen(db); in parse_sizeof_param_pack_expr()
2031 t = parse_template_param(first + 2, last, db); in parse_sizeof_param_pack_expr()
2033 t = parse_function_param(first + 2, last, db); in parse_sizeof_param_pack_expr()
2038 njoin(db, NAMT(db, n), ", "); in parse_sizeof_param_pack_expr()
2039 nfmt(db, "sizeof...({0})", NULL); in parse_sizeof_param_pack_expr()
2048 parse_typeid_expr(const char *first, const char *last, cpp_db_t *db) in parse_typeid_expr() argument
2059 size_t n = nlen(db); in parse_typeid_expr()
2062 t = parse_expression(first + 2, last, db); in parse_typeid_expr()
2064 t = parse_type(first + 2, last, db); in parse_typeid_expr()
2066 if (t == first + 2 || NAMT(db, n) != 1) in parse_typeid_expr()
2069 nfmt(db, "typeid ({0})", NULL); in parse_typeid_expr()
2078 parse_throw_expr(const char *first, const char *last, cpp_db_t *db) in parse_throw_expr() argument
2089 nadd_l(db, "throw", 0); in parse_throw_expr()
2093 size_t n = nlen(db); in parse_throw_expr()
2094 const char *t = parse_expression(first + 2, last, db); in parse_throw_expr()
2095 if (t == first + 2 || NAMT(db, n) != 1) in parse_throw_expr()
2098 nfmt(db, "throw {0}", NULL); in parse_throw_expr()
2104 parse_dot_star_expr(const char *first, const char *last, cpp_db_t *db) in parse_dot_star_expr() argument
2114 size_t n = nlen(db); in parse_dot_star_expr()
2115 const char *t = parse_expression(first + 2, last, db); in parse_dot_star_expr()
2119 const char *t2 = parse_expression(t, last, db); in parse_dot_star_expr()
2120 if (t == t2 || NAMT(db, n) != 2) in parse_dot_star_expr()
2123 nfmt(db, "{1}.*{0}", NULL); in parse_dot_star_expr()
2129 parse_dot_expr(const char *first, const char *last, cpp_db_t *db) in parse_dot_expr() argument
2139 const char *t = parse_expression(first + 2, last, db); in parse_dot_expr()
2143 const char *t1 = parse_unresolved_name(t, last, db); in parse_dot_expr()
2147 nfmt(db, "{1}.{0}", NULL); in parse_dot_expr()
2153 parse_call_expr(const char *first, const char *last, cpp_db_t *db) in parse_call_expr() argument
2165 size_t n = nlen(db); in parse_call_expr()
2168 t1 = parse_expression(t, last, db); in parse_call_expr()
2173 size_t amt = NAMT(db, n); in parse_call_expr()
2178 njoin(db, amt - 1, ", "); in parse_call_expr()
2179 nfmt(db, "{1}({0})", NULL); in parse_call_expr()
2192 parse_conv_expr(const char *first, const char *last, cpp_db_t *db) in parse_conv_expr() argument
2204 size_t n = nlen(db); in parse_conv_expr()
2207 db->cpp_try_to_parse_template_args; in parse_conv_expr()
2209 db->cpp_try_to_parse_template_args = B_FALSE; in parse_conv_expr()
2210 t = parse_type(first + 2, last, db); in parse_conv_expr()
2211 db->cpp_try_to_parse_template_args = try_to_parse_template_args; in parse_conv_expr()
2217 t1 = parse_expression(t, last, db); in parse_conv_expr()
2223 size_t n1 = nlen(db); in parse_conv_expr()
2228 t1 = parse_expression(t, last, db); in parse_conv_expr()
2237 njoin(db, NAMT(db, n1), ", "); in parse_conv_expr()
2240 if (NAMT(db, n) < 2) in parse_conv_expr()
2243 nfmt(db, "({1})({0})", NULL); in parse_conv_expr()
2249 parse_simple_id(const char *first, const char *last, cpp_db_t *db) in parse_simple_id() argument
2253 const char *t = parse_source_name(first, last, db); in parse_simple_id()
2257 const char *t1 = parse_template_args(t, last, db); in parse_simple_id()
2261 nfmt(db, "{1}{0}", NULL); in parse_simple_id()
2271 parse_unresolved_type(const char *first, const char *last, cpp_db_t *db) in parse_unresolved_type() argument
2279 size_t n = nlen(db); in parse_unresolved_type()
2283 t = parse_template_param(first, last, db); in parse_unresolved_type()
2284 if (t == first || NAMT(db, n) != 1) { in parse_unresolved_type()
2285 for (size_t i = 0; i < NAMT(db, n); i++) in parse_unresolved_type()
2286 name_pop(&db->cpp_name, NULL); in parse_unresolved_type()
2289 save_top(db, 1); in parse_unresolved_type()
2293 t = parse_decltype(first, last, db); in parse_unresolved_type()
2294 if (t == first || NAMT(db, n) == 0) in parse_unresolved_type()
2296 save_top(db, 1); in parse_unresolved_type()
2300 t = parse_substitution(first, last, db); in parse_unresolved_type()
2307 t = parse_unqualified_name(first + 2, last, db); in parse_unresolved_type()
2308 if (t == first + 2 || NAMT(db, n) == 0) in parse_unresolved_type()
2311 nfmt(db, "std::{0:L}", "{0:R}"); in parse_unresolved_type()
2312 save_top(db, 1); in parse_unresolved_type()
2321 parse_pack_expansion(const char *first, const char *last, cpp_db_t *db) in parse_pack_expansion() argument
2331 const char *t = parse_expression(first + 2, last, db); in parse_pack_expansion()
2344 parse_unscoped_name(const char *first, const char *last, cpp_db_t *db) in parse_unscoped_name() argument
2363 t1 = parse_unqualified_name(t, last, db); in parse_unscoped_name()
2368 nfmt(db, "std::{0}", NULL); in parse_unscoped_name()
2380 parse_unqualified_name(const char *first, const char *last, cpp_db_t *db) in parse_unqualified_name() argument
2390 return (parse_ctor_dtor_name(first, last, db)); in parse_unqualified_name()
2392 return (parse_unnamed_type_name(first, last, db)); in parse_unqualified_name()
2403 return (parse_source_name(first, last, db)); in parse_unqualified_name()
2405 return (parse_operator_name(first, last, db)); in parse_unqualified_name()
2419 parse_unnamed_type_name(const char *first, const char *last, cpp_db_t *db) in parse_unnamed_type_name() argument
2440 nadd_l(db, "", 0); in parse_unnamed_type_name()
2442 nadd_l(db, first + 2, (size_t)(t1 - first - 2)); in parse_unnamed_type_name()
2444 nfmt(db, "'unnamed{0}'", NULL); in parse_unnamed_type_name()
2448 size_t n = nlen(db); in parse_unnamed_type_name()
2452 t2 = parse_type(t1, last, db); in parse_unnamed_type_name()
2458 if (t1 == last || NAMT(db, n) < 1) in parse_unnamed_type_name()
2461 if (NAMT(db, n) < 1) in parse_unnamed_type_name()
2469 njoin(db, NAMT(db, n), ", "); in parse_unnamed_type_name()
2485 nadd_l(db, t1, (size_t)(t2 - t1)); in parse_unnamed_type_name()
2487 nadd_l(db, "", 0); in parse_unnamed_type_name()
2489 nfmt(db, "'lambda{0}'({1})", NULL); in parse_unnamed_type_name()
2524 basename(cpp_db_t *db) in basename() argument
2526 str_t *s = TOP_L(db); in basename()
2540 nadd_l(db, aliases[i].basename, 0); in basename()
2573 nadd_l(db, "", 0); in basename()
2586 nadd_l(db, start, (size_t)(end - start)); in basename()
2600 parse_ctor_dtor_name(const char *first, const char *last, cpp_db_t *db) in parse_ctor_dtor_name() argument
2604 if (last - first < 2 || nempty(db) || str_length(TOP_L(db)) == 0) in parse_ctor_dtor_name()
2614 basename(db); in parse_ctor_dtor_name()
2626 basename(db); in parse_ctor_dtor_name()
2627 (void) str_insert(TOP_L(db), 0, "~", 1); in parse_ctor_dtor_name()
2637 db->cpp_parsed_ctor_dtor_cv = B_TRUE; in parse_ctor_dtor_name()
2643 cpp_db_t *db) in parse_integer_literal() argument
2656 nadd_l(db, start, (size_t)(t - start)); in parse_integer_literal()
2658 nfmt(db, "-{0}", NULL); in parse_integer_literal()
2660 nfmt(db, fmt, NULL); in parse_integer_literal()
2676 parse_floating_literal(const char *first, const char *last, cpp_db_t *db) in parse_floating_literal() argument
2756 str_init(&num, db->cpp_ops); in parse_floating_literal()
2759 num.str_s = zalloc(db->cpp_ops, num.str_size); in parse_floating_literal()
2784 (void) name_add_str(&db->cpp_name, &num, NULL); in parse_floating_literal()
2822 parse_expr_primary(const char *first, const char *last, cpp_db_t *db) in parse_expr_primary() argument
2834 int_lits[i].fmt, db); in parse_expr_primary()
2846 nadd_l(db, "false", 5); in parse_expr_primary()
2849 nadd_l(db, "true", 4); in parse_expr_primary()
2858 t = parse_floating_literal(first + 1, last, db); in parse_expr_primary()
2873 t = parse_encoding(first + 3, last, db); in parse_expr_primary()
2880 t = parse_type(first + 1, last, db); in parse_expr_primary()
2890 if (n == last || nempty(db) || n[0] != 'E') in parse_expr_primary()
2895 nadd_l(db, t, (size_t)(n - t)); in parse_expr_primary()
2896 nfmt(db, "({1}){0}", NULL); in parse_expr_primary()
3009 parse_operator_name(const char *first, const char *last, cpp_db_t *db) in parse_operator_name() argument
3020 nadd_l(db, op_tbl[i].op, 0); in parse_operator_name()
3027 t = parse_source_name(first + 2, last, db); in parse_operator_name()
3028 if (t == first + 2 || nempty(db)) in parse_operator_name()
3031 nfmt(db, "operator\"\" {0}", NULL); in parse_operator_name()
3039 t = parse_source_name(first + 2, last, db); in parse_operator_name()
3043 nfmt(db, "operator {0}", NULL); in parse_operator_name()
3051 db->cpp_try_to_parse_template_args; in parse_operator_name()
3053 db->cpp_try_to_parse_template_args = B_FALSE; in parse_operator_name()
3054 t = parse_type(first + 2, last, db); in parse_operator_name()
3055 db->cpp_try_to_parse_template_args = try_to_parse_template_args; in parse_operator_name()
3057 if (t == first + 2 || nempty(db)) in parse_operator_name()
3060 nfmt(db, "operator {0}", NULL); in parse_operator_name()
3061 db->cpp_parsed_ctor_dtor_cv = B_TRUE; in parse_operator_name()
3107 parse_builtin_type(const char *first, const char *last, cpp_db_t *db) in parse_builtin_type() argument
3118 nadd_l(db, type_tbl1[i].name, 0); in parse_builtin_type()
3128 nadd_l(db, type_tbl2[i].name, 0); in parse_builtin_type()
3135 const char *t = parse_source_name(first + 1, last, db); in parse_builtin_type()
3175 parse_substitution(const char *first, const char *last, cpp_db_t *db) in parse_substitution() argument
3187 nadd_l(db, sub_tbl[i].name, 0); in parse_substitution()
3208 if (n >= sub_len(&db->cpp_subs)) in parse_substitution()
3211 sub(db, n); in parse_substitution()
3220 parse_source_name(const char *first, const char *last, cpp_db_t *db) in parse_source_name() argument
3248 nadd_l(db, "(anonymous namespace)", 0); in parse_source_name()
3250 nadd_l(db, t, n); in parse_source_name()
3264 parse_vector_type(const char *first, const char *last, cpp_db_t *db) in parse_vector_type() argument
3282 nadd_l(db, t, (size_t)(t1 - t)); in parse_vector_type()
3288 t1 = parse_type(t, last, db); in parse_vector_type()
3292 nfmt(db, "{0} vector[{1}]", NULL); in parse_vector_type()
3295 nfmt(db, "{0} pixel vector[{1}]", NULL); in parse_vector_type()
3300 t1 = parse_expression(first + 2, last, db); in parse_vector_type()
3307 nadd_l(db, "", 0); in parse_vector_type()
3310 t1 = parse_type(t, last, db); in parse_vector_type()
3314 nfmt(db, "{1:L} vector[{0}]", "{1:R}"); in parse_vector_type()
3325 parse_decltype(const char *first, const char *last, cpp_db_t *db) in parse_decltype() argument
3337 size_t n = nlen(db); in parse_decltype()
3338 const char *t = parse_expression(first + 2, last, db); in parse_decltype()
3339 if (NAMT(db, n) != 1 || t == first + 2 || t == last || t[0] != 'E') in parse_decltype()
3342 nfmt(db, "decltype({0})", NULL); in parse_decltype()
3353 parse_array_type(const char *first, const char *last, cpp_db_t *db) in parse_array_type() argument
3363 size_t n = nlen(db); in parse_array_type()
3371 nadd_l(db, t, (size_t)(t1 - t)); in parse_array_type()
3373 t1 = parse_expression(t, last, db); in parse_array_type()
3383 nadd_l(db, "", 0); in parse_array_type()
3388 t1 = parse_type(t + 1, last, db); in parse_array_type()
3389 if (t1 == t + 1 || NAMT(db, n) != 2) in parse_array_type()
3396 str_t *r = &name_top(&db->cpp_name)->strp_r; in parse_array_type()
3400 nfmt(db, "{0:L}", " [{1}]{0:R}"); in parse_array_type()
3406 parse_pointer_to_member_type(const char *first, const char *last, cpp_db_t *db) in parse_pointer_to_member_type() argument
3417 size_t n = nlen(db); in parse_pointer_to_member_type()
3419 t2 = parse_type(t1, last, db); in parse_pointer_to_member_type()
3424 t2 = parse_type(t1, last, db); in parse_pointer_to_member_type()
3428 if (NAMT(db, n) != 2) in parse_pointer_to_member_type()
3431 str_pair_t *func = name_top(&db->cpp_name); in parse_pointer_to_member_type()
3434 nfmt(db, "{0:L}({1}::*", "){0:R}"); in parse_pointer_to_member_type()
3436 nfmt(db, "{0:L} {1}::*", "{0:R}"); in parse_pointer_to_member_type()
3455 parse_unresolved_name(const char *first, const char *last, cpp_db_t *db) in parse_unresolved_name() argument
3474 t2 = parse_base_unresolved_name(t, last, db); in parse_unresolved_name()
3477 if (nempty(db)) in parse_unresolved_name()
3480 (void) str_insert(TOP_L(db), 0, "::", 2); in parse_unresolved_name()
3488 n = nlen(db); in parse_unresolved_name()
3491 t2 = parse_unresolved_type(t, last, db); in parse_unresolved_name()
3496 t2 = parse_template_args(t, last, db); in parse_unresolved_name()
3498 if (NAMT(db, n) < 2 || t2 == last) in parse_unresolved_name()
3501 nfmt(db, "{1:L}{0}", "{1:R}"); in parse_unresolved_name()
3505 VERIFY3U(NAMT(db, n), ==, 1); in parse_unresolved_name()
3508 size_t nn = nlen(db); in parse_unresolved_name()
3509 t2 = parse_unresolved_qualifier_level(t, last, db); in parse_unresolved_name()
3510 if (t == t2 || t == last || NAMT(db, nn) != 1) in parse_unresolved_name()
3519 t2 = parse_base_unresolved_name(t, last, db); in parse_unresolved_name()
3520 if (t == t2 || NAMT(db, n) < 2) in parse_unresolved_name()
3523 njoin(db, NAMT(db, n), "::"); in parse_unresolved_name()
3529 t2 = parse_unresolved_type(t, last, db); in parse_unresolved_name()
3532 t2 = parse_template_args(t, last, db); in parse_unresolved_name()
3534 nfmt(db, "{1:L}{0}", "{1:R}"); in parse_unresolved_name()
3537 t2 = parse_base_unresolved_name(t, last, db); in parse_unresolved_name()
3538 if (t == t2 || nlen(db) < 2) in parse_unresolved_name()
3541 nfmt(db, "{1:L}::{0}", "{1:R}"); in parse_unresolved_name()
3545 t2 = parse_unresolved_qualifier_level(t, last, db); in parse_unresolved_name()
3550 if (global && nlen(db) > 0) in parse_unresolved_name()
3551 nfmt(db, "::{0:L}", "{0:R}"); in parse_unresolved_name()
3554 t2 = parse_unresolved_qualifier_level(t, last, db); in parse_unresolved_name()
3555 if (t == t2 || t == last || nlen(db) < 2) in parse_unresolved_name()
3564 t2 = parse_base_unresolved_name(t, last, db); in parse_unresolved_name()
3565 if (t == t2 || nlen(db) < 2) in parse_unresolved_name()
3568 njoin(db, NAMT(db, n), "::"); in parse_unresolved_name()
3575 cpp_db_t *db) in parse_unresolved_qualifier_level() argument
3578 return (parse_simple_id(first, last, db)); in parse_unresolved_qualifier_level()
3593 parse_base_unresolved_name(const char *first, const char *last, cpp_db_t *db) in parse_base_unresolved_name() argument
3604 t = parse_simple_id(first, last, db); in parse_base_unresolved_name()
3608 t = parse_operator_name(first, last, db); in parse_base_unresolved_name()
3612 t1 = parse_template_args(t, last, db); in parse_base_unresolved_name()
3614 if (nlen(db) < 2) in parse_base_unresolved_name()
3616 nfmt(db, "{1:L}{0}", "{1:R}"); in parse_base_unresolved_name()
3623 t = parse_destructor_name(first + 2, last, db); in parse_base_unresolved_name()
3627 t = parse_operator_name(first + 2, last, db); in parse_base_unresolved_name()
3631 t1 = parse_template_args(t, last, db); in parse_base_unresolved_name()
3633 nfmt(db, "{1:L}{0}", "{1:R}"); in parse_base_unresolved_name()
3642 parse_destructor_name(const char *first, const char *last, cpp_db_t *db) in parse_destructor_name() argument
3649 const char *t = parse_unresolved_type(first, last, db); in parse_destructor_name()
3652 t = parse_simple_id(first, last, db); in parse_destructor_name()
3657 nfmt(db, "~{0:L}", "{0:R}"); in parse_destructor_name()
3668 parse_function_type(const char *first, const char *last, cpp_db_t *db) in parse_function_type() argument
3683 const char *t1 = parse_type(t, last, db); in parse_function_type()
3687 size_t n = nlen(db); in parse_function_type()
3711 t1 = parse_type(t, last, db); in parse_function_type()
3721 njoin(db, NAMT(db, n), ", "); in parse_function_type()
3722 nfmt(db, "({0})", NULL); in parse_function_type()
3726 nfmt(db, "{0} &", NULL); in parse_function_type()
3729 nfmt(db, "{0} &&", NULL); in parse_function_type()
3733 nfmt(db, "{1:L} ", "{0}{1:R}"); in parse_function_type()
3744 parse_template_param(const char *first, const char *last, cpp_db_t *db) in parse_template_param() argument
3780 if (tempty(db)) in parse_template_param()
3783 if (idx >= ttlen(db)) { in parse_template_param()
3784 nadd_l(db, first, (size_t)(t - first)); in parse_template_param()
3785 db->cpp_fix_forward_references = B_TRUE; in parse_template_param()
3789 tsub(db, idx); in parse_template_param()
3798 parse_template_args(const char *first, const char *last, cpp_db_t *db) in parse_template_args() argument
3805 if (db->cpp_tag_templates) in parse_template_args()
3806 sub_clear(templ_top(&db->cpp_templ)); in parse_template_args()
3809 size_t n = nlen(db); in parse_template_args()
3812 if (db->cpp_tag_templates) in parse_template_args()
3813 tpush(db); in parse_template_args()
3815 size_t n1 = nlen(db); in parse_template_args()
3816 const char *t1 = parse_template_arg(t, last, db); in parse_template_args()
3818 if (db->cpp_tag_templates) in parse_template_args()
3819 tpop(db); in parse_template_args()
3824 if (db->cpp_tag_templates) in parse_template_args()
3825 tsave(db, NAMT(db, n1)); in parse_template_args()
3834 if (NAMT(db, n) > 1 && in parse_template_args()
3835 str_pair_len(name_top(&db->cpp_name)) == 0) in parse_template_args()
3836 name_pop(&db->cpp_name, NULL); in parse_template_args()
3838 njoin(db, NAMT(db, n), ", "); in parse_template_args()
3840 VERIFY3U(nlen(db), >, 0); in parse_template_args()
3843 str_t *top = TOP_L(db); in parse_template_args()
3846 nfmt(db, "<{0} >", NULL); in parse_template_args()
3848 nfmt(db, "<{0}>", NULL); in parse_template_args()
3962 nempty(cpp_db_t *db) in nempty() argument
3964 return (name_empty(&db->cpp_name)); in nempty()
3968 nlen(cpp_db_t *db) in nlen() argument
3970 return (name_len(&db->cpp_name)); in nlen()
3974 nadd_l(cpp_db_t *db, const char *s, size_t len) in nadd_l() argument
3976 CK(name_add(&db->cpp_name, s, len, NULL, 0)); in nadd_l()
3980 njoin(cpp_db_t *db, size_t amt, const char *sep) in njoin() argument
3982 name_t *nm = &db->cpp_name; in njoin()
3988 nfmt(cpp_db_t *db, const char *fmt_l, const char *fmt_r) in nfmt() argument
3990 CK(name_fmt(&db->cpp_name, fmt_l, fmt_r)); in nfmt()
3994 save_top(cpp_db_t *db, size_t amt) in save_top() argument
3996 CK(sub_save(&db->cpp_subs, &db->cpp_name, amt)); in save_top()
4000 sub(cpp_db_t *db, size_t n) in sub() argument
4002 CK(sub_substitute(&db->cpp_subs, n, &db->cpp_name)); in sub()
4006 tempty(const cpp_db_t *db) in tempty() argument
4008 return (templ_empty(&db->cpp_templ) ? B_TRUE : B_FALSE); in tempty()
4012 ttlen(const cpp_db_t *db) in ttlen() argument
4014 return (templ_top_len(&db->cpp_templ)); in ttlen()
4018 tsub(cpp_db_t *db, size_t n) in tsub() argument
4020 CK(templ_sub(&db->cpp_templ, n, &db->cpp_name)); in tsub()
4024 tpush(cpp_db_t *db) in tpush() argument
4026 CK(templ_push(&db->cpp_templ)); in tpush()
4030 tpop(cpp_db_t *db) in tpop() argument
4032 templ_pop(&db->cpp_templ); in tpop()
4036 tsave(cpp_db_t *db, size_t amt) in tsave() argument
4038 CK(templ_save(&db->cpp_name, amt, &db->cpp_templ)); in tsave()
4042 db_init(cpp_db_t *db, sysdem_ops_t *ops) in db_init() argument
4044 (void) memset(db, 0, sizeof (*db)); in db_init()
4045 db->cpp_ops = ops; in db_init()
4046 name_init(&db->cpp_name, ops); in db_init()
4047 sub_init(&db->cpp_subs, ops); in db_init()
4048 templ_init(&db->cpp_templ, ops); in db_init()
4049 db->cpp_tag_templates = B_TRUE; in db_init()
4050 db->cpp_try_to_parse_template_args = B_TRUE; in db_init()
4051 tpush(db); in db_init()
4055 db_fini(cpp_db_t *db) in db_fini() argument
4057 name_fini(&db->cpp_name); in db_fini()
4058 sub_fini(&db->cpp_subs); in db_fini()
4059 templ_fini(&db->cpp_templ); in db_fini()
4060 (void) memset(db, 0, sizeof (*db)); in db_fini()
4198 dump(cpp_db_t *db, FILE *out) in dump() argument
4200 print_name(&db->cpp_name, out); in dump()
4201 print_sub(&db->cpp_subs, out); in dump()
4202 print_templ(&db->cpp_templ, out); in dump()