Lines Matching refs:cp

42 static void parseline(char *cp);
43 static char *soudef(char *cp, enum type type, struct tdesc **rtdp);
44 static void enumdef(char *cp, struct tdesc **rtdp);
48 static char *number(char *cp, int *n);
49 static char *name(char *cp, char **w);
50 static char *id(char *cp, int *h);
51 static char *offsize(char *cp, struct mlist *mlp);
52 static char *whitesp(char *cp);
55 static void tagdecl(char *cp, struct tdesc **rtdp, int h, char *w);
56 static char *tdefdecl(char *cp, int h, struct tdesc **rtdp);
57 static char *intrinsic(char *cp, struct tdesc **rtdp);
58 static char *arraydef(char *cp, struct tdesc **rtdp);
67 debug(int level, char *cp, char *fmt, ...) in debug() argument
77 if (cp != NULL) { in debug()
79 if (cp[i] == '\0') in debug()
81 if (!iscntrl(cp[i])) in debug()
82 tmp[i] = cp[i]; in debug()
113 char *cp = fgets(linebuf, MAXLINE, stdin); in get_line() local
122 return (cp); in get_line()
129 char *cp = get_line(); in get_continuation() local
130 if (!cp) { in get_continuation()
137 while (*cp++ != '"') in get_continuation()
139 return (cp); in get_continuation()
145 char *cp; in parse_input() local
156 while ((cp = get_line()) != NULL) in parse_input()
157 parseline(cp); in parse_input()
165 parseline(char *cp) in parseline() argument
182 cp = whitesp(cp); in parseline()
184 debug(2, cp, "parseline"); in parseline()
185 if (strncmp(cp, ".stabs", STLEN) != 0) in parseline()
187 cp += STLEN; in parseline()
189 cp = whitesp(cp); in parseline()
190 if (*cp++ != '"') in parseline()
198 cp = whitesp(cp); in parseline()
199 cp = name(cp, &w); in parseline()
202 switch (c = *cp++) { in parseline()
215 cp = id(cp, &h); in parseline()
216 if (*cp == '"') { in parseline()
219 cp++; in parseline()
222 if (*cp++ != '=') /* better be defining it now */ in parseline()
223 expected("parseline/'0-9'", "=", cp - 1); in parseline()
224 cp = tdefdecl(cp, h, &tdp); in parseline()
236 } else if (*cp++ != '=') { in parseline()
237 expected("parseline", "=", cp - 1); in parseline()
240 tagdecl(cp, &tdp, h, w); in parseline()
242 tdefdecl(cp, h, &tdp); in parseline()
265 whitesp(char *cp) in whitesp() argument
269 orig = cp; in whitesp()
270 for (c = *cp++; isspace(c); c = *cp++) in whitesp()
272 --cp; in whitesp()
273 return (cp); in whitesp()
277 name(char *cp, char **w) in name() argument
282 orig = cp; in name()
283 c = *cp++; in name()
287 for (c = *cp++; isalnum(c) || c == ' ' || c == '_'; c = *cp++) in name()
291 len = cp - orig; in name()
293 while (orig < cp - 1) in name()
300 return (cp); in name()
304 number(char *cp, int *n) in number() argument
308 *n = (int)strtol(cp, &next, 10); in number()
309 if (next == cp) in number()
310 expected("number", "<number>", cp); in number()
315 id(char *cp, int *h) in id() argument
319 if (*cp == '(') { /* SunPro style */ in id()
320 cp++; in id()
321 cp = number(cp, &n1); in id()
322 if (*cp++ != ',') in id()
323 expected("id", ",", cp - 1); in id()
324 cp = number(cp, &n2); in id()
325 if (*cp++ != ')') in id()
326 expected("id", ")", cp - 1); in id()
328 } else if (isdigit(*cp)) { /* gcc style */ in id()
329 cp = number(cp, &n1); in id()
332 expected("id", "(/0-9", cp); in id()
334 return (cp); in id()
357 tagdecl(char *cp, struct tdesc **rtdp, int h, char *w) in tagdecl() argument
385 switch (*cp++) { in tagdecl()
387 soudef(cp, STRUCT, rtdp); in tagdecl()
390 soudef(cp, UNION, rtdp); in tagdecl()
393 enumdef(cp, rtdp); in tagdecl()
396 expected("tagdecl", "<tag type s/u/e>", cp - 1); in tagdecl()
402 tdefdecl(char *cp, int h, struct tdesc **rtdp) in tdefdecl() argument
409 debug(3, cp, "tdefdecl h=%d", h); in tdefdecl()
412 switch (type = *cp) { in tdefdecl()
414 c = *++cp; in tdefdecl()
416 expected("tdefdecl/b", "[su]", cp - 1); in tdefdecl()
417 c = *++cp; in tdefdecl()
419 cp++; in tdefdecl()
420 cp = intrinsic(cp, rtdp); in tdefdecl()
424 while (*cp++ != ';') in tdefdecl()
426 cp = intrinsic(cp, rtdp); in tdefdecl()
429 cp = id(cp, &h2); in tdefdecl()
432 if (*cp++ != '=') /* better be defining it now */ in tdefdecl()
433 expected("tdefdecl/'('", "=", cp - 1); in tdefdecl()
434 cp = tdefdecl(cp, h2, rtdp); in tdefdecl()
447 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
449 expected("tdefdecl/*", "id", cp); in tdefdecl()
458 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
466 cp++; in tdefdecl()
467 if (*cp++ != 'r') in tdefdecl()
468 expected("tdefdecl/a", "r", cp - 1); in tdefdecl()
472 cp = arraydef(cp, rtdp); in tdefdecl()
475 c = *++cp; in tdefdecl()
477 expected("tdefdecl/x", "[sue]", cp - 1); in tdefdecl()
478 cp = name(cp + 1, &w); in tdefdecl()
484 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
492 cp = tdefdecl(cp + 1, h, &ntdp); in tdefdecl()
502 cp = id(cp, &h2); in tdefdecl()
506 if (*cp++ != '=') { in tdefdecl()
508 expected("tdefdecl/'0-9'", "=", cp - 1); in tdefdecl()
515 cp = tdefdecl(cp, h2, rtdp); in tdefdecl()
529 cp++; in tdefdecl()
533 cp = soudef(cp, (type == 'u') ? UNION : STRUCT, rtdp); in tdefdecl()
536 expected("tdefdecl", "<type code>", cp); in tdefdecl()
538 return (cp); in tdefdecl()
542 intrinsic(char *cp, struct tdesc **rtdp) in intrinsic() argument
547 cp = number(cp, &size); in intrinsic()
554 return (cp); in intrinsic()
558 soudef(char *cp, enum type type, struct tdesc **rtdp) in soudef() argument
565 cp = number(cp, &size); in soudef()
575 if (cp[0] == '@') in soudef()
576 cp += 3; in soudef()
578 debug(3, cp, "soudef: %s size=%d", in soudef()
584 while ((*cp != '"') && (*cp != ';')) { /* signifies end of fields */ in soudef()
593 cp = name(cp, &w); in soudef()
595 cp = id(cp, &h); in soudef()
603 if (*cp++ != '=') in soudef()
604 expected("soudef", "=", cp - 1); in soudef()
605 cp = tdefdecl(cp, h, &tdp); in soudef()
607 debug(4, cp, " soudef now looking at "); in soudef()
608 cp++; in soudef()
616 cp = offsize(cp, mlp); /* cp is now pointing to next field */ in soudef()
617 if (*cp == '\\') /* could be a continuation */ in soudef()
618 cp = get_continuation(); in soudef()
621 return (cp); in soudef()
625 offsize(char *cp, struct mlist *mlp) in offsize() argument
629 if (*cp == ',') in offsize()
630 cp++; in offsize()
631 cp = number(cp, &offset); in offsize()
632 if (*cp++ != ',') in offsize()
633 expected("offsize/2", ",", cp - 1); in offsize()
634 cp = number(cp, &size); in offsize()
635 if (*cp++ != ';') in offsize()
636 expected("offsize/3", ";", cp - 1); in offsize()
639 return (cp); in offsize()
643 arraydef(char *cp, struct tdesc **rtdp) in arraydef() argument
648 cp = id(cp, &h); in arraydef()
649 if (*cp++ != ';') in arraydef()
650 expected("arraydef/1", ";", cp - 1); in arraydef()
656 cp = number(cp, &start); /* lower */ in arraydef()
657 if (*cp++ != ';') in arraydef()
658 expected("arraydef/2", ";", cp - 1); in arraydef()
659 cp = number(cp, &end); /* upper */ in arraydef()
660 if (*cp++ != ';') in arraydef()
661 expected("arraydef/3", ";", cp - 1); in arraydef()
665 if (isdigit(*cp)) { in arraydef()
666 cp = number(cp, &contents_type); /* lower */ in arraydef()
671 if (*cp != '=') in arraydef()
672 expected("arraydef/4", "=", cp); in arraydef()
673 cp = tdefdecl(cp + 1, h, &tdp); in arraydef()
679 cp = tdefdecl(cp, h, &((*rtdp)->data.ardef->contents)); in arraydef()
680 return (cp); in arraydef()
684 enumdef(char *cp, struct tdesc **rtdp) in enumdef() argument
693 while (*cp != ';') { in enumdef()
697 cp = name(cp, &w); in enumdef()
699 cp = number(cp, &elp->number); in enumdef()
704 if (*cp++ != ',') in enumdef()
705 expected("enumdef", ",", cp - 1); in enumdef()
706 if (*cp == '\\') in enumdef()
707 cp = get_continuation(); in enumdef()