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