GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: usr.bin/yacc/skeleton.c Lines: 5 5 100.0 %
Date: 2017-11-07 Branches: 3 4 75.0 %

Line Branch Exec Source
1
/*	$OpenBSD: skeleton.c,v 1.39 2015/12/31 23:22:39 guenther Exp $	*/
2
/*	$NetBSD: skeleton.c,v 1.10 1996/03/25 00:36:18 mrg Exp $	*/
3
4
/*
5
 * Copyright (c) 1989 The Regents of the University of California.
6
 * All rights reserved.
7
 *
8
 * This code is derived from software contributed to Berkeley by
9
 * Robert Paul Corbett.
10
 *
11
 * Redistribution and use in source and binary forms, with or without
12
 * modification, are permitted provided that the following conditions
13
 * are met:
14
 * 1. Redistributions of source code must retain the above copyright
15
 *    notice, this list of conditions and the following disclaimer.
16
 * 2. Redistributions in binary form must reproduce the above copyright
17
 *    notice, this list of conditions and the following disclaimer in the
18
 *    documentation and/or other materials provided with the distribution.
19
 * 3. Neither the name of the University nor the names of its contributors
20
 *    may be used to endorse or promote products derived from this software
21
 *    without specific prior written permission.
22
 *
23
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33
 * SUCH DAMAGE.
34
 */
