annotate lib-src/=aixcc.lex @ 468:9b11b9478c68

Initial revision
author Richard M. Stallman <rms@gnu.org>
date Sat, 21 Dec 1991 05:04:13 +0000
parents
children ffa6d5c9b074
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
468
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 %Start ErrorText ErrorMessage OtherText
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 EC [0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 D [0-9]
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 D3 [0-9 ][0-9 ][0-9]
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 D4 [0-9 ][0-9 ][0-9 ][0-9]
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 D5 [0-9 ][0-9 ][0-9 ][0-9 ][0-9]
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 DS [0-9 ]
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 %{
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 * Hack to work around the AIX C compiler's brain-damaged error messages
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 * so that emacs can parse them. It runs /bin/cc as a subprocess, and
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 * tries to rearrange the error messages so that (a) each message contains
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 * both the filename and line number where the error occurred, and (b)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 * the error message(s) for a particular line get displayed *before* the
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 * line itself.
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 *
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 * to compile:
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 * lex aixcc.lex
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 * cc -o aixcc lex.yy.c
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 *
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 *
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 * Copyright December 1991 by Keith Moore
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 *
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 * This program is free software; you can redistribute it and/or modify
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 * it under the terms of the GNU General Public License as published by
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 * the Free Software Foundation; either version 2 of the License, or
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 * (at your option) any later version.
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 *
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 * This program is distributed in the hope that it will be useful,
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 * GNU General Public License for more details.
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 *
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 * You should have received a copy of the GNU General Public License
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 * along with this program; if not, write to the Free Software
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 *
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 *
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 * TODO: figure out how the compiler counts file numbers for included
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 * files, keep track of which file corresponds to which number, and
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 * always output the right file name.
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 #include <stdio.h>
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 #include <string.h>
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 char *current_file;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 int line;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 int debug = 0;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 char bigbuf[10240];
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 char *bufptr = bigbuf;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 int last_line_was_error = 0;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 spaces (s)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 char *s;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 while (*s++)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 *bufptr++ = ' ';
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 char *
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 strsave (s)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 char *s;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 char *ptr = malloc (strlen (s) + 1);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 strcpy (ptr, s);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 return ptr;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 yywrap ()
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 *bufptr = '\0';
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 bufptr = bigbuf;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 while (*bufptr)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 putc (*bufptr++, yyout);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 return 1;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 %}
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 %%
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ^File\ Line\ Column\ Message\ text[^\n]* {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 * ignore this. don't treat it as error text
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ^{DS}{DS}{DS}\ {D5}\ \| {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 * (optional) nesting level, followed by line number, followed
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 * by the source code fragment that caused the error
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 * save the line number for later
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 line = atoi (yytext+4);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 if (debug) {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 fprintf (yyout, "line <= %d\n", line);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 fprintf (yyout, "%s\n", yytext);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 * if the last line was an error message, to flush out all of
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 * the old source text before starting to save the new source text.
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 if (last_line_was_error) {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 *bufptr = '\0';
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 bufptr = bigbuf;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 while (*bufptr)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 putc (*bufptr++, yyout);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 bufptr = bigbuf;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 last_line_was_error = 0;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 * stuff enough spaces in the text buffer so that the
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 * saved text will line up properly when displayed.
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 spaces (yytext);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 BEGIN ErrorText; /* continue below */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 <ErrorText>[^\n]*$ {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 char *ptr;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 * Save the text until we see the error message(s), then print it.
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 * This because emacs puts the error message at the top of the
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 * window, and it's nice to be able to see the text below it.
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 ptr = yytext;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 while (*ptr)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 *bufptr++ = *ptr++;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 *bufptr++ = '\n';
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 BEGIN 0;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 ^Processing\ include\ file\ .*$ {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 * name of a new include file being processed. Increment file number
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 * and remember the file name corresponding to this file number.
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 current_file = strsave (yytext+24);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 if (debug) {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 fprintf (yyout, "current_file <= %s\n", current_file);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 fprintf (yyout, "%s\n", yytext);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 ^([a-z]\ -)?\ *{EC}: {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 * error message (which we print immediately) preceeded by an
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 * error code (which we ignore)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 fprintf (yyout, "\"%s\", line %d: %c -", current_file, line, *yytext);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 last_line_was_error = 1;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 BEGIN ErrorMessage;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 ^{D3}\ {D5}\ {D4}\ {EC}: {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 * (optional) nesting level, followed by line number, followed
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 * by column number, followed by error message text.
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 * save the line number for later
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 line = atoi (yytext+4);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 if (debug) {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 fprintf (yyout, "line <= %d\n", line);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 fprintf (yyout, "%s\n", yytext);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 * if the last line was an error message, flush out all of
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 * the old source text before printing this error message.
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 if (last_line_was_error) {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 *bufptr = '\0';
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 bufptr = bigbuf;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 while (*bufptr)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 putc (*bufptr++, yyout);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 bufptr = bigbuf;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 last_line_was_error = 0;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 fprintf (yyout, "\"%s\", line %d:", current_file, line);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 last_line_was_error = 1;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 BEGIN ErrorMessage;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 <ErrorMessage>[^\n]*$ {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 fprintf (yyout, "%s\n", yytext);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 BEGIN 0;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 ^[^ :]+".c:"\ *$ {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 /* name of new source file being processed */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 char *ptr;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 if (current_file)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 free (current_file);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 ptr = strchr (yytext, ':');
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 *ptr = '\0';
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 current_file = strsave (yytext);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 ^[^\n] {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 /*
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 * other text starting with a newline. We have to break it up this
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 * way to keep this rule from matching any of the above patterns
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 */
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 if (last_line_was_error) {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 *bufptr = '\0';
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 bufptr = bigbuf;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 while (*bufptr)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 putc (*bufptr++, yyout);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 bufptr = bigbuf;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 last_line_was_error = 0;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 *bufptr++ = *yytext;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 BEGIN OtherText;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 <OtherText>[^\n]*$ {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 char *ptr;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 ptr = yytext;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 while (*ptr)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 *bufptr++ = *ptr++;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 *bufptr++ = '\n';
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 BEGIN 0;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 \n ;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 %%
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 main (argc, argv)
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 char **argv;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 int pfd[2];
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 int child_pid;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 int i;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 current_file = strsave ("/dev/null");
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 line = 0;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 for (i = 1; i < argc; ++i) {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 char *ptr = strrchr (argv[i], '.');
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 if (ptr && ptr[1] == 'c' && ptr[2] == '\0') {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 current_file = strsave (argv[i]);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 break;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 if (pipe (pfd) < 0) {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 perror ("pipe");
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 exit (1);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 if ((child_pid = fork()) > 0) {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 int status;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 close (pfd[1]);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 yyin = fdopen (pfd[0], "r");
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 yyout = stderr;
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 yylex();
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 wait (&status);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 exit ((status >> 8) & 0xff);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 else if (child_pid == 0) {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 dup2 (pfd[1], 2);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 close (pfd[0]);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 close (pfd[1]);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 argv[0] = "cc";
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 execv ("/bin/cc", argv);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 perror ("/bin/cc");
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 exit (1);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 else {
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 perror ("fork");
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 exit (1);
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 }
9b11b9478c68 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 }