1 /* original parser id follows */
2 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
3 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
8 #define YYCHECK "yyyymmdd"
11 #define yyclearin (yychar = YYEMPTY)
12 #define yyerrok (yyerrflag = 0)
13 #define YYRECOVERING() (yyerrflag != 0)
18 #define yyparse grammar_parse
22 #define yylex grammar_lex
26 #define yyerror grammar_error
30 #define yychar grammar_char
34 #define yyval grammar_val
38 #define yylval grammar_lval
42 #define yydebug grammar_debug
46 #define yynerrs grammar_nerrs
50 #define yyerrflag grammar_errflag
51 #endif /* yyerrflag */
54 #define yylhs grammar_lhs
58 #define yylen grammar_len
62 #define yydefred grammar_defred
66 #define yydgoto grammar_dgoto
70 #define yysindex grammar_sindex
74 #define yyrindex grammar_rindex
78 #define yygindex grammar_gindex
82 #define yytable grammar_table
86 #define yycheck grammar_check
90 #define yyname grammar_name
94 #define yyrule grammar_rule
96 #define YYPREFIX "grammar_"
103 #define YYSTYPE_IS_DECLARED
104 #define yyerror yaccError
107 #if defined(YYBISON) || !defined(YYBYACC)
108 static void yyerror(const char *s);
115 #define OPT_LINTLIBRARY 1
125 /* #include "cproto.h" */
126 #define MAX_TEXT_SIZE 1024
127 #define TEXT_LEN (MAX_TEXT_SIZE / 2 - 3)
129 /* Prototype styles */
131 #define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */
132 #define PROTO_LINTLIBRARY -1 /* form lint-library source */
134 #define PROTO_NONE 0 /* do not output any prototypes */
135 #define PROTO_TRADITIONAL 1 /* comment out parameters */
136 #define PROTO_ABSTRACT 2 /* comment out parameter names */
137 #define PROTO_ANSI 3 /* ANSI C prototype */
139 typedef int PrototypeStyle;
141 typedef char boolean;
143 extern boolean types_out;
144 extern PrototypeStyle proto_style;
146 #define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB)
147 #define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY)
148 #define lintLibrary() (knrLintLibrary() || ansiLintLibrary())
151 #define FUNC_UNKNOWN -1 /* unspecified */
153 #define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */
155 #define FUNC_NONE 0 /* not a function definition */
156 #define FUNC_TRADITIONAL 1 /* traditional style */
157 #define FUNC_ANSI 2 /* ANSI style */
158 #define FUNC_BOTH 3 /* both styles */
160 typedef int FuncDefStyle;
162 /* Source file text */
163 typedef struct text {
164 char text[MAX_TEXT_SIZE]; /* source text */
165 long begin; /* offset in temporary file */
168 /* Declaration specifier flags */
169 #define DS_NONE 0 /* default */
170 #define DS_EXTERN 1 /* contains "extern" specifier */
171 #define DS_STATIC 2 /* contains "static" specifier */
172 #define DS_CHAR 4 /* contains "char" type specifier */
173 #define DS_SHORT 8 /* contains "short" type specifier */
174 #define DS_FLOAT 16 /* contains "float" type specifier */
175 #define DS_INLINE 32 /* contains "inline" specifier */
176 #define DS_JUNK 64 /* we're not interested in this declaration */
178 /* This structure stores information about a declaration specifier. */
179 typedef struct decl_spec {
180 unsigned short flags; /* flags defined above */
181 char *text; /* source text */
182 long begin; /* offset in temporary file */
185 /* This is a list of function parameters. */
186 typedef struct _ParameterList {
187 struct parameter *first; /* pointer to first parameter in list */
188 struct parameter *last; /* pointer to last parameter in list */
189 long begin_comment; /* begin offset of comment */
190 long end_comment; /* end offset of comment */
191 char *comment; /* comment at start of parameter list */
194 /* This structure stores information about a declarator. */
195 typedef struct _Declarator {
196 char *name; /* name of variable or function */
197 char *text; /* source text */
198 long begin; /* offset in temporary file */
199 long begin_comment; /* begin offset of comment */
200 long end_comment; /* end offset of comment */
201 FuncDefStyle func_def; /* style of function definition */
202 ParameterList params; /* function parameters */
203 boolean pointer; /* TRUE if it declares a pointer */
204 struct _Declarator *head; /* head function declarator */
205 struct _Declarator *func_stack; /* stack of function declarators */
206 struct _Declarator *next; /* next declarator in list */
209 /* This structure stores information about a function parameter. */
210 typedef struct parameter {
211 struct parameter *next; /* next parameter in list */
213 Declarator *declarator;
214 char *comment; /* comment following the parameter */
217 /* This is a list of declarators. */
218 typedef struct declarator_list {
219 Declarator *first; /* pointer to first declarator in list */
220 Declarator *last; /* pointer to last declarator in list */
223 /* #include "symbol.h" */
224 typedef struct symbol {
225 struct symbol *next; /* next symbol in list */
226 char *name; /* name of symbol */
227 char *value; /* value of symbol (for defines) */
228 short flags; /* symbol attributes */
231 /* parser stack entry type */
235 Parameter *parameter;
236 ParameterList param_list;
237 Declarator *declarator;
238 DeclaratorList decl_list;
241 /* The hash table length should be a prime number. */
242 #define SYM_MAX_HASH 251
244 typedef struct symbol_table {
245 Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */
248 extern SymbolTable *new_symbol_table /* Create symbol table */
250 extern void free_symbol_table /* Destroy symbol table */
252 extern Symbol *find_symbol /* Lookup symbol name */
253 (SymbolTable *s, const char *n);
254 extern Symbol *new_symbol /* Define new symbol */
255 (SymbolTable *s, const char *n, const char *v, int f);
257 /* #include "semantic.h" */
258 extern void new_decl_spec (DeclSpec *, const char *, long, int);
259 extern void free_decl_spec (DeclSpec *);
260 extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *);
261 extern void check_untagged (DeclSpec *);
262 extern Declarator *new_declarator (const char *, const char *, long);
263 extern void free_declarator (Declarator *);
264 extern void new_decl_list (DeclaratorList *, Declarator *);
265 extern void free_decl_list (DeclaratorList *);
266 extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *);
267 extern Parameter *new_parameter (DeclSpec *, Declarator *);
268 extern void free_parameter (Parameter *);
269 extern void new_param_list (ParameterList *, Parameter *);
270 extern void free_param_list (ParameterList *);
271 extern void add_param_list (ParameterList *, ParameterList *, Parameter *);
272 extern void new_ident_list (ParameterList *);
273 extern void add_ident_list (ParameterList *, ParameterList *, const char *);
274 extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *);
275 extern void gen_declarations (DeclSpec *, DeclaratorList *);
276 extern void gen_prototype (DeclSpec *, Declarator *);
277 extern void gen_func_declarator (Declarator *);
278 extern void gen_func_definition (DeclSpec *, Declarator *);
280 extern void init_parser (void);
281 extern void process_file (FILE *infile, char *name);
282 extern char *cur_text (void);
283 extern char *cur_file_name (void);
284 extern char *implied_typedef (void);
285 extern void include_file (char *name, int convert);
286 extern char *supply_parm (int count);
287 extern char *xstrdup (const char *);
288 extern int already_declared (char *name);
289 extern int is_actual_func (Declarator *d);
290 extern int lint_ellipsis (Parameter *p);
291 extern int want_typedef (void);
292 extern void begin_tracking (void);
293 extern void begin_typedef (void);
294 extern void copy_typedef (char *s);
295 extern void ellipsis_varargs (Declarator *d);
296 extern void end_typedef (void);
297 extern void flush_varargs (void);
298 extern void fmt_library (int code);
299 extern void imply_typedef (const char *s);
300 extern void indent (FILE *outf);
301 extern void put_blankline (FILE *outf);
302 extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator);
303 extern void put_char (FILE *outf, int c);
304 extern void put_error (void);
305 extern void put_newline (FILE *outf);
306 extern void put_padded (FILE *outf, const char *s);
307 extern void put_string (FILE *outf, const char *s);
308 extern void track_in (void);
310 extern boolean file_comments;
311 extern FuncDefStyle func_style;
312 extern char base_file[];
314 extern int yylex (void);
316 /* declaration specifier attributes for the typedef statement currently being
319 static int cur_decl_spec_flags;
321 /* pointer to parameter list for the current function definition */
322 static ParameterList *func_params;
324 /* A parser semantic action sets this pointer to the current declarator in
325 * a function parameter declaration in order to catch any comments following
326 * the parameter declaration on the same line. If the lexer scans a comment
327 * and <cur_declarator> is not NULL, then the comment is attached to the
328 * declarator. To ignore subsequent comments, the lexer sets this to NULL
329 * after scanning a comment or end of line.
331 static Declarator *cur_declarator;
333 /* temporary string buffer */
334 static char buf[MAX_TEXT_SIZE];
336 /* table of typedef names */
337 static SymbolTable *typedef_names;
339 /* table of define names */
340 static SymbolTable *define_names;
342 /* table of type qualifiers */
343 static SymbolTable *type_qualifiers;
345 /* information about the current input file */
347 char *base_name; /* base input file name */
348 char *file_name; /* current file name */
349 FILE *file; /* input file */
350 unsigned line_num; /* current line number in input file */
351 FILE *tmp_file; /* temporary file */
352 long begin_comment; /* tmp file offset after last written ) or ; */
353 long end_comment; /* tmp file offset after last comment */
354 boolean convert; /* if TRUE, convert function definitions */
355 boolean changed; /* TRUE if conversion done in this file */
358 static IncludeStack *cur_file; /* current input file */
360 /* #include "yyerror.c" */
362 static int haveAnsiParam (void);
365 /* Flags to enable us to find if a procedure returns a value.
367 static int return_val; /* nonzero on BRACES iff return-expression found */
372 return (lintLibrary() && !return_val) ? "void" : "int";
379 if (func_params != 0) {
380 for (p = func_params->first; p != 0; p = p->next) {
381 if (p->declarator->func_def == FUNC_ANSI) {
388 #line 389 "grammar.tab.c"
390 /* compatibility with bison */
392 /* compatibility with FreeBSD */
393 # ifdef YYPARSE_PARAM_TYPE
394 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
396 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
399 # define YYPARSE_DECL() yyparse(void)
402 /* Parameters sent to lex. */
404 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
405 # define YYLEX yylex(YYLEX_PARAM)
407 # define YYLEX_DECL() yylex(void)
408 # define YYLEX yylex()
411 /* Parameters sent to yyerror. */
413 #define YYERROR_DECL() yyerror(const char *s)
416 #define YYERROR_CALL(msg) yyerror(msg)
419 extern int YYPARSE_DECL();
421 #define T_IDENTIFIER 257
422 #define T_TYPEDEF_NAME 258
423 #define T_DEFINE_NAME 259
426 #define T_REGISTER 262
428 #define T_TYPEDEF 264
430 #define T_EXTENSION 266
439 #define T_UNSIGNED 275
444 #define T_Complex 280
445 #define T_Imaginary 281
446 #define T_TYPE_QUALIFIER 282
447 #define T_BRACKETS 283
449 #define T_MATCHRBRACE 285
450 #define T_ELLIPSIS 286
451 #define T_INITIALIZER 287
452 #define T_STRING_LITERAL 288
456 #define YYERRCODE 256
458 static const YYINT grammar_lhs[] = { -1,
459 0, 0, 26, 26, 27, 27, 27, 27, 27, 27,
460 27, 31, 30, 30, 28, 28, 34, 28, 32, 32,
461 33, 33, 35, 35, 37, 38, 29, 39, 29, 36,
462 36, 36, 40, 40, 1, 1, 2, 2, 2, 3,
463 3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
464 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
465 5, 5, 6, 6, 6, 19, 19, 8, 8, 9,
466 41, 9, 7, 7, 7, 25, 23, 23, 10, 10,
467 11, 11, 11, 11, 11, 20, 20, 21, 21, 22,
468 22, 14, 14, 15, 15, 16, 16, 16, 17, 17,
469 18, 18, 24, 24, 12, 12, 12, 13, 13, 13,
472 static const YYINT grammar_len[] = { 2,
473 0, 1, 1, 2, 1, 1, 1, 1, 3, 2,
474 2, 2, 3, 3, 2, 3, 0, 5, 2, 1,
475 0, 1, 1, 3, 0, 0, 7, 0, 5, 0,
476 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
477 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
478 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
479 1, 1, 3, 2, 2, 1, 1, 1, 3, 1,
480 0, 4, 3, 2, 2, 1, 1, 1, 2, 1,
481 1, 3, 2, 4, 4, 2, 3, 0, 1, 1,
482 2, 1, 3, 1, 3, 2, 2, 1, 0, 1,
483 1, 3, 1, 2, 1, 2, 1, 3, 2, 1,
486 static const YYINT grammar_defred[] = { 0,
487 0, 0, 0, 0, 77, 0, 62, 40, 0, 42,
488 43, 20, 44, 0, 46, 47, 48, 49, 54, 50,
489 51, 52, 53, 76, 66, 67, 55, 56, 57, 61,
490 0, 7, 0, 0, 35, 37, 38, 39, 59, 60,
491 28, 0, 0, 0, 103, 81, 0, 0, 3, 5,
492 6, 8, 0, 10, 11, 78, 0, 90, 0, 0,
493 104, 0, 19, 0, 41, 45, 15, 36, 0, 68,
494 0, 0, 0, 83, 0, 0, 64, 0, 0, 74,
495 4, 58, 0, 82, 87, 91, 0, 14, 13, 9,
496 16, 0, 71, 0, 31, 33, 0, 0, 0, 0,
497 0, 94, 0, 0, 101, 12, 63, 73, 0, 0,
498 69, 0, 0, 0, 34, 0, 110, 96, 97, 0,
499 0, 84, 0, 85, 0, 23, 0, 0, 72, 26,
500 29, 114, 0, 0, 0, 109, 0, 93, 95, 102,
501 18, 0, 0, 108, 113, 112, 0, 24, 27, 111,
503 static const YYINT grammar_dgoto[] = { 33,
504 87, 35, 36, 37, 38, 39, 40, 69, 70, 41,
505 42, 119, 120, 100, 101, 102, 103, 104, 43, 44,
506 59, 60, 45, 46, 47, 48, 49, 50, 51, 52,
507 77, 53, 127, 109, 128, 97, 94, 143, 72, 98,
510 static const YYINT grammar_sindex[] = { -2,
511 -3, 27, -239, -177, 0, 0, 0, 0, -274, 0,
512 0, 0, 0, -246, 0, 0, 0, 0, 0, 0,
513 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
514 -266, 0, 0, 455, 0, 0, 0, 0, 0, 0,
515 0, -35, -245, 128, 0, 0, -245, -2, 0, 0,
516 0, 0, 642, 0, 0, 0, -15, 0, -12, -239,
517 0, 590, 0, -27, 0, 0, 0, 0, -10, 0,
518 -11, 534, -72, 0, -237, -232, 0, -35, -232, 0,
519 0, 0, 642, 0, 0, 0, 455, 0, 0, 0,
520 0, 27, 0, 534, 0, 0, -222, 617, 209, 34,
521 39, 0, 44, 42, 0, 0, 0, 0, 27, -11,
522 0, -200, -196, -195, 0, 174, 0, 0, 0, -33,
523 243, 0, 561, 0, -177, 0, 33, 49, 0, 0,
524 0, 0, 53, 55, 417, 0, -33, 0, 0, 0,
525 0, 27, -188, 0, 0, 0, 57, 0, 0, 0,
527 static const YYINT grammar_rindex[] = { 99,
528 0, 0, 275, 0, 0, -38, 0, 0, 481, 0,
529 0, 0, 0, 509, 0, 0, 0, 0, 0, 0,
530 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
531 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
532 0, 30, 0, 0, 0, 0, 0, 101, 0, 0,
533 0, 0, 0, 0, 0, 0, 0, 0, 343, 309,
534 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
535 98, -182, 62, 0, 0, 133, 0, 64, 379, 0,
536 0, 0, -5, 0, 0, 0, 0, 0, 0, 0,
537 0, 0, 0, -182, 0, 0, 0, -180, -19, 0,
538 65, 0, 0, 68, 0, 0, 0, 0, 51, 9,
539 0, 0, 0, 0, 0, 0, 0, 0, 0, -13,
540 19, 0, 0, 0, 0, 0, 0, 52, 0, 0,
541 0, 0, 0, 0, 0, 0, 35, 0, 0, 0,
542 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
544 static const YYINT grammar_gindex[] = { 0,
545 11, -17, 0, 0, 13, 0, 0, 0, 20, 8,
546 -43, -1, -8, -89, 0, -9, 0, 0, 0, -44,
547 0, 0, 4, 0, 0, 0, 70, -53, 0, 0,
548 -18, 0, 0, 0, 0, 22, 0, 0, 0, 0,
551 #define YYTABLESIZE 924
552 static const YYINT grammar_table[] = { 58,
553 78, 58, 58, 58, 73, 58, 135, 61, 88, 57,
554 34, 5, 56, 62, 85, 58, 68, 63, 96, 7,
555 58, 98, 78, 64, 98, 84, 134, 107, 80, 3,
556 107, 90, 17, 92, 17, 4, 17, 2, 75, 3,
557 96, 71, 30, 89, 115, 147, 76, 106, 91, 93,
558 79, 75, 70, 17, 121, 55, 32, 107, 34, 105,
559 108, 114, 105, 83, 4, 68, 2, 70, 3, 68,
560 80, 121, 86, 80, 122, 106, 105, 78, 106, 5,
561 56, 68, 123, 99, 124, 125, 129, 130, 80, 131,
562 80, 141, 142, 144, 110, 145, 149, 150, 1, 110,
563 2, 30, 99, 32, 79, 92, 118, 79, 100, 21,
564 22, 111, 137, 139, 133, 113, 126, 81, 0, 0,
565 0, 0, 79, 57, 79, 0, 99, 0, 140, 0,
566 0, 0, 0, 99, 0, 0, 0, 0, 0, 0,
567 0, 70, 0, 0, 0, 99, 0, 0, 0, 148,
568 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,
569 0, 0, 0, 0, 0, 4, 0, 2, 0, 0,
570 65, 0, 65, 65, 65, 0, 65, 0, 0, 0,
571 0, 0, 0, 0, 5, 6, 7, 8, 65, 10,
572 11, 65, 13, 66, 15, 16, 17, 18, 19, 20,
573 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
574 0, 4, 0, 116, 132, 3, 0, 0, 58, 58,
575 58, 58, 58, 58, 58, 78, 58, 58, 58, 58,
576 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
577 58, 58, 58, 58, 58, 78, 4, 74, 116, 136,
578 3, 17, 78, 1, 5, 6, 7, 8, 9, 10,
579 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
580 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
581 4, 54, 116, 5, 56, 0, 31, 80, 80, 80,
582 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
583 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
584 80, 80, 88, 80, 88, 88, 88, 0, 88, 0,
585 80, 79, 79, 79, 79, 79, 79, 79, 79, 79,
586 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
587 79, 79, 79, 79, 79, 79, 89, 79, 89, 89,
588 89, 0, 89, 0, 79, 25, 25, 25, 25, 25,
589 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
590 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
591 86, 25, 86, 86, 5, 56, 86, 0, 25, 65,
592 65, 65, 65, 65, 65, 65, 0, 65, 65, 65,
593 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
594 65, 65, 65, 65, 65, 65, 75, 0, 75, 75,
595 75, 0, 75, 0, 0, 0, 0, 0, 0, 0,
596 5, 6, 7, 8, 65, 10, 11, 75, 13, 66,
597 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
598 25, 26, 27, 28, 29, 30, 117, 146, 0, 0,
599 0, 0, 0, 0, 0, 5, 6, 7, 8, 65,
600 10, 11, 0, 13, 66, 15, 16, 17, 18, 19,
601 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
602 30, 117, 4, 0, 2, 0, 3, 0, 0, 5,
603 56, 0, 0, 0, 0, 0, 0, 0, 0, 0,
604 0, 0, 0, 67, 0, 0, 0, 0, 41, 0,
605 41, 0, 41, 0, 0, 117, 0, 0, 0, 0,
606 0, 88, 88, 0, 0, 0, 0, 0, 0, 41,
607 0, 0, 0, 0, 0, 0, 45, 0, 45, 0,
608 45, 0, 0, 0, 0, 0, 0, 88, 0, 0,
609 0, 0, 0, 0, 0, 89, 89, 45, 0, 0,
610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
611 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
612 0, 89, 0, 0, 0, 0, 0, 0, 0, 86,
613 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
614 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
615 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
616 0, 0, 0, 0, 0, 75, 75, 75, 75, 75,
617 75, 75, 0, 75, 75, 75, 75, 75, 75, 75,
618 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
619 75, 75, 0, 0, 0, 0, 0, 0, 0, 0,
620 0, 0, 0, 0, 82, 7, 8, 65, 10, 11,
621 0, 13, 66, 15, 16, 17, 18, 19, 20, 21,
622 22, 23, 24, 25, 26, 27, 28, 29, 30, 0,
623 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
624 0, 5, 6, 7, 8, 65, 10, 11, 0, 13,
625 66, 15, 16, 17, 18, 19, 20, 21, 22, 23,
626 24, 25, 26, 27, 28, 29, 30, 41, 41, 41,
627 41, 41, 41, 41, 0, 41, 41, 41, 41, 41,
628 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
629 41, 41, 41, 0, 0, 45, 45, 45, 45, 45,
630 45, 45, 0, 45, 45, 45, 45, 45, 45, 45,
631 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
632 45, 82, 7, 8, 65, 10, 11, 12, 13, 14,
633 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
634 25, 26, 27, 28, 29, 30, 0, 0, 82, 7,
635 8, 65, 10, 11, 95, 13, 66, 15, 16, 17,
636 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
637 28, 29, 30, 0, 0, 0, 138, 82, 7, 8,
638 65, 10, 11, 12, 13, 14, 15, 16, 17, 18,
639 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
640 29, 30, 0, 75, 82, 7, 8, 65, 10, 11,
641 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
642 22, 23, 24, 25, 26, 27, 28, 29, 30, 82,
643 7, 8, 65, 10, 11, 0, 13, 66, 15, 16,
644 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
647 static const YYINT grammar_check[] = { 38,
648 44, 40, 41, 42, 40, 44, 40, 4, 62, 2,
649 0, 257, 258, 288, 59, 3, 34, 264, 72, 259,
650 59, 41, 61, 290, 44, 41, 116, 41, 47, 42,
651 44, 59, 38, 44, 40, 38, 42, 40, 284, 42,
652 94, 34, 282, 62, 98, 135, 43, 285, 59, 61,
653 47, 284, 44, 59, 99, 59, 59, 76, 48, 41,
654 79, 284, 44, 53, 38, 83, 40, 59, 42, 87,
655 41, 116, 60, 44, 41, 41, 73, 121, 44, 257,
656 258, 99, 44, 73, 41, 44, 287, 284, 59, 285,
657 61, 59, 44, 41, 87, 41, 285, 41, 0, 92,
658 0, 284, 41, 284, 41, 41, 99, 44, 41, 59,
659 59, 92, 121, 123, 116, 94, 109, 48, -1, -1,
660 -1, -1, 59, 116, 61, -1, 116, -1, 125, -1,
661 -1, -1, -1, 123, -1, -1, -1, -1, -1, -1,
662 -1, 44, -1, -1, -1, 135, -1, -1, -1, 142,
663 -1, -1, -1, -1, -1, -1, 59, -1, -1, -1,
664 -1, -1, -1, -1, -1, 38, -1, 40, -1, -1,
665 38, -1, 40, 41, 42, -1, 44, -1, -1, -1,
666 -1, -1, -1, -1, 257, 258, 259, 260, 261, 262,
667 263, 59, 265, 266, 267, 268, 269, 270, 271, 272,
668 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
669 -1, 38, -1, 40, 41, 42, -1, -1, 257, 258,
670 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
671 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
672 279, 280, 281, 282, 283, 284, 38, 283, 40, 283,
673 42, 257, 291, 256, 257, 258, 259, 260, 261, 262,
674 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
675 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
676 38, 285, 40, 257, 258, -1, 289, 258, 259, 260,
677 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
678 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
679 281, 282, 38, 284, 40, 41, 42, -1, 44, -1,
680 291, 258, 259, 260, 261, 262, 263, 264, 265, 266,
681 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
682 277, 278, 279, 280, 281, 282, 38, 284, 40, 41,
683 42, -1, 44, -1, 291, 258, 259, 260, 261, 262,
684 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
685 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
686 38, 284, 40, 41, 257, 258, 44, -1, 291, 257,
687 258, 259, 260, 261, 262, 263, -1, 265, 266, 267,
688 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
689 278, 279, 280, 281, 282, 283, 38, -1, 40, 41,
690 42, -1, 44, -1, -1, -1, -1, -1, -1, -1,
691 257, 258, 259, 260, 261, 262, 263, 59, 265, 266,
692 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
693 277, 278, 279, 280, 281, 282, 283, 41, -1, -1,
694 -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
695 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
696 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
697 282, 283, 38, -1, 40, -1, 42, -1, -1, 257,
698 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
699 -1, -1, -1, 59, -1, -1, -1, -1, 38, -1,
700 40, -1, 42, -1, -1, 283, -1, -1, -1, -1,
701 -1, 257, 258, -1, -1, -1, -1, -1, -1, 59,
702 -1, -1, -1, -1, -1, -1, 38, -1, 40, -1,
703 42, -1, -1, -1, -1, -1, -1, 283, -1, -1,
704 -1, -1, -1, -1, -1, 257, 258, 59, -1, -1,
705 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
706 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
707 -1, 283, -1, -1, -1, -1, -1, -1, -1, 257,
708 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
709 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
710 -1, -1, -1, -1, -1, 283, -1, -1, -1, -1,
711 -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
712 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
713 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
714 282, 283, -1, -1, -1, -1, -1, -1, -1, -1,
715 -1, -1, -1, -1, 258, 259, 260, 261, 262, 263,
716 -1, 265, 266, 267, 268, 269, 270, 271, 272, 273,
717 274, 275, 276, 277, 278, 279, 280, 281, 282, -1,
718 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
719 -1, 257, 258, 259, 260, 261, 262, 263, -1, 265,
720 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
721 276, 277, 278, 279, 280, 281, 282, 257, 258, 259,
722 260, 261, 262, 263, -1, 265, 266, 267, 268, 269,
723 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
724 280, 281, 282, -1, -1, 257, 258, 259, 260, 261,
725 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
726 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
727 282, 258, 259, 260, 261, 262, 263, 264, 265, 266,
728 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
729 277, 278, 279, 280, 281, 282, -1, -1, 258, 259,
730 260, 261, 262, 263, 291, 265, 266, 267, 268, 269,
731 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
732 280, 281, 282, -1, -1, -1, 286, 258, 259, 260,
733 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
734 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
735 281, 282, -1, 284, 258, 259, 260, 261, 262, 263,
736 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
737 274, 275, 276, 277, 278, 279, 280, 281, 282, 258,
738 259, 260, 261, 262, 263, -1, 265, 266, 267, 268,
739 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
746 #define YYMAXTOKEN 291
747 #define YYUNDFTOKEN 335
748 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
750 static const char *const grammar_name[] = {
752 "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
753 0,0,0,0,"'&'",0,"'('","')'","'*'",0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,"';'",0,
754 "'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
755 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
756 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
757 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
758 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
759 "T_IDENTIFIER","T_TYPEDEF_NAME","T_DEFINE_NAME","T_AUTO","T_EXTERN",
760 "T_REGISTER","T_STATIC","T_TYPEDEF","T_INLINE","T_EXTENSION","T_CHAR",
761 "T_DOUBLE","T_FLOAT","T_INT","T_VOID","T_LONG","T_SHORT","T_SIGNED",
762 "T_UNSIGNED","T_ENUM","T_STRUCT","T_UNION","T_Bool","T_Complex","T_Imaginary",
763 "T_TYPE_QUALIFIER","T_BRACKETS","T_LBRACE","T_MATCHRBRACE","T_ELLIPSIS",
764 "T_INITIALIZER","T_STRING_LITERAL","T_ASM","T_ASMARG","T_VA_DCL",0,0,0,0,0,0,0,
765 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
768 static const char *const grammar_rule[] = {
771 "program : translation_unit",
772 "translation_unit : external_declaration",
773 "translation_unit : translation_unit external_declaration",
774 "external_declaration : declaration",
775 "external_declaration : function_definition",
776 "external_declaration : ';'",
777 "external_declaration : linkage_specification",
778 "external_declaration : T_ASM T_ASMARG ';'",
779 "external_declaration : error T_MATCHRBRACE",
780 "external_declaration : error ';'",
781 "braces : T_LBRACE T_MATCHRBRACE",
782 "linkage_specification : T_EXTERN T_STRING_LITERAL braces",
783 "linkage_specification : T_EXTERN T_STRING_LITERAL declaration",
784 "declaration : decl_specifiers ';'",
785 "declaration : decl_specifiers init_declarator_list ';'",
787 "declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'",
788 "any_typedef : T_EXTENSION T_TYPEDEF",
789 "any_typedef : T_TYPEDEF",
790 "opt_declarator_list :",
791 "opt_declarator_list : declarator_list",
792 "declarator_list : declarator",
793 "declarator_list : declarator_list ',' declarator",
796 "function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE",
798 "function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE",
799 "opt_declaration_list :",
800 "opt_declaration_list : T_VA_DCL",
801 "opt_declaration_list : declaration_list",
802 "declaration_list : declaration",
803 "declaration_list : declaration_list declaration",
804 "decl_specifiers : decl_specifier",
805 "decl_specifiers : decl_specifiers decl_specifier",
806 "decl_specifier : storage_class",
807 "decl_specifier : type_specifier",
808 "decl_specifier : type_qualifier",
809 "storage_class : T_AUTO",
810 "storage_class : T_EXTERN",
811 "storage_class : T_REGISTER",
812 "storage_class : T_STATIC",
813 "storage_class : T_INLINE",
814 "storage_class : T_EXTENSION",
815 "type_specifier : T_CHAR",
816 "type_specifier : T_DOUBLE",
817 "type_specifier : T_FLOAT",
818 "type_specifier : T_INT",
819 "type_specifier : T_LONG",
820 "type_specifier : T_SHORT",
821 "type_specifier : T_SIGNED",
822 "type_specifier : T_UNSIGNED",
823 "type_specifier : T_VOID",
824 "type_specifier : T_Bool",
825 "type_specifier : T_Complex",
826 "type_specifier : T_Imaginary",
827 "type_specifier : T_TYPEDEF_NAME",
828 "type_specifier : struct_or_union_specifier",
829 "type_specifier : enum_specifier",
830 "type_qualifier : T_TYPE_QUALIFIER",
831 "type_qualifier : T_DEFINE_NAME",
832 "struct_or_union_specifier : struct_or_union any_id braces",
833 "struct_or_union_specifier : struct_or_union braces",
834 "struct_or_union_specifier : struct_or_union any_id",
835 "struct_or_union : T_STRUCT",
836 "struct_or_union : T_UNION",
837 "init_declarator_list : init_declarator",
838 "init_declarator_list : init_declarator_list ',' init_declarator",
839 "init_declarator : declarator",
841 "init_declarator : declarator '=' $$5 T_INITIALIZER",
842 "enum_specifier : enumeration any_id braces",
843 "enum_specifier : enumeration braces",
844 "enum_specifier : enumeration any_id",
845 "enumeration : T_ENUM",
846 "any_id : T_IDENTIFIER",
847 "any_id : T_TYPEDEF_NAME",
848 "declarator : pointer direct_declarator",
849 "declarator : direct_declarator",
850 "direct_declarator : identifier_or_ref",
851 "direct_declarator : '(' declarator ')'",
852 "direct_declarator : direct_declarator T_BRACKETS",
853 "direct_declarator : direct_declarator '(' parameter_type_list ')'",
854 "direct_declarator : direct_declarator '(' opt_identifier_list ')'",
855 "pointer : '*' opt_type_qualifiers",
856 "pointer : '*' opt_type_qualifiers pointer",
857 "opt_type_qualifiers :",
858 "opt_type_qualifiers : type_qualifier_list",
859 "type_qualifier_list : type_qualifier",
860 "type_qualifier_list : type_qualifier_list type_qualifier",
861 "parameter_type_list : parameter_list",
862 "parameter_type_list : parameter_list ',' T_ELLIPSIS",
863 "parameter_list : parameter_declaration",
864 "parameter_list : parameter_list ',' parameter_declaration",
865 "parameter_declaration : decl_specifiers declarator",
866 "parameter_declaration : decl_specifiers abs_declarator",
867 "parameter_declaration : decl_specifiers",
868 "opt_identifier_list :",
869 "opt_identifier_list : identifier_list",
870 "identifier_list : any_id",
871 "identifier_list : identifier_list ',' any_id",
872 "identifier_or_ref : any_id",
873 "identifier_or_ref : '&' any_id",
874 "abs_declarator : pointer",
875 "abs_declarator : pointer direct_abs_declarator",
876 "abs_declarator : direct_abs_declarator",
877 "direct_abs_declarator : '(' abs_declarator ')'",
878 "direct_abs_declarator : direct_abs_declarator T_BRACKETS",
879 "direct_abs_declarator : T_BRACKETS",
880 "direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')'",
881 "direct_abs_declarator : direct_abs_declarator '(' ')'",
882 "direct_abs_declarator : '(' parameter_type_list ')'",
883 "direct_abs_declarator : '(' ')'",
898 /* define the initial stack-sizes */
901 #define YYMAXDEPTH YYSTACKSIZE
904 #define YYSTACKSIZE YYMAXDEPTH
906 #define YYSTACKSIZE 10000
907 #define YYMAXDEPTH 10000
911 #define YYINITSTACKSIZE 200
921 /* variables for the parser stack */
922 static YYSTACKDATA yystack;
923 #line 1015 "grammar.y"
926 #define BEGIN yy_start = 1 + 2 *
937 extern FILE *yyin, *yyout;
939 static int curly; /* number of curly brace nesting levels */
940 static int ly_count; /* number of occurrences of %% */
941 static int inc_depth; /* include nesting level */
942 static SymbolTable *included_files; /* files already included */
943 static int yy_start = 0; /* start state number */
945 #define grammar_error(s) yaccError(s)
948 yaccError (const char *msg)
951 put_error(); /* tell what line we're on, and what file */
952 fprintf(stderr, "%s at token '%s'\n", msg, yytext);
955 /* Initialize the table of type qualifier keywords recognized by the lexical
961 static const char *keywords[] = {
970 #if defined(MSDOS) || defined(OS2)
1015 "__builtin_va_list",
1028 /* Initialize type qualifier table. */
1029 type_qualifiers = new_symbol_table();
1030 for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) {
1031 new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE);
1035 /* Process the C source file. Write function prototypes to the standard
1036 * output. Convert function definitions and write the converted source
1037 * code to a temporary file.
1040 process_file (FILE *infile, char *name)
1044 if (strlen(name) > 2) {
1045 s = name + strlen(name) - 2;
1048 if (*s == 'l' || *s == 'y')
1050 #if defined(MSDOS) || defined(OS2)
1051 if (*s == 'L' || *s == 'Y')
1057 included_files = new_symbol_table();
1058 typedef_names = new_symbol_table();
1059 define_names = new_symbol_table();
1065 include_file(strcpy(base_file, name), func_style != FUNC_NONE);
1066 if (file_comments) {
1068 if (lintLibrary()) {
1069 put_blankline(stdout);
1073 put_string(stdout, "/* ");
1074 put_string(stdout, cur_file_name());
1075 put_string(stdout, " */\n");
1078 free_symbol_table(define_names);
1079 free_symbol_table(typedef_names);
1080 free_symbol_table(included_files);
1087 free_symbol_table (type_qualifiers);
1089 if (yy_current_buffer != 0)
1090 yy_delete_buffer(yy_current_buffer);
1094 #line 1095 "grammar.tab.c"
1097 #include <stdio.h> /* needed for printf */
1100 #include <stdlib.h> /* needed for malloc, etc */
1101 #include <string.h> /* needed for memset */
1103 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
1104 static int yygrowstack(YYSTACKDATA *data)
1111 if ((newsize = data->stacksize) == 0)
1112 newsize = YYINITSTACKSIZE;
1113 else if (newsize >= YYMAXDEPTH)
1115 else if ((newsize *= 2) > YYMAXDEPTH)
1116 newsize = YYMAXDEPTH;
1118 i = (int) (data->s_mark - data->s_base);
1119 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
1123 data->s_base = newss;
1124 data->s_mark = newss + i;
1126 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
1130 data->l_base = newvs;
1131 data->l_mark = newvs + i;
1133 data->stacksize = newsize;
1134 data->s_last = data->s_base + newsize - 1;
1138 #if YYPURE || defined(YY_NO_LEAKS)
1139 static void yyfreestack(YYSTACKDATA *data)
1143 memset(data, 0, sizeof(*data));
1146 #define yyfreestack(data) /* nothing */
1149 #define YYABORT goto yyabort
1150 #define YYREJECT goto yyabort
1151 #define YYACCEPT goto yyaccept
1152 #define YYERROR goto yyerrlab
1157 int yym, yyn, yystate;
1161 if ((yys = getenv("YYDEBUG")) != 0)
1164 if (yyn >= '0' && yyn <= '9')
1165 yydebug = yyn - '0';
1177 memset(&yystack, 0, sizeof(yystack));
1180 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1181 yystack.s_mark = yystack.s_base;
1182 yystack.l_mark = yystack.l_base;
1184 *yystack.s_mark = 0;
1187 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
1191 if (yychar < 0) yychar = YYEOF;
1195 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1196 printf("%sdebug: state %d, reading %d (%s)\n",
1197 YYPREFIX, yystate, yychar, yys);
1201 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1202 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1206 printf("%sdebug: state %d, shifting to state %d\n",
1207 YYPREFIX, yystate, yytable[yyn]);
1209 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1210 yystate = yytable[yyn];
1211 *++yystack.s_mark = yytable[yyn];
1212 *++yystack.l_mark = yylval;
1214 if (yyerrflag > 0) --yyerrflag;
1217 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1218 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1223 if (yyerrflag != 0) goto yyinrecovery;
1225 YYERROR_CALL("syntax error");
1227 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1237 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1238 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1242 printf("%sdebug: state %d, error recovery shifting\
1243 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
1245 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1246 yystate = yytable[yyn];
1247 *++yystack.s_mark = yytable[yyn];
1248 *++yystack.l_mark = yylval;
1255 printf("%sdebug: error recovery discarding state %d\n",
1256 YYPREFIX, *yystack.s_mark);
1258 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1266 if (yychar == YYEOF) goto yyabort;
1270 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1271 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
1272 YYPREFIX, yystate, yychar, yys);
1282 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
1283 YYPREFIX, yystate, yyn, yyrule[yyn]);
1287 yyval = yystack.l_mark[1-yym];
1289 memset(&yyval, 0, sizeof yyval);
1294 #line 378 "grammar.y"
1300 #line 382 "grammar.y"
1306 #line 393 "grammar.y"
1308 /* Provide an empty action here so bison will not complain about
1309 * incompatible types in the default action it normally would
1315 #line 400 "grammar.y"
1321 #line 407 "grammar.y"
1324 if (types_out && want_typedef()) {
1325 gen_declarations(&yystack.l_mark[-1].decl_spec, (DeclaratorList *)0);
1329 free_decl_spec(&yystack.l_mark[-1].decl_spec);
1334 #line 418 "grammar.y"
1336 if (func_params != NULL) {
1337 set_param_types(func_params, &yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list);
1339 gen_declarations(&yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list);
1343 free_decl_list(&yystack.l_mark[-1].decl_list);
1345 free_decl_spec(&yystack.l_mark[-2].decl_spec);
1350 #line 432 "grammar.y"
1352 cur_decl_spec_flags = yystack.l_mark[0].decl_spec.flags;
1353 free_decl_spec(&yystack.l_mark[0].decl_spec);
1357 #line 437 "grammar.y"
1363 #line 444 "grammar.y"
1369 #line 448 "grammar.y"
1375 #line 460 "grammar.y"
1377 int flags = cur_decl_spec_flags;
1379 /* If the typedef is a pointer type, then reset the short type
1380 * flags so it does not get promoted.
1382 if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0)
1383 flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
1384 new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags);
1385 free_declarator(yystack.l_mark[0].declarator);
1389 #line 472 "grammar.y"
1391 int flags = cur_decl_spec_flags;
1393 if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0)
1394 flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
1395 new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags);
1396 free_declarator(yystack.l_mark[0].declarator);
1400 #line 484 "grammar.y"
1402 check_untagged(&yystack.l_mark[-1].decl_spec);
1403 if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) {
1404 yyerror("syntax error");
1407 func_params = &(yystack.l_mark[0].declarator->head->params);
1408 func_params->begin_comment = cur_file->begin_comment;
1409 func_params->end_comment = cur_file->end_comment;
1413 #line 495 "grammar.y"
1415 /* If we're converting to K&R and we've got a nominally K&R
1416 * function which has a parameter which is ANSI (i.e., a prototyped
1417 * function pointer), then we must override the deciphered value of
1418 * 'func_def' so that the parameter will be converted.
1420 if (func_style == FUNC_TRADITIONAL
1422 && yystack.l_mark[-3].declarator->head->func_def == func_style) {
1423 yystack.l_mark[-3].declarator->head->func_def = FUNC_BOTH;
1428 if (cur_file->convert)
1429 gen_func_definition(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator);
1430 gen_prototype(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator);
1434 free_decl_spec(&yystack.l_mark[-4].decl_spec);
1435 free_declarator(yystack.l_mark[-3].declarator);
1439 #line 520 "grammar.y"
1441 if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) {
1442 yyerror("syntax error");
1445 func_params = &(yystack.l_mark[0].declarator->head->params);
1446 func_params->begin_comment = cur_file->begin_comment;
1447 func_params->end_comment = cur_file->end_comment;
1451 #line 530 "grammar.y"
1457 new_decl_spec(&decl_spec, dft_decl_spec(), yystack.l_mark[-4].declarator->begin, DS_NONE);
1458 if (cur_file->convert)
1459 gen_func_definition(&decl_spec, yystack.l_mark[-4].declarator);
1460 gen_prototype(&decl_spec, yystack.l_mark[-4].declarator);
1464 free_decl_spec(&decl_spec);
1465 free_declarator(yystack.l_mark[-4].declarator);
1469 #line 561 "grammar.y"
1471 join_decl_specs(&yyval.decl_spec, &yystack.l_mark[-1].decl_spec, &yystack.l_mark[0].decl_spec);
1472 free(yystack.l_mark[-1].decl_spec.text);
1473 free(yystack.l_mark[0].decl_spec.text);
1477 #line 576 "grammar.y"
1479 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
1483 #line 580 "grammar.y"
1485 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_EXTERN);
1489 #line 584 "grammar.y"
1491 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
1495 #line 588 "grammar.y"
1497 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_STATIC);
1501 #line 592 "grammar.y"
1503 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_INLINE);
1507 #line 596 "grammar.y"
1509 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_JUNK);
1513 #line 603 "grammar.y"
1515 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR);
1519 #line 607 "grammar.y"
1521 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
1525 #line 611 "grammar.y"
1527 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_FLOAT);
1531 #line 615 "grammar.y"
1533 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
1537 #line 619 "grammar.y"
1539 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
1543 #line 623 "grammar.y"
1545 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_SHORT);
1549 #line 627 "grammar.y"
1551 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
1555 #line 631 "grammar.y"
1557 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
1561 #line 635 "grammar.y"
1563 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
1567 #line 639 "grammar.y"
1569 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR);
1573 #line 643 "grammar.y"
1575 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
1579 #line 647 "grammar.y"
1581 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
1585 #line 651 "grammar.y"
1588 s = find_symbol(typedef_names, yystack.l_mark[0].text.text);
1590 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags);
1594 #line 663 "grammar.y"
1596 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
1600 #line 667 "grammar.y"
1602 /* This rule allows the <pointer> nonterminal to scan #define
1603 * names as if they were type modifiers.
1606 s = find_symbol(define_names, yystack.l_mark[0].text.text);
1608 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags);
1612 #line 680 "grammar.y"
1615 if ((s = implied_typedef()) == 0)
1616 (void)sprintf(s = buf, "%.*s %.*s", TEXT_LEN, yystack.l_mark[-2].text.text, TEXT_LEN, yystack.l_mark[-1].text.text);
1617 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
1621 #line 687 "grammar.y"
1624 if ((s = implied_typedef()) == 0)
1625 (void)sprintf(s = buf, "%.*s {}", TEXT_LEN, yystack.l_mark[-1].text.text);
1626 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
1630 #line 694 "grammar.y"
1632 (void)sprintf(buf, "%.*s %.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].text.text);
1633 new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
1637 #line 702 "grammar.y"
1639 imply_typedef(yyval.text.text);
1643 #line 706 "grammar.y"
1645 imply_typedef(yyval.text.text);
1649 #line 713 "grammar.y"
1651 new_decl_list(&yyval.decl_list, yystack.l_mark[0].declarator);
1655 #line 717 "grammar.y"
1657 add_decl_list(&yyval.decl_list, &yystack.l_mark[-2].decl_list, yystack.l_mark[0].declarator);
1661 #line 724 "grammar.y"
1663 if (yystack.l_mark[0].declarator->func_def != FUNC_NONE && func_params == NULL &&
1664 func_style == FUNC_TRADITIONAL && cur_file->convert) {
1665 gen_func_declarator(yystack.l_mark[0].declarator);
1666 fputs(cur_text(), cur_file->tmp_file);
1668 cur_declarator = yyval.declarator;
1672 #line 733 "grammar.y"
1674 if (yystack.l_mark[-1].declarator->func_def != FUNC_NONE && func_params == NULL &&
1675 func_style == FUNC_TRADITIONAL && cur_file->convert) {
1676 gen_func_declarator(yystack.l_mark[-1].declarator);
1677 fputs(" =", cur_file->tmp_file);
1682 #line 745 "grammar.y"
1685 if ((s = implied_typedef()) == 0)
1686 (void)sprintf(s = buf, "enum %.*s", TEXT_LEN, yystack.l_mark[-1].text.text);
1687 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
1691 #line 752 "grammar.y"
1694 if ((s = implied_typedef()) == 0)
1695 (void)sprintf(s = buf, "%.*s {}", TEXT_LEN, yystack.l_mark[-1].text.text);
1696 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
1700 #line 759 "grammar.y"
1702 (void)sprintf(buf, "enum %.*s", TEXT_LEN, yystack.l_mark[0].text.text);
1703 new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
1707 #line 767 "grammar.y"
1709 imply_typedef("enum");
1710 yyval.text = yystack.l_mark[0].text;
1714 #line 780 "grammar.y"
1716 yyval.declarator = yystack.l_mark[0].declarator;
1717 (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yyval.declarator->text);
1718 free(yyval.declarator->text);
1719 yyval.declarator->text = xstrdup(buf);
1720 yyval.declarator->begin = yystack.l_mark[-1].text.begin;
1721 yyval.declarator->pointer = TRUE;
1725 #line 793 "grammar.y"
1727 yyval.declarator = new_declarator(yystack.l_mark[0].text.text, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin);
1731 #line 797 "grammar.y"
1733 yyval.declarator = yystack.l_mark[-1].declarator;
1734 (void)sprintf(buf, "(%.*s)", TEXT_LEN, yyval.declarator->text);
1735 free(yyval.declarator->text);
1736 yyval.declarator->text = xstrdup(buf);
1737 yyval.declarator->begin = yystack.l_mark[-2].text.begin;
1741 #line 805 "grammar.y"
1743 yyval.declarator = yystack.l_mark[-1].declarator;
1744 (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yyval.declarator->text, TEXT_LEN, yystack.l_mark[0].text.text);
1745 free(yyval.declarator->text);
1746 yyval.declarator->text = xstrdup(buf);
1750 #line 812 "grammar.y"
1752 yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin);
1753 yyval.declarator->params = yystack.l_mark[-1].param_list;
1754 yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
1755 yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
1756 yyval.declarator->func_def = FUNC_ANSI;
1760 #line 820 "grammar.y"
1762 yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin);
1763 yyval.declarator->params = yystack.l_mark[-1].param_list;
1764 yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
1765 yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
1766 yyval.declarator->func_def = FUNC_TRADITIONAL;
1770 #line 831 "grammar.y"
1772 (void)sprintf(yyval.text.text, "*%.*s", TEXT_LEN, yystack.l_mark[0].text.text);
1773 yyval.text.begin = yystack.l_mark[-1].text.begin;
1777 #line 836 "grammar.y"
1779 (void)sprintf(yyval.text.text, "*%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].text.text);
1780 yyval.text.begin = yystack.l_mark[-2].text.begin;
1784 #line 844 "grammar.y"
1786 strcpy(yyval.text.text, "");
1787 yyval.text.begin = 0L;
1791 #line 853 "grammar.y"
1793 (void)sprintf(yyval.text.text, "%s ", yystack.l_mark[0].decl_spec.text);
1794 yyval.text.begin = yystack.l_mark[0].decl_spec.begin;
1795 free(yystack.l_mark[0].decl_spec.text);
1799 #line 859 "grammar.y"
1801 (void)sprintf(yyval.text.text, "%.*s%.*s ", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].decl_spec.text);
1802 yyval.text.begin = yystack.l_mark[-1].text.begin;
1803 free(yystack.l_mark[0].decl_spec.text);
1807 #line 869 "grammar.y"
1809 add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, "...");
1813 #line 876 "grammar.y"
1815 new_param_list(&yyval.param_list, yystack.l_mark[0].parameter);
1819 #line 880 "grammar.y"
1821 add_param_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].parameter);
1825 #line 887 "grammar.y"
1827 check_untagged(&yystack.l_mark[-1].decl_spec);
1828 yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator);
1832 #line 892 "grammar.y"
1834 check_untagged(&yystack.l_mark[-1].decl_spec);
1835 yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator);
1839 #line 897 "grammar.y"
1841 check_untagged(&yystack.l_mark[0].decl_spec);
1842 yyval.parameter = new_parameter(&yystack.l_mark[0].decl_spec, (Declarator *)0);
1846 #line 905 "grammar.y"
1848 new_ident_list(&yyval.param_list);
1852 #line 913 "grammar.y"
1854 new_ident_list(&yyval.param_list);
1855 add_ident_list(&yyval.param_list, &yyval.param_list, yystack.l_mark[0].text.text);
1859 #line 918 "grammar.y"
1861 add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].text.text);
1865 #line 925 "grammar.y"
1867 yyval.text = yystack.l_mark[0].text;
1871 #line 929 "grammar.y"
1874 if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */
1875 yyval.text = yystack.l_mark[0].text;
1878 (void)sprintf(yyval.text.text, "&%.*s", TEXT_LEN, yystack.l_mark[0].text.text);
1879 yyval.text.begin = yystack.l_mark[-1].text.begin;
1883 #line 942 "grammar.y"
1885 yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
1889 #line 946 "grammar.y"
1891 yyval.declarator = yystack.l_mark[0].declarator;
1892 (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yyval.declarator->text);
1893 free(yyval.declarator->text);
1894 yyval.declarator->text = xstrdup(buf);
1895 yyval.declarator->begin = yystack.l_mark[-1].text.begin;
1899 #line 958 "grammar.y"
1901 yyval.declarator = yystack.l_mark[-1].declarator;
1902 (void)sprintf(buf, "(%.*s)", TEXT_LEN, yyval.declarator->text);
1903 free(yyval.declarator->text);
1904 yyval.declarator->text = xstrdup(buf);
1905 yyval.declarator->begin = yystack.l_mark[-2].text.begin;
1909 #line 966 "grammar.y"
1911 yyval.declarator = yystack.l_mark[-1].declarator;
1912 (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yyval.declarator->text, TEXT_LEN, yystack.l_mark[0].text.text);
1913 free(yyval.declarator->text);
1914 yyval.declarator->text = xstrdup(buf);
1918 #line 973 "grammar.y"
1920 yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
1924 #line 977 "grammar.y"
1926 yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-3].declarator->begin);
1927 yyval.declarator->params = yystack.l_mark[-1].param_list;
1928 yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
1929 yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
1930 yyval.declarator->func_def = FUNC_ANSI;
1934 #line 985 "grammar.y"
1936 yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].declarator->begin);
1937 yyval.declarator->func_stack = yystack.l_mark[-2].declarator;
1938 yyval.declarator->head = (yystack.l_mark[-2].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-2].declarator->head;
1939 yyval.declarator->func_def = FUNC_ANSI;
1943 #line 992 "grammar.y"
1947 d = new_declarator("", "", yystack.l_mark[-2].text.begin);
1948 yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].text.begin);
1949 yyval.declarator->params = yystack.l_mark[-1].param_list;
1950 yyval.declarator->func_stack = d;
1951 yyval.declarator->head = yyval.declarator;
1952 yyval.declarator->func_def = FUNC_ANSI;
1956 #line 1003 "grammar.y"
1960 d = new_declarator("", "", yystack.l_mark[-1].text.begin);
1961 yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-1].text.begin);
1962 yyval.declarator->func_stack = d;
1963 yyval.declarator->head = yyval.declarator;
1964 yyval.declarator->func_def = FUNC_ANSI;
1967 #line 1968 "grammar.tab.c"
1969 yystack.s_mark -= yym;
1970 yystate = *yystack.s_mark;
1971 yystack.l_mark -= yym;
1973 if (yystate == 0 && yym == 0)
1977 printf("%sdebug: after reduction, shifting from state 0 to\
1978 state %d\n", YYPREFIX, YYFINAL);
1981 *++yystack.s_mark = YYFINAL;
1982 *++yystack.l_mark = yyval;
1986 if (yychar < 0) yychar = YYEOF;
1990 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1991 printf("%sdebug: state %d, reading %d (%s)\n",
1992 YYPREFIX, YYFINAL, yychar, yys);
1996 if (yychar == YYEOF) goto yyaccept;
1999 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
2000 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
2001 yystate = yytable[yyn];
2003 yystate = yydgoto[yym];
2006 printf("%sdebug: after reduction, shifting from state %d \
2007 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
2009 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
2010 *++yystack.s_mark = (YYINT) yystate;
2011 *++yystack.l_mark = yyval;
2015 YYERROR_CALL("yacc stack overflow");
2018 yyfreestack(&yystack);
2022 yyfreestack(&yystack);