35
36
#include "defs.h"
37
38
/*  The definition of yysccsid in the banner should be replaced with	*/
39
/*  a #pragma ident directive if the target C compiler supports		*/
40
/*  #pragma ident directives.						*/
41
/*									*/
42
/*  If the skeleton is changed, the banner should be changed so that	*/
43
/*  the altered version can be easily distinguished from the original.	*/
44
/*									*/
45
/*  The #defines included with the banner are there because they are	*/
46
/*  useful in subsequent code.  The macros #defined in the header or	*/
47
/*  the body either are not useful outside of semantic actions or	*/
48
/*  are conditional.							*/
49
50
char *banner[] =
51
{
52
	"#include <stdlib.h>",
53
	"#include <string.h>",
54
	"#define YYBYACC 1",
55
	"#define YYMAJOR 1",
56
	"#define YYMINOR 9",
57
	"#define YYLEX yylex()",
58
	"#define YYEMPTY -1",
59
	"#define yyclearin (yychar=(YYEMPTY))",
60
	"#define yyerrok (yyerrflag=0)",
61
	"#define YYRECOVERING() (yyerrflag!=0)",
62
	NULL
63
};
64
65
66
char *tables[] =
67
{
68
	"extern const short yylhs[];",
69
	"extern const short yylen[];",
70
	"extern const short yydefred[];",
71
	"extern const short yydgoto[];",
72
	"extern const short yysindex[];",
73
	"extern const short yyrindex[];",
74
	"extern const short yygindex[];",
75
	"extern const short yytable[];",
76
	"extern const short yycheck[];",
77
	"#if YYDEBUG",
78
	"extern const char *const yyname[];",
79
	"extern const char *const yyrule[];",
80
	"#endif",
81
	NULL
82
};
83
84
85
char *header[] =
86
{
87
	"#ifdef YYSTACKSIZE",
88
	"#undef YYMAXDEPTH",
89
	"#define YYMAXDEPTH YYSTACKSIZE",
90
	"#else",
91
	"#ifdef YYMAXDEPTH",
92
	"#define YYSTACKSIZE YYMAXDEPTH",
93
	"#else",
94
	"#define YYSTACKSIZE 10000",
95
	"#define YYMAXDEPTH 10000",
96
	"#endif",
97
	"#endif",
98
	"#define YYINITSTACKSIZE 200",
99
	"/* LINTUSED */",
100
	"int yydebug;",
101
	"int yynerrs;",
102
	"int yyerrflag;",
103
	"int yychar;",
104
	"short *yyssp;",
105
	"YYSTYPE *yyvsp;",
106
	"YYSTYPE yyval;",
107
	"YYSTYPE yylval;",
108
	"short *yyss;",
109
	"short *yysslim;",
110
	"YYSTYPE *yyvs;",
111
	"unsigned int yystacksize;",
112
	"int yyparse(void);",
113
	NULL
114
};
115
116
117
char *body[] =
118
{
119
	"/* allocate initial stack or double stack size, up to YYMAXDEPTH */",
120
	"static int yygrowstack(void)",
121
	"{",
122
	"    unsigned int newsize;",
123
	"    long sslen;",
124
	"    short *newss;",
125
	"    YYSTYPE *newvs;",
126
	"",
127
	"    if ((newsize = yystacksize) == 0)",
128
	"        newsize = YYINITSTACKSIZE;",
129
	"    else if (newsize >= YYMAXDEPTH)",
130
	"        return -1;",
131
	"    else if ((newsize *= 2) > YYMAXDEPTH)",
132
	"        newsize = YYMAXDEPTH;",
133
	"    sslen = yyssp - yyss;",
134
	"#ifdef SIZE_MAX",
135
	"#define YY_SIZE_MAX SIZE_MAX",
136
	"#else",
137
	"#define YY_SIZE_MAX 0xffffffffU",
138
	"#endif",
139
	"    if (newsize && YY_SIZE_MAX / newsize < sizeof *newss)",
140
	"        goto bail;",
141
	"    newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :",
142
	"      (short *)malloc(newsize * sizeof *newss); /* overflow check above */",
143
	"    if (newss == NULL)",
144
	"        goto bail;",
145
	"    yyss = newss;",
146
	"    yyssp = newss + sslen;",
147
	"    if (newsize && YY_SIZE_MAX / newsize < sizeof *newvs)",
148
	"        goto bail;",
149
	"    newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :",
150
	"      (YYSTYPE *)malloc(newsize * sizeof *newvs); /* overflow check above */",
151
	"    if (newvs == NULL)",
152
	"        goto bail;",
153
	"    yyvs = newvs;",
154
	"    yyvsp = newvs + sslen;",
155
	"    yystacksize = newsize;",
156
	"    yysslim = yyss + newsize - 1;",
157
	"    return 0;",
158
	"bail:",
159
	"    if (yyss)",
160
	"            free(yyss);",
161
	"    if (yyvs)",
162
	"            free(yyvs);",
163
	"    yyss = yyssp = NULL;",
164
	"    yyvs = yyvsp = NULL;",
165
	"    yystacksize = 0;",
166
	"    return -1;",
167
	"}",
168
	"",
169
	"#define YYABORT goto yyabort",
170
	"#define YYREJECT goto yyabort",
171
	"#define YYACCEPT goto yyaccept",
172
	"#define YYERROR goto yyerrlab",
173
	"int",
174
	"yyparse(void)",
175
	"{",
176
	"    int yym, yyn, yystate;",
177
	"#if YYDEBUG",
178
	"    const char *yys;",
179
	"",
180
	"    if ((yys = getenv(\"YYDEBUG\")))",
181
	"    {",
182
	"        yyn = *yys;",
183
	"        if (yyn >= '0' && yyn <= '9')",
184
	"            yydebug = yyn - '0';",
185
	"    }",
186
	"#endif /* YYDEBUG */",
187
	"",
188
	"    yynerrs = 0;",
189
	"    yyerrflag = 0;",
190
	"    yychar = (-1);",
191
	"",
192
	"    if (yyss == NULL && yygrowstack()) goto yyoverflow;",
193
	"    yyssp = yyss;",
194
	"    yyvsp = yyvs;",
195
	"    *yyssp = yystate = 0;",
196
	"",
197
	"yyloop:",
198
	"    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;",
199
	"    if (yychar < 0)",
200
	"    {",
201
	"        if ((yychar = yylex()) < 0) yychar = 0;",
202
	"#if YYDEBUG",
203
	"        if (yydebug)",
204
	"        {",
205
	"            yys = 0;",
206
	"            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
207
	"            if (!yys) yys = \"illegal-symbol\";",
208
	"            printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
209
	"                    YYPREFIX, yystate, yychar, yys);",
210
	"        }",
211
	"#endif",
212
	"    }",
213
	"    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&",
214
	"            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
215
	"    {",
216
	"#if YYDEBUG",
217
	"        if (yydebug)",
218
	"            printf(\"%sdebug: state %d, shifting to state %d\\n\",",
219
	"                    YYPREFIX, yystate, yytable[yyn]);",
220
	"#endif",
221
	"        if (yyssp >= yysslim && yygrowstack())",
222
	"        {",
223
	"            goto yyoverflow;",
224
	"        }",
225
	"        *++yyssp = yystate = yytable[yyn];",
226
	"        *++yyvsp = yylval;",
227
	"        yychar = (-1);",
228
	"        if (yyerrflag > 0)  --yyerrflag;",
229
	"        goto yyloop;",
230
	"    }",
231
	"    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&",
232
	"            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
233
	"    {",
234
	"        yyn = yytable[yyn];",
235
	"        goto yyreduce;",
236
	"    }",
237
	"    if (yyerrflag) goto yyinrecovery;",
238
	"#if defined(__GNUC__)",
239
	"    goto yynewerror;",
240
	"#endif",
241
	"yynewerror:",
242
	"    yyerror(\"syntax error\");",
243
	"#if defined(__GNUC__)",
244
	"    goto yyerrlab;",
245
	"#endif",
246
	"yyerrlab:",
247
	"    ++yynerrs;",
248
	"yyinrecovery:",
249
	"    if (yyerrflag < 3)",
250
	"    {",
251
	"        yyerrflag = 3;",
252
	"        for (;;)",
253
	"        {",
254
	"            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&",
255
	"                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)",
256
	"            {",
257
	"#if YYDEBUG",
258
	"                if (yydebug)",
259
	"                    printf(\"%sdebug: state %d, error recovery shifting\\",
260
	" to state %d\\n\", YYPREFIX, *yyssp, yytable[yyn]);",
261
	"#endif",
262
	"                if (yyssp >= yysslim && yygrowstack())",
263
	"                {",
264
	"                    goto yyoverflow;",
265
	"                }",
266
	"                *++yyssp = yystate = yytable[yyn];",
267
	"                *++yyvsp = yylval;",
268
	"                goto yyloop;",
269
	"            }",
270
	"            else",
271
	"            {",
272
	"#if YYDEBUG",
273
	"                if (yydebug)",
274
	"                    printf(\"%sdebug: error recovery discarding state %d\
275
\\n\",",
276
	"                            YYPREFIX, *yyssp);",
277
	"#endif",
278
	"                if (yyssp <= yyss) goto yyabort;",
279
	"                --yyssp;",
280
	"                --yyvsp;",
281
	"            }",
282
	"        }",
283
	"    }",
284
	"    else",
285
	"    {",
286
	"        if (yychar == 0) goto yyabort;",
287
	"#if YYDEBUG",
288
	"        if (yydebug)",
289
	"        {",
290
	"            yys = 0;",
291
	"            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
292
	"            if (!yys) yys = \"illegal-symbol\";",
293
	"            printf(\"%sdebug: state %d, error recovery discards token %d\
294
 (%s)\\n\",",
295
	"                    YYPREFIX, yystate, yychar, yys);",
296
	"        }",
297
	"#endif",
298
	"        yychar = (-1);",
299
	"        goto yyloop;",
300
	"    }",
301
	"yyreduce:",
302
	"#if YYDEBUG",
303
	"    if (yydebug)",
304
	"        printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",",
305
	"                YYPREFIX, yystate, yyn, yyrule[yyn]);",
306
	"#endif",
307
	"    yym = yylen[yyn];",
308
	"    if (yym)",
309
	"        yyval = yyvsp[1-yym];",
310
	"    else",
311
	"        memset(&yyval, 0, sizeof yyval);",
312
	"    switch (yyn)",
313
	"    {",
314
	NULL
315
};
316
317
318
char *trailer[] =
319
{
320
	"    }",
321
	"    yyssp -= yym;",
322
	"    yystate = *yyssp;",
323
	"    yyvsp -= yym;",
324
	"    yym = yylhs[yyn];",
325
	"    if (yystate == 0 && yym == 0)",
326
	"    {",
327
	"#if YYDEBUG",
328
	"        if (yydebug)",
329
	"            printf(\"%sdebug: after reduction, shifting from state 0 to\\",
330
	" state %d\\n\", YYPREFIX, YYFINAL);",
331
	"#endif",
332
	"        yystate = YYFINAL;",
333
	"        *++yyssp = YYFINAL;",
334
	"        *++yyvsp = yyval;",
335
	"        if (yychar < 0)",
336
	"        {",
337
	"            if ((yychar = yylex()) < 0) yychar = 0;",
338
	"#if YYDEBUG",
339
	"            if (yydebug)",
340
	"            {",
341
	"                yys = 0;",
342
	"                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
343
	"                if (!yys) yys = \"illegal-symbol\";",
344
	"                printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
345
	"                        YYPREFIX, YYFINAL, yychar, yys);",
346
	"            }",
347
	"#endif",
348
	"        }",
349
	"        if (yychar == 0) goto yyaccept;",
350
	"        goto yyloop;",
351
	"    }",
352
	"    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&",
353
	"            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)",
354
	"        yystate = yytable[yyn];",
355
	"    else",
356
	"        yystate = yydgoto[yym];",
357
	"#if YYDEBUG",
358
	"    if (yydebug)",
359
	"        printf(\"%sdebug: after reduction, shifting from state %d \\",
360
	"to state %d\\n\", YYPREFIX, *yyssp, yystate);",
361
	"#endif",
362
	"    if (yyssp >= yysslim && yygrowstack())",
363
	"    {",
364
	"        goto yyoverflow;",
365
	"    }",
366
	"    *++yyssp = yystate;",
367
	"    *++yyvsp = yyval;",
368
	"    goto yyloop;",
369
	"yyoverflow:",
370
	"    yyerror(\"yacc stack overflow\");",
371
	"yyabort:",
372
	"    if (yyss)",
373
	"            free(yyss);",
374
	"    if (yyvs)",
375
	"            free(yyvs);",
376
	"    yyss = yyssp = NULL;",
377
	"    yyvs = yyvsp = NULL;",
378
	"    yystacksize = 0;",
379
	"    return (1);",
380
	"yyaccept:",
381
	"    if (yyss)",
382
	"            free(yyss);",
383
	"    if (yyvs)",
384
	"            free(yyvs);",
385
	"    yyss = yyssp = NULL;",
386
	"    yyvs = yyvsp = NULL;",
387
	"    yystacksize = 0;",
388
	"    return (0);",
389
	"}",
390
	NULL
391
};
392
393
394
void
395
write_section(char *section[])
396
{
397
	int i;
398
	char *s;
399
400
9150
	for (i = 0; (s = section[i]); ++i) {
401
4485
		++outline;
402
4485
		fputs(s, code_file);
403
8970
		putc('\n', code_file);
404
	}
405
60
}