Lines Matching defs:ddata

126 static int	cpp_demangle_local_source_name(struct cpp_demangle_data *ddata);
178 struct cpp_demangle_data ddata;
197 if (!cpp_demangle_data_init(&ddata, org + 2))
202 if (!cpp_demangle_read_encoding(&ddata))
206 while (*ddata.cur != '\0') {
210 if (*ddata.cur == '@' && *(ddata.cur + 1) == '@')
212 if (!cpp_demangle_read_type(&ddata, 1))
218 if (ddata.output.size == 0)
220 if (ddata.paren && !vector_str_push(&ddata.output, ")", 1))
222 if (ddata.mem_vat && !vector_str_push(&ddata.output, " volatile", 9))
224 if (ddata.mem_cst && !vector_str_push(&ddata.output, " const", 6))
226 if (ddata.mem_rst && !vector_str_push(&ddata.output, " restrict", 9))
229 rtn = vector_str_get_flat(&ddata.output, (size_t *) NULL);
232 cpp_demangle_data_dest(&ddata);
305 cpp_demangle_push_fp(struct cpp_demangle_data *ddata,
313 if (ddata == NULL || decoder == NULL)
316 fp = ddata->cur;
317 while (*ddata->cur != 'E')
318 ++ddata->cur;
320 if ((f = decoder(fp, ddata->cur - fp)) == NULL)
325 rtn = cpp_demangle_push_str(ddata, f, len);
329 ++ddata->cur;
335 cpp_demangle_push_str(struct cpp_demangle_data *ddata, const char *str,
339 if (ddata == NULL || str == NULL || len == 0)
342 if (ddata->push_head > 0)
343 return (vector_str_push(&ddata->output_tmp, str, len));
345 return (vector_str_push(&ddata->output, str, len));
349 cpp_demangle_push_subst(struct cpp_demangle_data *ddata, const char *str,
353 if (ddata == NULL || str == NULL || len == 0)
356 if (!vector_str_find(&ddata->subst, str, len))
357 return (vector_str_push(&ddata->subst, str, len));
363 cpp_demangle_push_subst_v(struct cpp_demangle_data *ddata, struct vector_str *v)
369 if (ddata == NULL || v == NULL)
375 rtn = cpp_demangle_push_subst(ddata, str, str_len);
383 cpp_demangle_push_type_qualifier(struct cpp_demangle_data *ddata,
391 if (ddata == NULL || v == NULL)
409 if (!cpp_demangle_push_str(ddata, "*", 1))
414 if (!cpp_demangle_push_subst_v(ddata,
421 if (!cpp_demangle_push_str(ddata, "&", 1))
426 if (!cpp_demangle_push_subst_v(ddata,
433 if (!cpp_demangle_push_str(ddata, " complex", 8))
438 if (!cpp_demangle_push_subst_v(ddata,
445 if (!cpp_demangle_push_str(ddata, " imaginary", 10))
451 if (!cpp_demangle_push_subst_v(ddata,
469 if (!cpp_demangle_push_str(ddata, buf, e_len + 1)) {
480 if (!cpp_demangle_push_subst_v(ddata,
491 if (!cpp_demangle_push_str(ddata, " restrict", 9))
496 if (!cpp_demangle_push_subst_v(ddata,
503 if (!cpp_demangle_push_str(ddata, " volatile", 9))
508 if (!cpp_demangle_push_subst_v(ddata,
515 if (!cpp_demangle_push_str(ddata, " const", 6))
520 if (!cpp_demangle_push_subst_v(ddata,
537 if (!cpp_demangle_push_str(ddata, buf, e_len + 11)) {
547 if (!cpp_demangle_push_subst_v(ddata,
569 cpp_demangle_get_subst(struct cpp_demangle_data *ddata, size_t idx)
573 if (ddata == NULL || ddata->subst.size <= idx)
575 if ((len = strlen(ddata->subst.container[idx])) == 0)
577 if (!cpp_demangle_push_str(ddata, ddata->subst.container[idx], len))
581 ++ddata->cur;
587 cpp_demangle_get_tmpl_param(struct cpp_demangle_data *ddata, size_t idx)
591 if (ddata == NULL || ddata->tmpl.size <= idx)
593 if ((len = strlen(ddata->tmpl.container[idx])) == 0)
595 if (!cpp_demangle_push_str(ddata, ddata->tmpl.container[idx], len))
598 ++ddata->cur;
604 cpp_demangle_read_array(struct cpp_demangle_data *ddata)
610 if (ddata == NULL || *(++ddata->cur) == '\0')
613 if (*ddata->cur == '_') {
614 if (*(++ddata->cur) == '\0')
617 if (!cpp_demangle_read_type(ddata, 0))
620 if (!cpp_demangle_push_str(ddata, "[]", 2))
623 if (ELFTC_ISDIGIT(*ddata->cur) != 0) {
624 num = ddata->cur;
625 while (ELFTC_ISDIGIT(*ddata->cur) != 0)
626 ++ddata->cur;
627 if (*ddata->cur != '_')
629 num_len = ddata->cur - num;
631 if (*(++ddata->cur) == '\0')
633 if (!cpp_demangle_read_type(ddata, 0))
635 if (!cpp_demangle_push_str(ddata, "[", 1))
637 if (!cpp_demangle_push_str(ddata, num, num_len))
639 if (!cpp_demangle_push_str(ddata, "]", 1))
642 p_idx = ddata->output.size;
643 if (!cpp_demangle_read_expression(ddata))
645 if ((exp = vector_str_substr(&ddata->output, p_idx,
646 ddata->output.size - 1, &exp_len)) == NULL)
648 idx = ddata->output.size;
650 if (!vector_str_pop(&ddata->output)) {
654 if (*ddata->cur != '_') {
658 ++ddata->cur;
659 if (*ddata->cur == '\0') {
663 if (!cpp_demangle_read_type(ddata, 0)) {
667 if (!cpp_demangle_push_str(ddata, "[", 1)) {
671 if (!cpp_demangle_push_str(ddata, exp, exp_len)) {
675 if (!cpp_demangle_push_str(ddata, "]", 1)) {
687 cpp_demangle_read_expr_primary(struct cpp_demangle_data *ddata)
691 if (ddata == NULL || *(++ddata->cur) == '\0')
694 if (*ddata->cur == '_' && *(ddata->cur + 1) == 'Z') {
695 ddata->cur += 2;
696 if (*ddata->cur == '\0')
698 if (!cpp_demangle_read_encoding(ddata))
700 ++ddata->cur;
704 switch (*ddata->cur) {
706 if (*(ddata->cur + 2) != 'E')
708 switch (*(++ddata->cur)) {
710 ddata->cur += 2;
711 return (cpp_demangle_push_str(ddata, "false", 5));
713 ddata->cur += 2;
714 return (cpp_demangle_push_str(ddata, "true", 4));
720 ++ddata->cur;
721 return (cpp_demangle_push_fp(ddata, decode_fp_to_double));
724 ++ddata->cur;
726 return (cpp_demangle_push_fp(ddata,
728 return (cpp_demangle_push_fp(ddata, decode_fp_to_float80));
731 ++ddata->cur;
732 return (cpp_demangle_push_fp(ddata, decode_fp_to_float));
735 ++ddata->cur;
737 return (cpp_demangle_push_fp(ddata,
739 return (cpp_demangle_push_fp(ddata, decode_fp_to_float128));
750 if (*(++ddata->cur) == 'n') {
751 if (!cpp_demangle_push_str(ddata, "-", 1))
753 ++ddata->cur;
755 num = ddata->cur;
756 while (*ddata->cur != 'E') {
757 if (!ELFTC_ISDIGIT(*ddata->cur))
759 ++ddata->cur;
761 ++ddata->cur;
762 return (cpp_demangle_push_str(ddata, num,
763 ddata->cur - num - 1));
771 cpp_demangle_read_expression(struct cpp_demangle_data *ddata)
774 if (ddata == NULL || *ddata->cur == '\0')
777 switch (SIMPLE_HASH(*ddata->cur, *(ddata->cur + 1))) {
779 ddata->cur += 2;
780 return (cpp_demangle_read_type(ddata, 0));
783 ddata->cur += 2;
784 if (!cpp_demangle_read_type(ddata, 0))
786 if (!cpp_demangle_read_uqname(ddata))
788 if (*ddata->cur == 'I')
789 return (cpp_demangle_read_tmpl_args(ddata));
794 ddata->cur += 2;
795 return (cpp_demangle_read_expression_binary(ddata, "&&", 2));
799 ddata->cur += 2;
800 return (cpp_demangle_read_expression_unary(ddata, "&", 1));
804 ddata->cur += 2;
805 return (cpp_demangle_read_expression_binary(ddata, "&", 1));
809 ddata->cur += 2;
810 return (cpp_demangle_read_expression_binary(ddata, "&=", 2));
814 ddata->cur += 2;
815 return (cpp_demangle_read_expression_binary(ddata, "=", 1));
819 ddata->cur += 2;
820 return (cpp_demangle_read_expression_binary(ddata, "()", 2));
824 ddata->cur += 2;
825 return (cpp_demangle_read_expression_binary(ddata, ",", 1));
829 ddata->cur += 2;
830 return (cpp_demangle_read_expression_binary(ddata, "~", 1));
834 ddata->cur += 2;
835 return (cpp_demangle_read_expression_binary(ddata, "(cast)", 6));
839 ddata->cur += 2;
840 return (cpp_demangle_read_expression_unary(ddata, "delete []", 9));
844 ddata->cur += 2;
845 return (cpp_demangle_read_expression_unary(ddata, "*", 1));
849 ddata->cur += 2;
850 return (cpp_demangle_read_expression_unary(ddata, "delete", 6));
854 ddata->cur += 2;
855 return (cpp_demangle_read_expression_binary(ddata, "/", 1));
859 ddata->cur += 2;
860 return (cpp_demangle_read_expression_binary(ddata, "/=", 2));
864 ddata->cur += 2;
865 return (cpp_demangle_read_expression_binary(ddata, "^", 1));
869 ddata->cur += 2;
870 return (cpp_demangle_read_expression_binary(ddata, "^=", 2));
874 ddata->cur += 2;
875 return (cpp_demangle_read_expression_binary(ddata, "==", 2));
879 ddata->cur += 2;
880 return (cpp_demangle_read_expression_binary(ddata, ">=", 2));
884 ddata->cur += 2;
885 return (cpp_demangle_read_expression_binary(ddata, ">", 1));
889 ddata->cur += 2;
890 return (cpp_demangle_read_expression_binary(ddata, "[]", 2));
894 ddata->cur += 2;
895 return (cpp_demangle_read_expression_binary(ddata, "<=", 2));
899 ddata->cur += 2;
900 return (cpp_demangle_read_expression_binary(ddata, "<<", 2));
904 ddata->cur += 2;
905 return (cpp_demangle_read_expression_binary(ddata, "<<=", 3));
909 ddata->cur += 2;
910 return (cpp_demangle_read_expression_binary(ddata, "<", 1));
914 ddata->cur += 2;
915 return (cpp_demangle_read_expression_binary(ddata, "-", 1));
919 ddata->cur += 2;
920 return (cpp_demangle_read_expression_binary(ddata, "-=", 2));
924 ddata->cur += 2;
925 return (cpp_demangle_read_expression_binary(ddata, "*", 1));
929 ddata->cur += 2;
930 return (cpp_demangle_read_expression_binary(ddata, "*=", 2));
934 ddata->cur += 2;
935 return (cpp_demangle_read_expression_binary(ddata, "--", 2));
939 ddata->cur += 2;
940 return (cpp_demangle_read_expression_unary(ddata, "new []", 6));
944 ddata->cur += 2;
945 return (cpp_demangle_read_expression_binary(ddata, "!=", 2));
949 ddata->cur += 2;
950 return (cpp_demangle_read_expression_unary(ddata, "-", 1));
954 ddata->cur += 2;
955 return (cpp_demangle_read_expression_binary(ddata, "!", 1));
959 ddata->cur += 2;
960 return (cpp_demangle_read_expression_unary(ddata, "new", 3));
964 ddata->cur += 2;
965 return (cpp_demangle_read_expression_binary(ddata, "||", 2));
969 ddata->cur += 2;
970 return (cpp_demangle_read_expression_binary(ddata, "|", 1));
974 ddata->cur += 2;
975 return (cpp_demangle_read_expression_binary(ddata, "|=", 2));
979 ddata->cur += 2;
980 return (cpp_demangle_read_expression_binary(ddata, "+", 1));
984 ddata->cur += 2;
985 return (cpp_demangle_read_expression_binary(ddata, "+=", 2));
989 ddata->cur += 2;
990 return (cpp_demangle_read_expression_binary(ddata, "->*", 3));
994 ddata->cur += 2;
995 return (cpp_demangle_read_expression_binary(ddata, "++", 2));
999 ddata->cur += 2;
1000 return (cpp_demangle_read_expression_unary(ddata, "+", 1));
1004 ddata->cur += 2;
1005 return (cpp_demangle_read_expression_binary(ddata, "->", 2));
1009 ddata->cur += 2;
1010 return (cpp_demangle_read_expression_trinary(ddata, "?", 1,
1015 ddata->cur += 2;
1016 return (cpp_demangle_read_expression_binary(ddata, "%", 1));
1020 ddata->cur += 2;
1021 return (cpp_demangle_read_expression_binary(ddata, "%=", 2));
1025 ddata->cur += 2;
1026 return (cpp_demangle_read_expression_binary(ddata, ">>", 2));
1030 ddata->cur += 2;
1031 return (cpp_demangle_read_expression_binary(ddata, ">>=", 3));
1035 ddata->cur += 2;
1036 return (cpp_demangle_read_expression_unary(ddata, "sizeof", 6));
1040 ddata->cur += 2;
1041 return (cpp_demangle_read_expression_unary(ddata, "sizeof", 6));
1044 switch (*ddata->cur) {
1046 return (cpp_demangle_read_expr_primary(ddata));
1048 return (cpp_demangle_read_tmpl_param(ddata));
1055 cpp_demangle_read_expression_flat(struct cpp_demangle_data *ddata, char **str)
1061 output = ddata->push_head > 0 ? &ddata->output_tmp :
1062 &ddata->output;
1066 if (!cpp_demangle_read_expression(ddata))
1087 cpp_demangle_read_expression_binary(struct cpp_demangle_data *ddata,
1091 if (ddata == NULL || name == NULL || len == 0)
1093 if (!cpp_demangle_read_expression(ddata))
1095 if (!cpp_demangle_push_str(ddata, name, len))
1098 return (cpp_demangle_read_expression(ddata));
1102 cpp_demangle_read_expression_unary(struct cpp_demangle_data *ddata,
1106 if (ddata == NULL || name == NULL || len == 0)
1108 if (!cpp_demangle_read_expression(ddata))
1111 return (cpp_demangle_push_str(ddata, name, len));
1115 cpp_demangle_read_expression_trinary(struct cpp_demangle_data *ddata,
1119 if (ddata == NULL || name1 == NULL || len1 == 0 || name2 == NULL ||
1123 if (!cpp_demangle_read_expression(ddata))
1125 if (!cpp_demangle_push_str(ddata, name1, len1))
1127 if (!cpp_demangle_read_expression(ddata))
1129 if (!cpp_demangle_push_str(ddata, name2, len2))
1132 return (cpp_demangle_read_expression(ddata));
1136 cpp_demangle_read_function(struct cpp_demangle_data *ddata, int *ext_c,
1142 if (ddata == NULL || *ddata->cur != 'F' || v == NULL)
1145 ++ddata->cur;
1146 if (*ddata->cur == 'Y') {
1149 ++ddata->cur;
1151 if (!cpp_demangle_read_type(ddata, 0))
1153 if (*ddata->cur != 'E') {
1154 if (!cpp_demangle_push_str(ddata, "(", 1))
1156 if (vector_read_cmd_find(&ddata->cmd, READ_PTRMEM)) {
1157 if ((class_type_size = ddata->class_type.size) == 0)
1160 ddata->class_type.container[class_type_size - 1];
1165 if (!cpp_demangle_push_str(ddata, class_type,
1168 if (!cpp_demangle_push_str(ddata, "::*", 3))
1170 ++ddata->func_type;
1172 if (!cpp_demangle_push_type_qualifier(ddata, v,
1180 if (!cpp_demangle_push_str(ddata, ")(", 2))
1185 if (!cpp_demangle_read_type(ddata, 0))
1187 if (*ddata->cur == 'E')
1193 if (vector_read_cmd_find(&ddata->cmd, READ_PTRMEM) == 1) {
1194 if (!cpp_demangle_push_type_qualifier(ddata, v,
1202 if (!cpp_demangle_push_str(ddata, ")", 1))
1206 ++ddata->cur;
1213 cpp_demangle_read_encoding(struct cpp_demangle_data *ddata)
1219 if (ddata == NULL || *ddata->cur == '\0')
1223 switch (SIMPLE_HASH(*ddata->cur, *(ddata->cur + 1))) {
1225 if (!cpp_demangle_push_str(ddata, "hidden alias for ", 17))
1227 ddata->cur += 2;
1228 if (*ddata->cur == '\0')
1230 return (cpp_demangle_read_encoding(ddata));
1233 if (!cpp_demangle_push_str(ddata, "reference temporary #", 21))
1235 ddata->cur += 2;
1236 if (*ddata->cur == '\0')
1238 if (!cpp_demangle_read_name_flat(ddata, &name))
1241 if (!cpp_demangle_read_number_as_string(ddata, &num_str))
1243 if (!cpp_demangle_push_str(ddata, num_str, strlen(num_str)))
1245 if (!cpp_demangle_push_str(ddata, " for ", 5))
1247 if (!cpp_demangle_push_str(ddata, name, strlen(name)))
1257 ddata->cur += 2;
1258 if (*ddata->cur == '\0')
1260 switch (*ddata->cur) {
1262 if (!cpp_demangle_push_str(ddata,
1268 if (!cpp_demangle_push_str(ddata,
1273 ++ddata->cur;
1274 return (cpp_demangle_read_encoding(ddata));
1278 if (!cpp_demangle_push_str(ddata, "guard variable for ", 20))
1280 ddata->cur += 2;
1285 if (!cpp_demangle_push_str(ddata,
1288 ddata->cur += 2;
1289 if (*ddata->cur == '\0')
1291 if (!cpp_demangle_read_offset(ddata))
1293 if (!cpp_demangle_read_offset(ddata))
1295 return (cpp_demangle_read_encoding(ddata));
1299 if (!cpp_demangle_push_str(ddata, "construction vtable for ",
1302 ddata->cur += 2;
1303 if (*ddata->cur == '\0')
1305 if (!cpp_demangle_read_type_flat(ddata, &type))
1308 if (!cpp_demangle_read_number(ddata, &offset))
1310 if (*ddata->cur++ != '_')
1312 if (!cpp_demangle_read_type(ddata, 0))
1314 if (!cpp_demangle_push_str(ddata, "-in-", 4))
1316 if (!cpp_demangle_push_str(ddata, type, strlen(type)))
1329 if (!cpp_demangle_push_str(ddata, "typeinfo fn for ", 16))
1331 ddata->cur += 2;
1332 if (*ddata->cur == '\0')
1334 return (cpp_demangle_read_type(ddata, 0));
1338 if (!cpp_demangle_push_str(ddata,
1341 ddata->cur += 2;
1342 if (*ddata->cur == '\0')
1344 if (!cpp_demangle_read_nv_offset(ddata))
1346 return (cpp_demangle_read_encoding(ddata));
1350 if (!cpp_demangle_push_str(ddata, "TLS init function for ",
1353 ddata->cur += 2;
1354 if (*ddata->cur == '\0')
1360 if (!cpp_demangle_push_str(ddata, "typeinfo for ", 13))
1362 ddata->cur += 2;
1363 if (*ddata->cur == '\0')
1365 return (cpp_demangle_read_type(ddata, 0));
1369 if (!cpp_demangle_push_str(ddata, "java Class for ", 15))
1371 ddata->cur += 2;
1372 if (*ddata->cur == '\0')
1374 return (cpp_demangle_read_type(ddata, 0));
1378 if (!cpp_demangle_push_str(ddata, "typeinfo name for ", 18))
1380 ddata->cur += 2;
1381 if (*ddata->cur == '\0')
1383 return (cpp_demangle_read_type(ddata, 0));
1387 if (!cpp_demangle_push_str(ddata, "VTT for ", 8))
1389 ddata->cur += 2;
1390 if (*ddata->cur == '\0')
1392 return (cpp_demangle_read_type(ddata, 0));
1396 if (!cpp_demangle_push_str(ddata,
1399 ddata->cur += 2;
1400 if (*ddata->cur == '\0')
1402 if (!cpp_demangle_read_v_offset(ddata))
1404 return (cpp_demangle_read_encoding(ddata));
1408 if (!cpp_demangle_push_str(ddata, "vtable for ", 12))
1410 ddata->cur += 2;
1411 if (*ddata->cur == '\0')
1413 return (cpp_demangle_read_type(ddata, 0));
1417 if (!cpp_demangle_push_str(ddata, "TLS wrapper function for ",
1420 ddata->cur += 2;
1421 if (*ddata->cur == '\0')
1426 return (cpp_demangle_read_name(ddata));
1430 cpp_demangle_read_local_name(struct cpp_demangle_data *ddata)
1434 if (ddata == NULL)
1436 if (*(++ddata->cur) == '\0')
1438 if (!cpp_demangle_read_encoding(ddata))
1443 if (!cpp_demangle_read_type(ddata, 1))
1445 if (*ddata->cur == 'E')
1450 if (*(++ddata->cur) == '\0')
1452 if (ddata->paren == true) {
1453 if (!cpp_demangle_push_str(ddata, ")", 1))
1455 ddata->paren = false;
1457 if (*ddata->cur == 's')
1458 ++ddata->cur;
1460 if (!cpp_demangle_push_str(ddata, "::", 2))
1462 if (!cpp_demangle_read_name(ddata))
1465 if (*ddata->cur == '_') {
1466 ++ddata->cur;
1467 while (ELFTC_ISDIGIT(*ddata->cur) != 0)
1468 ++ddata->cur;
1475 cpp_demangle_read_name(struct cpp_demangle_data *ddata)
1482 if (ddata == NULL || *ddata->cur == '\0')
1485 output = ddata->push_head > 0 ? &ddata->output_tmp : &ddata->output;
1489 switch (*ddata->cur) {
1491 return (cpp_demangle_read_subst(ddata));
1493 return (cpp_demangle_read_nested_name(ddata));
1495 return (cpp_demangle_read_local_name(ddata));
1503 if (!cpp_demangle_read_uqname(ddata))
1514 if (!cpp_demangle_push_subst_v(ddata, &v))
1517 if (*ddata->cur == 'I') {
1519 if (!cpp_demangle_read_tmpl_args(ddata))
1527 if (!cpp_demangle_push_subst_v(ddata, &v))
1541 cpp_demangle_read_name_flat(struct cpp_demangle_data *ddata, char **str)
1547 output = ddata->push_head > 0 ? &ddata->output_tmp :
1548 &ddata->output;
1552 if (!cpp_demangle_read_name(ddata))
1573 cpp_demangle_read_nested_name(struct cpp_demangle_data *ddata)
1580 if (ddata == NULL || *ddata->cur != 'N')
1582 if (*(++ddata->cur) == '\0')
1585 while (*ddata->cur == 'r' || *ddata->cur == 'V' ||
1586 *ddata->cur == 'K') {
1587 switch (*ddata->cur) {
1589 ddata->mem_rst = true;
1592 ddata->mem_vat = true;
1595 ddata->mem_cst = true;
1598 ++ddata->cur;
1601 output = ddata->push_head > 0 ? &ddata->output_tmp : &ddata->output;
1609 switch (*ddata->cur) {
1611 if (!cpp_demangle_read_tmpl_args(ddata))
1615 if (!cpp_demangle_read_subst(ddata))
1619 if (!cpp_demangle_read_tmpl_param(ddata))
1623 if (!cpp_demangle_read_uqname(ddata))
1636 if (!cpp_demangle_push_subst_v(ddata, &v))
1638 if (*ddata->cur == 'E')
1640 else if (*ddata->cur != 'I' &&
1641 *ddata->cur != 'C' && *ddata->cur != 'D') {
1642 if (!cpp_demangle_push_str(ddata, "::", 2))
1651 ++ddata->cur;
1665 cpp_demangle_read_number(struct cpp_demangle_data *ddata, long *rtn)
1669 if (ddata == NULL || rtn == NULL)
1673 if (*ddata->cur == 'n') {
1676 ++ddata->cur;
1678 if (ELFTC_ISDIGIT(*ddata->cur) == 0)
1682 if ((len = strtol(ddata->cur, (char **) NULL, 10)) == 0 &&
1686 while (ELFTC_ISDIGIT(*ddata->cur) != 0)
1687 ++ddata->cur;
1698 cpp_demangle_read_number_as_string(struct cpp_demangle_data *ddata, char **str)
1702 if (!cpp_demangle_read_number(ddata, &n)) {
1716 cpp_demangle_read_nv_offset(struct cpp_demangle_data *ddata)
1719 if (ddata == NULL)
1722 if (!cpp_demangle_push_str(ddata, "offset : ", 9))
1725 return (cpp_demangle_read_offset_number(ddata));
1730 cpp_demangle_read_offset(struct cpp_demangle_data *ddata)
1733 if (ddata == NULL)
1736 if (*ddata->cur == 'h') {
1737 ++ddata->cur;
1738 return (cpp_demangle_read_nv_offset(ddata));
1739 } else if (*ddata->cur == 'v') {
1740 ++ddata->cur;
1741 return (cpp_demangle_read_v_offset(ddata));
1748 cpp_demangle_read_offset_number(struct cpp_demangle_data *ddata)
1753 if (ddata == NULL || *ddata->cur == '\0')
1757 if (*ddata->cur == 'n') {
1759 start = ddata->cur + 1;
1762 start = ddata->cur;
1765 while (*ddata->cur != '_')
1766 ++ddata->cur;
1768 if (negative && !cpp_demangle_push_str(ddata, "-", 1))
1773 if (!cpp_demangle_push_str(ddata, start, ddata->cur - start))
1775 if (!cpp_demangle_push_str(ddata, " ", 1))
1778 ++ddata->cur;
1784 cpp_demangle_read_pointer_to_member(struct cpp_demangle_data *ddata)
1790 if (ddata == NULL || *ddata->cur != 'M' || *(++ddata->cur) == '\0')
1793 p_idx = ddata->output.size;
1794 if (!cpp_demangle_read_type(ddata, 0))
1797 if ((class_type = vector_str_substr(&ddata->output, p_idx,
1798 ddata->output.size - 1, &class_type_len)) == NULL)
1802 idx = ddata->output.size;
1804 if (!vector_str_pop(&ddata->output))
1807 if (!vector_read_cmd_push(&ddata->cmd, READ_PTRMEM))
1810 if (!vector_str_push(&ddata->class_type, class_type, class_type_len))
1813 p_func_type = ddata->func_type;
1814 if (!cpp_demangle_read_type(ddata, 0))
1817 if (p_func_type == ddata->func_type) {
1818 if (!cpp_demangle_push_str(ddata, " ", 1))
1820 if (!cpp_demangle_push_str(ddata, class_type, class_type_len))
1822 if (!cpp_demangle_push_str(ddata, "::*", 3))
1828 if (!vector_str_pop(&ddata->class_type))
1831 if (!vector_read_cmd_pop(&ddata->cmd))
1841 cpp_demangle_read_sname(struct cpp_demangle_data *ddata)
1846 if (ddata == NULL || cpp_demangle_read_number(ddata, &len) == 0 ||
1850 if (len == 12 && (memcmp("_GLOBAL__N_1", ddata->cur, 12) == 0))
1851 err = cpp_demangle_push_str(ddata, "(anonymous namespace)", 21);
1853 err = cpp_demangle_push_str(ddata, ddata->cur, len);
1858 assert(ddata->output.size > 0);
1859 if (vector_read_cmd_find(&ddata->cmd, READ_TMPL) == 0)
1860 ddata->last_sname =
1861 ddata->output.container[ddata->output.size - 1];
1863 ddata->cur += len;
1869 cpp_demangle_read_subst(struct cpp_demangle_data *ddata)
1873 if (ddata == NULL || *ddata->cur == '\0')
1877 switch (SIMPLE_HASH(*ddata->cur, *(ddata->cur + 1))) {
1880 if (cpp_demangle_push_str(ddata, "std::allocator", 14) == 0)
1882 ddata->cur += 2;
1883 if (*ddata->cur == 'I')
1884 return (cpp_demangle_read_subst_stdtmpl(ddata,
1890 if (!cpp_demangle_push_str(ddata, "std::basic_string", 17))
1892 ddata->cur += 2;
1893 if (*ddata->cur == 'I')
1894 return (cpp_demangle_read_subst_stdtmpl(ddata,
1900 if (!cpp_demangle_push_str(ddata, "std::basic_iostream", 19))
1902 ddata->last_sname = "basic_iostream";
1903 ddata->cur += 2;
1904 if (*ddata->cur == 'I')
1905 return (cpp_demangle_read_subst_stdtmpl(ddata,
1911 if (!cpp_demangle_push_str(ddata, "std::basic_istream", 18))
1913 ddata->last_sname = "basic_istream";
1914 ddata->cur += 2;
1915 if (*ddata->cur == 'I')
1916 return (cpp_demangle_read_subst_stdtmpl(ddata,
1922 if (!cpp_demangle_push_str(ddata, "std::basic_ostream", 18))
1924 ddata->last_sname = "basic_ostream";
1925 ddata->cur += 2;
1926 if (*ddata->cur == 'I')
1927 return (cpp_demangle_read_subst_stdtmpl(ddata,
1938 if (!cpp_demangle_push_str(ddata, "std::string", 11))
1940 ddata->last_sname = "string";
1941 ddata->cur += 2;
1942 if (*ddata->cur == 'I')
1943 return (cpp_demangle_read_subst_stdtmpl(ddata,
1949 return (cpp_demangle_read_subst_std(ddata));
1952 if (*(++ddata->cur) == '\0')
1956 if (*ddata->cur == '_')
1957 return (cpp_demangle_get_subst(ddata, 0));
1961 if ((nth = strtol(ddata->cur, (char **) NULL, 36)) == 0 &&
1968 while (*ddata->cur != '_')
1969 ++ddata->cur;
1973 return (cpp_demangle_get_subst(ddata, nth));
1981 cpp_demangle_read_subst_std(struct cpp_demangle_data *ddata)
1988 if (ddata == NULL)
1996 if (!cpp_demangle_push_str(ddata, "std::", 5))
2002 ddata->cur += 2;
2004 output = ddata->push_head > 0 ? &ddata->output_tmp : &ddata->output;
2007 if (!cpp_demangle_read_uqname(ddata))
2017 if (!cpp_demangle_push_subst_v(ddata, &v))
2020 if (*ddata->cur == 'I') {
2022 if (!cpp_demangle_read_tmpl_args(ddata))
2030 if (!cpp_demangle_push_subst_v(ddata, &v))
2043 cpp_demangle_read_subst_stdtmpl(struct cpp_demangle_data *ddata,
2051 if (ddata == NULL || str == NULL || len == 0)
2054 output = ddata->push_head > 0 ? &ddata->output_tmp : &ddata->output;
2060 if (!cpp_demangle_read_tmpl_args(ddata))
2075 if (!cpp_demangle_push_subst(ddata, subst_str, substr_len + len))
2087 cpp_demangle_read_tmpl_arg(struct cpp_demangle_data *ddata)
2090 if (ddata == NULL || *ddata->cur == '\0')
2093 switch (*ddata->cur) {
2095 return (cpp_demangle_read_expr_primary(ddata));
2097 return (cpp_demangle_read_expression(ddata));
2100 return (cpp_demangle_read_type(ddata, 0));
2104 cpp_demangle_read_tmpl_args(struct cpp_demangle_data *ddata)
2110 if (ddata == NULL || *ddata->cur == '\0')
2113 ++ddata->cur;
2115 if (!vector_read_cmd_push(&ddata->cmd, READ_TMPL))
2118 if (!cpp_demangle_push_str(ddata, "<", 1))
2122 v = ddata->push_head > 0 ? &ddata->output_tmp : &ddata->output;
2125 if (!cpp_demangle_read_tmpl_arg(ddata))
2130 if (!vector_str_find(&ddata->tmpl, arg, arg_len) &&
2131 !vector_str_push(&ddata->tmpl, arg, arg_len)) {
2138 if (*ddata->cur == 'E') {
2139 ++ddata->cur;
2143 if (!cpp_demangle_push_str(ddata, " >", 2))
2145 } else if (!cpp_demangle_push_str(ddata, ">", 1))
2148 } else if (*ddata->cur != 'I' &&
2149 !cpp_demangle_push_str(ddata, ", ", 2))
2156 return (vector_read_cmd_pop(&ddata->cmd));
2164 cpp_demangle_read_tmpl_param(struct cpp_demangle_data *ddata)
2168 if (ddata == NULL || *ddata->cur != 'T')
2171 ++ddata->cur;
2173 if (*ddata->cur == '_')
2174 return (cpp_demangle_get_tmpl_param(ddata, 0));
2178 if ((nth = strtol(ddata->cur, (char **) NULL, 36)) == 0 &&
2185 while (*ddata->cur != '_')
2186 ++ddata->cur;
2190 return (cpp_demangle_get_tmpl_param(ddata, nth));
2198 cpp_demangle_read_type(struct cpp_demangle_data *ddata, int delimit)
2207 if (ddata == NULL)
2210 output = &ddata->output;
2211 if (!strncmp(ddata->output.container[ddata->output.size - 1], ">", 1)) {
2212 ddata->push_head++;
2213 output = &ddata->output_tmp;
2215 if (ddata->paren == false) {
2216 if (!cpp_demangle_push_str(ddata, "(", 1))
2218 if (ddata->output.size < 2)
2220 ddata->paren = true;
2221 ddata->pfirst = true;
2223 if (ddata->subst.size == 1 &&
2224 !vector_str_pop(&ddata->subst))
2228 if (ddata->pfirst)
2229 ddata->pfirst = false;
2230 else if (*ddata->cur != 'I' &&
2231 !cpp_demangle_push_str(ddata, ", ", 2))
2250 switch (*ddata->cur) {
2253 if (!cpp_demangle_push_str(ddata, "signed char", 11))
2255 ++ddata->cur;
2260 if (!cpp_demangle_read_array(ddata))
2267 if (!cpp_demangle_push_str(ddata, "bool", 4))
2269 ++ddata->cur;
2276 ++ddata->cur;
2281 if (!cpp_demangle_push_str(ddata, "char", 4))
2283 ++ddata->cur;
2288 if (!cpp_demangle_push_str(ddata, "double", 6))
2290 ++ddata->cur;
2294 ++ddata->cur;
2295 switch (*ddata->cur) {
2298 if (!cpp_demangle_push_str(ddata, "decimal64", 9))
2300 ++ddata->cur;
2304 if (!cpp_demangle_push_str(ddata, "decimal128", 10))
2306 ++ddata->cur;
2310 if (!cpp_demangle_push_str(ddata, "decimal32", 9))
2312 ++ddata->cur;
2316 if (!cpp_demangle_push_str(ddata, "half", 4))
2318 ++ddata->cur;
2322 if (!cpp_demangle_push_str(ddata, "char32_t", 8))
2324 ++ddata->cur;
2328 if (!cpp_demangle_push_str(ddata, "decltype(nullptr)",
2331 ++ddata->cur;
2335 if (!cpp_demangle_push_str(ddata, "char16_t", 8))
2337 ++ddata->cur;
2341 ++ddata->cur;
2342 if (*ddata->cur == '_') {
2343 ++ddata->cur;
2344 if (!cpp_demangle_read_expression_flat(ddata,
2351 if (!cpp_demangle_read_number_as_string(ddata,
2358 if (*ddata->cur != '_')
2360 ++ddata->cur;
2371 if (!cpp_demangle_push_str(ddata, "long double", 11))
2373 ++ddata->cur;
2378 if (!cpp_demangle_push_str(ddata, "float", 5))
2380 ++ddata->cur;
2385 if (!cpp_demangle_read_function(ddata, &extern_c, &v))
2392 if (!cpp_demangle_push_str(ddata, "__float128", 10))
2394 ++ddata->cur;
2401 ++ddata->cur;
2406 if (!cpp_demangle_push_str(ddata, "unsigned char", 13))
2408 ++ddata->cur;
2413 if (!cpp_demangle_push_str(ddata, "int", 3))
2415 ++ddata->cur;
2420 if (!cpp_demangle_push_str(ddata, "unsigned int", 12))
2422 ++ddata->cur;
2429 ++ddata->cur;
2434 if (!cpp_demangle_push_str(ddata, "long", 4))
2436 ++ddata->cur;
2441 if (!cpp_demangle_push_str(ddata, "unsigned long", 13))
2444 ++ddata->cur;
2449 if (!cpp_demangle_read_pointer_to_member(ddata))
2456 if (!cpp_demangle_push_str(ddata, "__int128", 8))
2458 ++ddata->cur;
2463 if (!cpp_demangle_push_str(ddata, "unsigned __int128", 17))
2465 ++ddata->cur;
2472 ++ddata->cur;
2479 ++ddata->cur;
2486 ++ddata->cur;
2491 if (!cpp_demangle_push_str(ddata, "short", 5))
2493 ++ddata->cur;
2498 if (!cpp_demangle_read_subst(ddata))
2505 if (!cpp_demangle_push_str(ddata, "unsigned short", 14))
2507 ++ddata->cur;
2512 if (!cpp_demangle_read_tmpl_param(ddata))
2519 ++ddata->cur;
2520 if (!cpp_demangle_read_sname(ddata))
2527 if (!cpp_demangle_read_number(ddata, &len))
2531 if (!vector_str_push(&v.ext_name, ddata->cur, len))
2533 ddata->cur += len;
2540 if (!cpp_demangle_push_str(ddata, "void", 4))
2542 ++ddata->cur;
2549 ++ddata->cur;
2554 if (!cpp_demangle_push_str(ddata, "wchar_t", 7))
2556 ++ddata->cur;
2561 if (!cpp_demangle_push_str(ddata, "long long", 9))
2563 ++ddata->cur;
2568 if (!cpp_demangle_push_str(ddata, "unsigned long long", 18))
2570 ++ddata->cur;
2575 if (!cpp_demangle_push_str(ddata, "ellipsis", 8))
2577 ++ddata->cur;
2581 if (!cpp_demangle_read_name(ddata))
2591 if (!vector_str_find(&ddata->subst, type_str, type_str_len) &&
2592 !vector_str_push(&ddata->subst, type_str, type_str_len))
2596 if (!cpp_demangle_push_type_qualifier(ddata, &v, type_str))
2604 if (ddata->push_head > 0) {
2605 if (*ddata->cur == 'I' && cpp_demangle_read_tmpl_args(ddata)
2609 if (--ddata->push_head > 0)
2612 if (!vector_str_push(&ddata->output_tmp, " ", 1))
2615 if (!vector_str_push_vector_head(&ddata->output,
2616 &ddata->output_tmp))
2619 vector_str_dest(&ddata->output_tmp);
2620 if (!vector_str_init(&ddata->output_tmp))
2623 if (!cpp_demangle_push_str(ddata, "(", 1))
2626 ddata->paren = true;
2627 ddata->pfirst = true;
2641 cpp_demangle_read_type_flat(struct cpp_demangle_data *ddata, char **str)
2647 output = ddata->push_head > 0 ? &ddata->output_tmp :
2648 &ddata->output;
2652 if (!cpp_demangle_read_type(ddata, 0))
2677 cpp_demangle_read_uqname(struct cpp_demangle_data *ddata)
2681 if (ddata == NULL || *ddata->cur == '\0')
2685 switch (SIMPLE_HASH(*ddata->cur, *(ddata->cur + 1))) {
2688 if (!cpp_demangle_push_str(ddata, "operator&&", 10))
2690 ddata->cur += 2;
2695 if (!cpp_demangle_push_str(ddata, "operator&", 9))
2697 ddata->cur += 2;
2702 if (!cpp_demangle_push_str(ddata, "operator&", 9))
2704 ddata->cur += 2;
2709 if (!cpp_demangle_push_str(ddata, "operator&=", 10))
2711 ddata->cur += 2;
2716 if (!cpp_demangle_push_str(ddata, "operator=", 9))
2718 ddata->cur += 2;
2723 if (!cpp_demangle_push_str(ddata, "operator()", 10))
2725 ddata->cur += 2;
2730 if (!cpp_demangle_push_str(ddata, "operator,", 9))
2732 ddata->cur += 2;
2737 if (!cpp_demangle_push_str(ddata, "operator~", 9))
2739 ddata->cur += 2;
2744 if (!cpp_demangle_push_str(ddata, "operator(cast)", 14))
2746 ddata->cur += 2;
2747 return (cpp_demangle_read_type(ddata, 1));
2751 if (!cpp_demangle_push_str(ddata, "operator delete []", 18))
2753 ddata->cur += 2;
2758 if (!cpp_demangle_push_str(ddata, "operator*", 9))
2760 ddata->cur += 2;
2765 if (!cpp_demangle_push_str(ddata, "operator delete", 15))
2767 ddata->cur += 2;
2772 if (!cpp_demangle_push_str(ddata, "operator/", 9))
2774 ddata->cur += 2;
2779 if (!cpp_demangle_push_str(ddata, "operator/=", 10))
2781 ddata->cur += 2;
2786 if (!cpp_demangle_push_str(ddata, "operator^", 9))
2788 ddata->cur += 2;
2793 if (!cpp_demangle_push_str(ddata, "operator^=", 10))
2795 ddata->cur += 2;
2800 if (!cpp_demangle_push_str(ddata, "operator==", 10))
2802 ddata->cur += 2;
2807 if (!cpp_demangle_push_str(ddata, "operator>=", 10))
2809 ddata->cur += 2;
2814 if (!cpp_demangle_push_str(ddata, "operator>", 9))
2816 ddata->cur += 2;
2821 if (!cpp_demangle_push_str(ddata, "operator[]", 10))
2823 ddata->cur += 2;
2828 if (!cpp_demangle_push_str(ddata, "operator<=", 10))
2830 ddata->cur += 2;
2835 if (!cpp_demangle_push_str(ddata, "operator<<", 10))
2837 ddata->cur += 2;
2842 if (!cpp_demangle_push_str(ddata, "operator<<=", 11))
2844 ddata->cur += 2;
2849 if (!cpp_demangle_push_str(ddata, "operator<", 9))
2851 ddata->cur += 2;
2856 if (!cpp_demangle_push_str(ddata, "operator-", 9))
2858 ddata->cur += 2;
2863 if (!cpp_demangle_push_str(ddata, "operator-=", 10))
2865 ddata->cur += 2;
2870 if (!cpp_demangle_push_str(ddata, "operator*", 9))
2872 ddata->cur += 2;
2877 if (!cpp_demangle_push_str(ddata, "operator*=", 10))
2879 ddata->cur += 2;
2884 if (!cpp_demangle_push_str(ddata, "operator--", 10))
2886 ddata->cur += 2;
2891 if (!cpp_demangle_push_str(ddata, "operator new []", 15))
2893 ddata->cur += 2;
2898 if (!cpp_demangle_push_str(ddata, "operator!=", 10))
2900 ddata->cur += 2;
2905 if (!cpp_demangle_push_str(ddata, "operator-", 9))
2907 ddata->cur += 2;
2912 if (!cpp_demangle_push_str(ddata, "operator!", 9))
2914 ddata->cur += 2;
2919 if (!cpp_demangle_push_str(ddata, "operator new", 12))
2921 ddata->cur += 2;
2926 if (!cpp_demangle_push_str(ddata, "operator||", 10))
2928 ddata->cur += 2;
2933 if (!cpp_demangle_push_str(ddata, "operator|", 9))
2935 ddata->cur += 2;
2940 if (!cpp_demangle_push_str(ddata, "operator|=", 10))
2942 ddata->cur += 2;
2947 if (!cpp_demangle_push_str(ddata, "operator+", 9))
2949 ddata->cur += 2;
2954 if (!cpp_demangle_push_str(ddata, "operator+=", 10))
2956 ddata->cur += 2;
2961 if (!cpp_demangle_push_str(ddata, "operator->*", 11))
2963 ddata->cur += 2;
2968 if (!cpp_demangle_push_str(ddata, "operator++", 10))
2970 ddata->cur += 2;
2975 if (!cpp_demangle_push_str(ddata, "operator+", 9))
2977 ddata->cur += 2;
2982 if (!cpp_demangle_push_str(ddata, "operator->", 10))
2984 ddata->cur += 2;
2989 if (!cpp_demangle_push_str(ddata, "operator?", 9))
2991 ddata->cur += 2;
2996 if (!cpp_demangle_push_str(ddata, "operator%", 9))
2998 ddata->cur += 2;
3003 if (!cpp_demangle_push_str(ddata, "operator%=", 10))
3005 ddata->cur += 2;
3010 if (!cpp_demangle_push_str(ddata, "operator>>", 10))
3012 ddata->cur += 2;
3017 if (!cpp_demangle_push_str(ddata, "operator>>=", 11))
3019 ddata->cur += 2;
3024 if (!cpp_demangle_push_str(ddata, "operator sizeof ", 16))
3026 ddata->cur += 2;
3031 if (!cpp_demangle_push_str(ddata, "scope resolution operator ",
3034 ddata->cur += 2;
3039 if (!cpp_demangle_push_str(ddata, "operator sizeof ", 16))
3041 ddata->cur += 2;
3046 if (*ddata->cur == 'v' && ELFTC_ISDIGIT(*(ddata->cur + 1))) {
3047 if (!cpp_demangle_push_str(ddata, "vendor extened operator ",
3050 if (!cpp_demangle_push_str(ddata, ddata->cur + 1, 1))
3052 ddata->cur += 2;
3053 return (cpp_demangle_read_sname(ddata));
3057 switch (SIMPLE_HASH(*ddata->cur, *(ddata->cur + 1))) {
3063 if (ddata->last_sname == NULL)
3065 if ((len = strlen(ddata->last_sname)) == 0)
3067 if (!cpp_demangle_push_str(ddata, "::", 2))
3069 if (!cpp_demangle_push_str(ddata, ddata->last_sname, len))
3071 ddata->cur +=2;
3079 if (ddata->last_sname == NULL)
3081 if ((len = strlen(ddata->last_sname)) == 0)
3083 if (!cpp_demangle_push_str(ddata, "::~", 3))
3085 if (!cpp_demangle_push_str(ddata, ddata->last_sname, len))
3087 ddata->cur +=2;
3092 if (ELFTC_ISDIGIT(*ddata->cur) != 0)
3093 return (cpp_demangle_read_sname(ddata));
3096 if (*ddata->cur == 'L')
3097 return (cpp_demangle_local_source_name(ddata));
3110 cpp_demangle_local_source_name(struct cpp_demangle_data *ddata)
3113 if (ddata == NULL || *ddata->cur != 'L')
3115 ++ddata->cur;
3118 if (!cpp_demangle_read_sname(ddata))
3122 if (*ddata->cur == '_') {
3123 ++ddata->cur;
3124 while (ELFTC_ISDIGIT(*ddata->cur) != 0)
3125 ++ddata->cur;
3132 cpp_demangle_read_v_offset(struct cpp_demangle_data *ddata)
3135 if (ddata == NULL)
3138 if (!cpp_demangle_push_str(ddata, "offset : ", 9))
3141 if (!cpp_demangle_read_offset_number(ddata))
3144 if (!cpp_demangle_push_str(ddata, "virtual offset : ", 17))
3147 return (!cpp_demangle_read_offset_number(ddata));