Lines Matching refs:cp

62 static char *soudef(char *cp, stabtype_t type, tdesc_t **rtdp);
63 static void enumdef(char *cp, tdesc_t **rtdp);
66 static char *number(char *cp, int *n);
67 static char *name(char *cp, char **w);
68 static char *id(char *cp, int *h);
69 static char *whitesp(char *cp);
72 static char *tdefdecl(char *cp, int h, tdesc_t **rtdp);
73 static char *intrinsic(char *cp, tdesc_t **rtdp);
74 static char *arraydef(char *cp, tdesc_t **rtdp);
81 parse_debug(int level, char *cp, char *fmt, ...) in parse_debug() argument
91 if (cp != NULL) { in parse_debug()
93 if (cp[i] == '\0') in parse_debug()
95 if (!iscntrl(cp[i])) in parse_debug()
96 tmp[i] = cp[i]; in parse_debug()
160 read_tid(char *cp, tdesc_t **tdpp) in read_tid() argument
165 cp = id(cp, &tid); in read_tid()
169 if (*cp == '=') { in read_tid()
170 if (!(cp = tdefdecl(cp + 1, tid, &tdp))) in read_tid()
184 return (cp); in read_tid()
188 parse_fun(char *cp, iidesc_t *ii) in parse_fun() argument
201 switch (*cp++) { in parse_fun()
215 expected("parse_nfun", "[PfF]", cp - 1); in parse_fun()
218 if (!(cp = read_tid(cp, &tdp))) in parse_fun()
221 if (*cp) in parse_fun()
224 while (*cp && *++cp) { in parse_fun()
225 if (*cp == '0') { in parse_fun()
233 if (!(cp = read_tid(cp, &args[nargs - 1]))) in parse_fun()
247 parse_sym(char *cp, iidesc_t *ii) in parse_sym() argument
256 switch (*cp++) { in parse_sym()
267 cp--; in parse_sym()
274 expected("parse_sym", "[GprSV(]", cp - 1); in parse_sym()
277 if (!(cp = read_tid(cp, &tdp))) in parse_sym()
287 parse_type(char *cp, iidesc_t *ii) in parse_type() argument
292 if (*cp++ != 't') in parse_type()
293 expected("parse_type", "t (type)", cp - 1); in parse_type()
295 cp = id(cp, &tid); in parse_type()
297 if (*cp++ != '=') in parse_type()
298 expected("parse_type", "= (definition)", cp - 1); in parse_type()
300 (void) tdefdecl(cp, tid, &tdp); in parse_type()
344 parse_sou(char *cp, iidesc_t *idp) in parse_sou() argument
349 if (*cp++ != 'T') in parse_sou()
350 expected("parse_sou", "T (sou)", cp - 1); in parse_sou()
352 cp = id(cp, &tid); in parse_sou()
353 if (*cp++ != '=') in parse_sou()
354 expected("parse_sou", "= (definition)", cp - 1); in parse_sou()
382 switch (*cp++) { in parse_sou()
384 (void) soudef(cp, STRUCT, &rtdp); in parse_sou()
387 (void) soudef(cp, UNION, &rtdp); in parse_sou()
390 enumdef(cp, &rtdp); in parse_sou()
393 expected("parse_sou", "<tag type s/u/e>", cp - 1); in parse_sou()
403 parse_stab(stab_t *stab, char *cp, iidesc_t **iidescp) in parse_stab() argument
415 cp = whitesp(cp); in parse_stab()
417 cp = name(cp, &ii->ii_name); in parse_stab()
425 if (*cp == 't') in parse_stab()
427 else if (*cp == 'T') in parse_stab()
442 parse_debug(1, cp, "Unknown stab type %#x", stab->n_type); in parse_stab()
447 rc = parse(cp, ii); in parse_stab()
478 whitesp(char *cp) in whitesp() argument
482 for (c = *cp++; isspace(c); c = *cp++) in whitesp()
484 --cp; in whitesp()
485 return (cp); in whitesp()
489 name(char *cp, char **w) in name() argument
494 orig = cp; in name()
495 c = *cp++; in name()
499 for (c = *cp++; isalnum(c) || strchr(" _.$#", c); c = *cp++) in name()
503 len = cp - orig; in name()
505 while (orig < cp - 1) in name()
512 return (cp); in name()
516 number(char *cp, int *n) in number() argument
520 *n = (int)strtol(cp, &next, 10); in number()
521 if (next == cp) in number()
522 expected("number", "<number>", cp); in number()
527 id(char *cp, int *h) in id() argument
531 if (*cp == '(') { /* SunPro style */ in id()
532 cp++; in id()
533 cp = number(cp, &n1); in id()
534 if (*cp++ != ',') in id()
535 expected("id", ",", cp - 1); in id()
536 cp = number(cp, &n2); in id()
537 if (*cp++ != ')') in id()
538 expected("id", ")", cp - 1); in id()
540 } else if (isdigit(*cp)) { /* gcc style */ in id()
541 cp = number(cp, &n1); in id()
544 expected("id", "(/0-9", cp); in id()
546 return (cp); in id()
570 tdefdecl(char *cp, int h, tdesc_t **rtdp) in tdefdecl() argument
577 parse_debug(3, cp, "tdefdecl h=%d", h); in tdefdecl()
580 switch (type = *cp) { in tdefdecl()
583 cp = intrinsic(cp, rtdp); in tdefdecl()
586 cp = id(cp, &h2); in tdefdecl()
589 if (ntdp != NULL && *cp == '=') { in tdefdecl()
590 if (ntdp->t_type == FORWARD && *(cp + 1) == 'x') { in tdefdecl()
600 char *c2 = cp + 2; in tdefdecl()
628 if (*cp != '=') { in tdefdecl()
637 cp++; in tdefdecl()
640 cp = tdefdecl(cp, h2, rtdp); in tdefdecl()
662 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
664 expected("tdefdecl/*", "id", cp); in tdefdecl()
676 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
694 cp++; in tdefdecl()
695 if (*cp++ != 'r') in tdefdecl()
696 expected("tdefdecl/[az]", "r", cp - 1); in tdefdecl()
700 cp = arraydef(cp, rtdp); in tdefdecl()
703 c = *++cp; in tdefdecl()
705 expected("tdefdecl/x", "[sue]", cp - 1); in tdefdecl()
706 cp = name(cp + 1, &w); in tdefdecl()
721 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
734 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
747 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
761 cp++; in tdefdecl()
765 cp = soudef(cp, (type == 'u') ? UNION : STRUCT, rtdp); in tdefdecl()
768 expected("tdefdecl", "<type code>", cp); in tdefdecl()
770 return (cp); in tdefdecl()
774 intrinsic(char *cp, tdesc_t **rtdp) in intrinsic() argument
780 switch (*cp++) { in intrinsic()
783 if (*cp == 's') in intrinsic()
785 else if (*cp != 'u') in intrinsic()
786 expected("intrinsic/b", "[su]", cp); in intrinsic()
787 cp++; in intrinsic()
789 if (strchr("cbv", *cp)) in intrinsic()
790 intr->intr_iformat = *cp++; in intrinsic()
792 cp = number(cp, &width); in intrinsic()
793 if (*cp++ != ';') in intrinsic()
794 expected("intrinsic/b", "; (post-width)", cp - 1); in intrinsic()
796 cp = number(cp, &intr->intr_offset); in intrinsic()
797 if (*cp++ != ';') in intrinsic()
798 expected("intrinsic/b", "; (post-offset)", cp - 1); in intrinsic()
800 cp = number(cp, &intr->intr_nbits); in intrinsic()
805 for (fmt = 0, i = 0; isdigit(*(cp + i)); i++) in intrinsic()
806 fmt = fmt * 10 + (*(cp + i) - '0'); in intrinsic()
809 expected("intrinsic/R", "number <= CTF_FP_MAX", cp); in intrinsic()
812 cp += i; in intrinsic()
814 if (*cp++ != ';') in intrinsic()
815 expected("intrinsic/R", ";", cp - 1); in intrinsic()
816 cp = number(cp, &width); in intrinsic()
830 return (cp); in intrinsic()
850 offsize(char *cp, mlist_t *mlp) in offsize() argument
854 if (*cp == ',') in offsize()
855 cp++; in offsize()
856 cp = number(cp, &offset); in offsize()
857 if (*cp++ != ',') in offsize()
858 expected("offsize/2", ",", cp - 1); in offsize()
859 cp = number(cp, &size); in offsize()
860 if (*cp++ != ';') in offsize()
861 expected("offsize/3", ";", cp - 1); in offsize()
864 return (cp); in offsize()
886 soudef(char *cp, stabtype_t type, tdesc_t **rtdp) in soudef() argument
894 cp = number(cp, &size); in soudef()
904 if (cp[0] == '@') { in soudef()
905 cp += 3; in soudef()
908 parse_debug(3, cp, "soudef: %s size=%d", tdesc_name(*rtdp), in soudef()
913 while ((*cp != '\0') && (*cp != ';')) { /* signifies end of fields */ in soudef()
916 cp = name(cp, &w); in soudef()
918 cp = id(cp, &h); in soudef()
926 if (*cp++ != '=') { in soudef()
932 cp = tdefdecl(cp, h, &tdp); in soudef()
943 parse_debug(4, cp, in soudef()
945 cp++; in soudef()
952 cp = offsize(cp, mlp); in soudef()
957 parse_debug(4, cp, "making %d bit intrinsic " in soudef()
972 return (cp); in soudef()
976 arraydef(char *cp, tdesc_t **rtdp) in arraydef() argument
980 cp = id(cp, &h); in arraydef()
981 if (*cp++ != ';') in arraydef()
982 expected("arraydef/1", ";", cp - 1); in arraydef()
987 cp = number(cp, &start); /* lower */ in arraydef()
988 if (*cp++ != ';') in arraydef()
989 expected("arraydef/2", ";", cp - 1); in arraydef()
991 if (*cp == 'S') { in arraydef()
1003 cp++; in arraydef()
1004 if (*cp == '-') in arraydef()
1005 cp++; in arraydef()
1006 cp = number(cp, &end); in arraydef()
1014 cp = number(cp, &end); /* upper */ in arraydef()
1017 if (*cp++ != ';') in arraydef()
1018 expected("arraydef/3", ";", cp - 1); in arraydef()
1020 cp = tdefdecl(cp, h, &((*rtdp)->t_ardef->ad_contents)); in arraydef()
1022 parse_debug(3, cp, "defined array idx type %d %d-%d next ", in arraydef()
1025 return (cp); in arraydef()
1029 enumdef(char *cp, tdesc_t **rtdp) in enumdef() argument
1038 while (*cp != ';') { in enumdef()
1042 cp = name(cp, &w); in enumdef()
1044 cp = number(cp, &elp->el_number); in enumdef()
1048 if (*cp++ != ',') in enumdef()
1049 expected("enumdef", ",", cp - 1); in enumdef()