4 static void printtoken(void);
8 #define xx(a,b,c,d,e,f,g) f,
9 #define yy(a,b,c,d,e,f,g) f,
12 int wflag
; /* != 0 to suppress warning messages */
14 void test(int tok
, char set
[]) {
24 void expect(int tok
) {
28 error("syntax error; found");
30 fprint(stderr
, " expecting `%k'\n", tok
);
33 void error(const char *fmt
, ...) {
36 if (errcnt
++ >= errlimit
) {
38 error("too many errors\n");
42 if (firstfile
!= file
&& firstfile
&& *firstfile
)
43 fprint(stderr
, "%s: ", firstfile
);
44 fprint(stderr
, "%w: ", &src
);
45 vfprint(stderr
, NULL
, fmt
, ap
);
49 void skipto(int tok
, char set
[]) {
54 for (n
= 0; t
!= EOI
&& t
!= tok
; t
= gettok()) {
55 for (s
= set
; *s
&& kind
[t
] != *s
; s
++)
64 fprint(stderr
, " ...");
67 fprint(stderr
, " up to");
73 /* fatal - issue fatal error message and exit */
74 int fatal(const char *name
, const char *fmt
, int n
) {
77 error("compiler error in %s--", name
);
78 fprint(stderr
, fmt
, n
);
83 /* printtoken - print current token preceeded by a space */
84 static void printtoken(void) {
86 case ID
: fprint(stderr
, " `%s'", token
); break;
88 fprint(stderr
, " `%s'", vtoa(tsym
->type
, tsym
->u
.c
.v
));
92 if (ischar(tsym
->type
->type
)) {
93 char *s
= tsym
->u
.c
.v
.p
;
95 fprint(stderr
, " \"");
96 for (i
= 0; i
< 20 && i
< n
&& *s
; s
++, i
++)
97 if (*s
< ' ' || *s
>= 0177)
98 fprint(stderr
, "\\%o", *s
);
100 fprint(stderr
, "%c", *s
);
101 } else { /* wchar_t string */
102 unsigned int *s
= tsym
->u
.c
.v
.p
;
103 assert(tsym
->type
->type
->size
== widechar
->size
);
104 n
= tsym
->type
->size
/widechar
->size
;
105 fprint(stderr
, " L\"");
106 for (i
= 0; i
< 20 && i
< n
&& *s
; s
++, i
++)
107 if (*s
< ' ' || *s
>= 0177)
108 fprint(stderr
, "\\x%x", *s
);
110 fprint(stderr
, "%c", *s
);
113 fprint(stderr
, " ...");
115 fprint(stderr
, "\"");
119 fprint(stderr
, " `%S'", token
, (char*)cp
- token
);
121 case '`': case '\'': fprint(stderr
, " \"%k\"", t
); break;
122 default: fprint(stderr
, " `%k'", t
);
126 /* warning - issue warning error message */
127 void warning(const char *fmt
, ...) {
134 vfprint(stderr
, NULL
, fmt
, ap
);