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
128 /* Prototype styles */
130 #define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */
131 #define PROTO_LINTLIBRARY -1 /* form lint-library source */
133 #define PROTO_NONE 0 /* do not output any prototypes */
134 #define PROTO_TRADITIONAL 1 /* comment out parameters */
135 #define PROTO_ABSTRACT 2 /* comment out parameter names */
136 #define PROTO_ANSI 3 /* ANSI C prototype */
138 typedef int PrototypeStyle;
140 typedef char boolean;
142 extern boolean types_out;
143 extern PrototypeStyle proto_style;
145 #define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB)
146 #define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY)
147 #define lintLibrary() (knrLintLibrary() || ansiLintLibrary())
150 #define FUNC_UNKNOWN -1 /* unspecified */
152 #define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */
154 #define FUNC_NONE 0 /* not a function definition */
155 #define FUNC_TRADITIONAL 1 /* traditional style */
156 #define FUNC_ANSI 2 /* ANSI style */
157 #define FUNC_BOTH 3 /* both styles */
159 typedef int FuncDefStyle;
161 /* Source file text */
162 typedef struct text {
163 char text[MAX_TEXT_SIZE]; /* source text */
164 long begin; /* offset in temporary file */
167 /* Declaration specifier flags */
168 #define DS_NONE 0 /* default */
169 #define DS_EXTERN 1 /* contains "extern" specifier */
170 #define DS_STATIC 2 /* contains "static" specifier */
171 #define DS_CHAR 4 /* contains "char" type specifier */
172 #define DS_SHORT 8 /* contains "short" type specifier */
173 #define DS_FLOAT 16 /* contains "float" type specifier */
174 #define DS_INLINE 32 /* contains "inline" specifier */
175 #define DS_JUNK 64 /* we're not interested in this declaration */
177 /* This structure stores information about a declaration specifier. */
178 typedef struct decl_spec {
179 unsigned short flags; /* flags defined above */
180 char *text; /* source text */
181 long begin; /* offset in temporary file */
184 /* This is a list of function parameters. */
185 typedef struct _ParameterList {
186 struct parameter *first; /* pointer to first parameter in list */
187 struct parameter *last; /* pointer to last parameter in list */
188 long begin_comment; /* begin offset of comment */
189 long end_comment; /* end offset of comment */
190 char *comment; /* comment at start of parameter list */
193 /* This structure stores information about a declarator. */
194 typedef struct _Declarator {
195 char *name; /* name of variable or function */
196 char *text; /* source text */
197 long begin; /* offset in temporary file */
198 long begin_comment; /* begin offset of comment */
199 long end_comment; /* end offset of comment */
200 FuncDefStyle func_def; /* style of function definition */
201 ParameterList params; /* function parameters */
202 boolean pointer; /* TRUE if it declares a pointer */
203 struct _Declarator *head; /* head function declarator */
204 struct _Declarator *func_stack; /* stack of function declarators */
205 struct _Declarator *next; /* next declarator in list */
208 /* This structure stores information about a function parameter. */
209 typedef struct parameter {
210 struct parameter *next; /* next parameter in list */
212 Declarator *declarator;
213 char *comment; /* comment following the parameter */
216 /* This is a list of declarators. */
217 typedef struct declarator_list {
218 Declarator *first; /* pointer to first declarator in list */
219 Declarator *last; /* pointer to last declarator in list */
222 /* #include "symbol.h" */
223 typedef struct symbol {
224 struct symbol *next; /* next symbol in list */
225 char *name; /* name of symbol */
226 char *value; /* value of symbol (for defines) */
227 short flags; /* symbol attributes */
230 /* parser stack entry type */
234 Parameter *parameter;
235 ParameterList param_list;
236 Declarator *declarator;
237 DeclaratorList decl_list;
240 /* The hash table length should be a prime number. */
241 #define SYM_MAX_HASH 251
243 typedef struct symbol_table {
244 Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */
247 extern SymbolTable *new_symbol_table /* Create symbol table */
249 extern void free_symbol_table /* Destroy symbol table */
251 extern Symbol *find_symbol /* Lookup symbol name */
252 (SymbolTable *s, const char *n);
253 extern Symbol *new_symbol /* Define new symbol */
254 (SymbolTable *s, const char *n, const char *v, int f);
256 /* #include "semantic.h" */
257 extern void new_decl_spec (DeclSpec *, const char *, long, int);
258 extern void free_decl_spec (DeclSpec *);
259 extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *);
260 extern void check_untagged (DeclSpec *);
261 extern Declarator *new_declarator (const char *, const char *, long);
262 extern void free_declarator (Declarator *);
263 extern void new_decl_list (DeclaratorList *, Declarator *);
264 extern void free_decl_list (DeclaratorList *);
265 extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *);
266 extern Parameter *new_parameter (DeclSpec *, Declarator *);
267 extern void free_parameter (Parameter *);
268 extern void new_param_list (ParameterList *, Parameter *);
269 extern void free_param_list (ParameterList *);
270 extern void add_param_list (ParameterList *, ParameterList *, Parameter *);
271 extern void new_ident_list (ParameterList *);
272 extern void add_ident_list (ParameterList *, ParameterList *, const char *);
273 extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *);
274 extern void gen_declarations (DeclSpec *, DeclaratorList *);
275 extern void gen_prototype (DeclSpec *, Declarator *);
276 extern void gen_func_declarator (Declarator *);
277 extern void gen_func_definition (DeclSpec *, Declarator *);
279 extern void init_parser (void);
280 extern void process_file (FILE *infile, char *name);
281 extern char *cur_text (void);
282 extern char *cur_file_name (void);
283 extern char *implied_typedef (void);
284 extern void include_file (char *name, int convert);
285 extern char *supply_parm (int count);
286 extern char *xstrdup (const char *);
287 extern int already_declared (char *name);
288 extern int is_actual_func (Declarator *d);
289 extern int lint_ellipsis (Parameter *p);
290 extern int want_typedef (void);
291 extern void begin_tracking (void);
292 extern void begin_typedef (void);
293 extern void copy_typedef (char *s);
294 extern void ellipsis_varargs (Declarator *d);
295 extern void end_typedef (void);
296 extern void flush_varargs (void);
297 extern void fmt_library (int code);
298 extern void imply_typedef (const char *s);
299 extern void indent (FILE *outf);
300 extern void put_blankline (FILE *outf);
301 extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator);
302 extern void put_char (FILE *outf, int c);
303 extern void put_error (void);
304 extern void put_newline (FILE *outf);
305 extern void put_padded (FILE *outf, const char *s);
306 extern void put_string (FILE *outf, const char *s);
307 extern void track_in (void);
309 extern boolean file_comments;
310 extern FuncDefStyle func_style;
311 extern char base_file[];
313 extern int yylex (void);
315 /* declaration specifier attributes for the typedef statement currently being
318 static int cur_decl_spec_flags;
320 /* pointer to parameter list for the current function definition */
321 static ParameterList *func_params;
323 /* A parser semantic action sets this pointer to the current declarator in
324 * a function parameter declaration in order to catch any comments following
325 * the parameter declaration on the same line. If the lexer scans a comment
326 * and <cur_declarator> is not NULL, then the comment is attached to the
327 * declarator. To ignore subsequent comments, the lexer sets this to NULL
328 * after scanning a comment or end of line.
330 static Declarator *cur_declarator;
332 /* temporary string buffer */
333 static char buf[MAX_TEXT_SIZE];
335 /* table of typedef names */
336 static SymbolTable *typedef_names;
338 /* table of define names */
339 static SymbolTable *define_names;
341 /* table of type qualifiers */
342 static SymbolTable *type_qualifiers;
344 /* information about the current input file */
346 char *base_name; /* base input file name */
347 char *file_name; /* current file name */
348 FILE *file; /* input file */
349 unsigned line_num; /* current line number in input file */
350 FILE *tmp_file; /* temporary file */
351 long begin_comment; /* tmp file offset after last written ) or ; */
352 long end_comment; /* tmp file offset after last comment */
353 boolean convert; /* if TRUE, convert function definitions */
354 boolean changed; /* TRUE if conversion done in this file */
357 static IncludeStack *cur_file; /* current input file */
359 /* #include "yyerror.c" */
361 static int haveAnsiParam (void);
364 /* Flags to enable us to find if a procedure returns a value.
366 static int return_val; /* nonzero on BRACES iff return-expression found */
371 return (lintLibrary() && !return_val) ? "void" : "int";
378 if (func_params != 0) {
379 for (p = func_params->first; p != 0; p = p->next) {
380 if (p->declarator->func_def == FUNC_ANSI) {
387 #line 388 "grammar.tab.c"
389 /* compatibility with bison */
391 /* compatibility with FreeBSD */
392 # ifdef YYPARSE_PARAM_TYPE
393 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
395 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
398 # define YYPARSE_DECL() yyparse(void)
401 /* Parameters sent to lex. */
403 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
404 # define YYLEX yylex(YYLEX_PARAM)
406 # define YYLEX_DECL() yylex(void)
407 # define YYLEX yylex()
410 /* Parameters sent to yyerror. */
412 #define YYERROR_DECL() yyerror(const char *s)
415 #define YYERROR_CALL(msg) yyerror(msg)
418 extern int YYPARSE_DECL();
420 #define T_IDENTIFIER 257
421 #define T_TYPEDEF_NAME 258
422 #define T_DEFINE_NAME 259
425 #define T_REGISTER 262
427 #define T_TYPEDEF 264
429 #define T_EXTENSION 266
438 #define T_UNSIGNED 275
443 #define T_Complex 280
444 #define T_Imaginary 281
445 #define T_TYPE_QUALIFIER 282
446 #define T_BRACKETS 283
448 #define T_MATCHRBRACE 285
449 #define T_ELLIPSIS 286
450 #define T_INITIALIZER 287
451 #define T_STRING_LITERAL 288
455 #define YYERRCODE 256
457 static const YYINT grammar_lhs[] = { -1,
458 0, 0, 26, 26, 27, 27, 27, 27, 27, 27,
459 27, 31, 30, 30, 28, 28, 34, 28, 32, 32,
460 33, 33, 35, 35, 37, 38, 29, 39, 29, 36,
461 36, 36, 40, 40, 1, 1, 2, 2, 2, 3,
462 3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
463 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
464 5, 5, 6, 6, 6, 19, 19, 8, 8, 9,
465 41, 9, 7, 7, 7, 25, 23, 23, 10, 10,
466 11, 11, 11, 11, 11, 20, 20, 21, 21, 22,
467 22, 14, 14, 15, 15, 16, 16, 16, 17, 17,
468 18, 18, 24, 24, 12, 12, 12, 13, 13, 13,
471 static const YYINT grammar_len[] = { 2,
472 0, 1, 1, 2, 1, 1, 1, 1, 3, 2,
473 2, 2, 3, 3, 2, 3, 0, 5, 2, 1,
474 0, 1, 1, 3, 0, 0, 7, 0, 5, 0,
475 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
476 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
477 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
478 1, 1, 3, 2, 2, 1, 1, 1, 3, 1,
479 0, 4, 3, 2, 2, 1, 1, 1, 2, 1,
480 1, 3, 2, 4, 4, 2, 3, 0, 1, 1,
481 2, 1, 3, 1, 3, 2, 2, 1, 0, 1,
482 1, 3, 1, 2, 1, 2, 1, 3, 2, 1,
485 static const YYINT grammar_defred[] = { 0,
486 0, 0, 0, 0, 77, 0, 62, 40, 0, 42,
487 43, 20, 44, 0, 46, 47, 48, 49, 54, 50,
488 51, 52, 53, 76, 66, 67, 55, 56, 57, 61,
489 0, 7, 0, 0, 35, 37, 38, 39, 59, 60,
490 28, 0, 0, 0, 103, 81, 0, 0, 3, 5,
491 6, 8, 0, 10, 11, 78, 0, 90, 0, 0,
492 104, 0, 19, 0, 41, 45, 15, 36, 0, 68,
493 0, 0, 0, 83, 0, 0, 64, 0, 0, 74,
494 4, 58, 0, 82, 87, 91, 0, 14, 13, 9,
495 16, 0, 71, 0, 31, 33, 0, 0, 0, 0,
496 0, 94, 0, 0, 101, 12, 63, 73, 0, 0,
497 69, 0, 0, 0, 34, 0, 110, 96, 97, 0,
498 0, 84, 0, 85, 0, 23, 0, 0, 72, 26,
499 29, 114, 0, 0, 0, 109, 0, 93, 95, 102,
500 18, 0, 0, 108, 113, 112, 0, 24, 27, 111,
502 static const YYINT grammar_dgoto[] = { 33,
503 87, 35, 36, 37, 38, 39, 40, 69, 70, 41,
504 42, 119, 120, 100, 101, 102, 103, 104, 43, 44,
505 59, 60, 45, 46, 47, 48, 49, 50, 51, 52,
506 77, 53, 127, 109, 128, 97, 94, 143, 72, 98,
509 static const YYINT grammar_sindex[] = { -2,
510 -3, 27, -239, -177, 0, 0, 0, 0, -274, 0,
511 0, 0, 0, -246, 0, 0, 0, 0, 0, 0,
512 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
513 -266, 0, 0, 455, 0, 0, 0, 0, 0, 0,
514 0, -35, -245, 128, 0, 0, -245, -2, 0, 0,
515 0, 0, 642, 0, 0, 0, -15, 0, -12, -239,
516 0, 590, 0, -27, 0, 0, 0, 0, -10, 0,
517 -11, 534, -72, 0, -237, -232, 0, -35, -232, 0,
518 0, 0, 642, 0, 0, 0, 455, 0, 0, 0,
519 0, 27, 0, 534, 0, 0, -222, 617, 209, 34,
520 39, 0, 44, 42, 0, 0, 0, 0, 27, -11,
521 0, -200, -196, -195, 0, 174, 0, 0, 0, -33,
522 243, 0, 561, 0, -177, 0, 33, 49, 0, 0,
523 0, 0, 53, 55, 417, 0, -33, 0, 0, 0,
524 0, 27, -188, 0, 0, 0, 57, 0, 0, 0,
526 static const YYINT grammar_rindex[] = { 99,
527 0, 0, 275, 0, 0, -38, 0, 0, 481, 0,
528 0, 0, 0, 509, 0, 0, 0, 0, 0, 0,
529 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
530 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
531 0, 30, 0, 0, 0, 0, 0, 101, 0, 0,
532 0, 0, 0, 0, 0, 0, 0, 0, 343, 309,
533 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
534 98, -182, 62, 0, 0, 133, 0, 64, 379, 0,
535 0, 0, -5, 0, 0, 0, 0, 0, 0, 0,
536 0, 0, 0, -182, 0, 0, 0, -180, -19, 0,
537 65, 0, 0, 68, 0, 0, 0, 0, 51, 9,
538 0, 0, 0, 0, 0, 0, 0, 0, 0, -13,
539 19, 0, 0, 0, 0, 0, 0, 52, 0, 0,
540 0, 0, 0, 0, 0, 0, 35, 0, 0, 0,
541 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
543 static const YYINT grammar_gindex[] = { 0,
544 11, -17, 0, 0, 13, 0, 0, 0, 20, 8,
545 -43, -1, -8, -89, 0, -9, 0, 0, 0, -44,
546 0, 0, 4, 0, 0, 0, 70, -53, 0, 0,
547 -18, 0, 0, 0, 0, 22, 0, 0, 0, 0,
550 #define YYTABLESIZE 924
551 static const YYINT grammar_table[] = { 58,
552 78, 58, 58, 58, 73, 58, 135, 61, 88, 57,
553 34, 5, 56, 62, 85, 58, 68, 63, 96, 7,
554 58, 98, 78, 64, 98, 84, 134, 107, 80, 3,
555 107, 90, 17, 92, 17, 4, 17, 2, 75, 3,
556 96, 71, 30, 89, 115, 147, 76, 106, 91, 93,
557 79, 75, 70, 17, 121, 55, 32, 107, 34, 105,
558 108, 114, 105, 83, 4, 68, 2, 70, 3, 68,
559 80, 121, 86, 80, 122, 106, 105, 78, 106, 5,
560 56, 68, 123, 99, 124, 125, 129, 130, 80, 131,
561 80, 141, 142, 144, 110, 145, 149, 150, 1, 110,
562 2, 30, 99, 32, 79, 92, 118, 79, 100, 21,
563 22, 111, 137, 139, 133, 113, 126, 81, 0, 0,
564 0, 0, 79, 57, 79, 0, 99, 0, 140, 0,
565 0, 0, 0, 99, 0, 0, 0, 0, 0, 0,
566 0, 70, 0, 0, 0, 99, 0, 0, 0, 148,
567 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,
568 0, 0, 0, 0, 0, 4, 0, 2, 0, 0,
569 65, 0, 65, 65, 65, 0, 65, 0, 0, 0,
570 0, 0, 0, 0, 5, 6, 7, 8, 65, 10,
571 11, 65, 13, 66, 15, 16, 17, 18, 19, 20,
572 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
573 0, 4, 0, 116, 132, 3, 0, 0, 58, 58,
574 58, 58, 58, 58, 58, 78, 58, 58, 58, 58,
575 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
576 58, 58, 58, 58, 58, 78, 4, 74, 116, 136,
577 3, 17, 78, 1, 5, 6, 7, 8, 9, 10,
578 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
579 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
580 4, 54, 116, 5, 56, 0, 31, 80, 80, 80,
581 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
582 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
583 80, 80, 88, 80, 88, 88, 88, 0, 88, 0,
584 80, 79, 79, 79, 79, 79, 79, 79, 79, 79,
585 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
586 79, 79, 79, 79, 79, 79, 89, 79, 89, 89,
587 89, 0, 89, 0, 79, 25, 25, 25, 25, 25,
588 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
589 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
590 86, 25, 86, 86, 5, 56, 86, 0, 25, 65,
591 65, 65, 65, 65, 65, 65, 0, 65, 65, 65,
592 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
593 65, 65, 65, 65, 65, 65, 75, 0, 75, 75,
594 75, 0, 75, 0, 0, 0, 0, 0, 0, 0,
595 5, 6, 7, 8, 65, 10, 11, 75, 13, 66,
596 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
597 25, 26, 27, 28, 29, 30, 117, 146, 0, 0,
598 0, 0, 0, 0, 0, 5, 6, 7, 8, 65,
599 10, 11, 0, 13, 66, 15, 16, 17, 18, 19,
600 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
601 30, 117, 4, 0, 2, 0, 3, 0, 0, 5,
602 56, 0, 0, 0, 0, 0, 0, 0, 0, 0,
603 0, 0, 0, 67, 0, 0, 0, 0, 41, 0,
604 41, 0, 41, 0, 0, 117, 0, 0, 0, 0,
605 0, 88, 88, 0, 0, 0, 0, 0, 0, 41,
606 0, 0, 0, 0, 0, 0, 45, 0, 45, 0,
607 45, 0, 0, 0, 0, 0, 0, 88, 0, 0,
608 0, 0, 0, 0, 0, 89, 89, 45, 0, 0,
609 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
611 0, 89, 0, 0, 0, 0, 0, 0, 0, 86,
612 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
613 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
614 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
615 0, 0, 0, 0, 0, 75, 75, 75, 75, 75,
616 75, 75, 0, 75, 75, 75, 75, 75, 75, 75,
617 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
618 75, 75, 0, 0, 0, 0, 0, 0, 0, 0,
619 0, 0, 0, 0, 82, 7, 8, 65, 10, 11,
620 0, 13, 66, 15, 16, 17, 18, 19, 20, 21,
621 22, 23, 24, 25, 26, 27, 28, 29, 30, 0,
622 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
623 0, 5, 6, 7, 8, 65, 10, 11, 0, 13,
624 66, 15, 16, 17, 18, 19, 20, 21, 22, 23,
625 24, 25, 26, 27, 28, 29, 30, 41, 41, 41,
626 41, 41, 41, 41, 0, 41, 41, 41, 41, 41,
627 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
628 41, 41, 41, 0, 0, 45, 45, 45, 45, 45,
629 45, 45, 0, 45, 45, 45, 45, 45, 45, 45,
630 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
631 45, 82, 7, 8, 65, 10, 11, 12, 13, 14,
632 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
633 25, 26, 27, 28, 29, 30, 0, 0, 82, 7,
634 8, 65, 10, 11, 95, 13, 66, 15, 16, 17,
635 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
636 28, 29, 30, 0, 0, 0, 138, 82, 7, 8,
637 65, 10, 11, 12, 13, 14, 15, 16, 17, 18,
638 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
639 29, 30, 0, 75, 82, 7, 8, 65, 10, 11,
640 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
641 22, 23, 24, 25, 26, 27, 28, 29, 30, 82,
642 7, 8, 65, 10, 11, 0, 13, 66, 15, 16,
643 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
646 static const YYINT grammar_check[] = { 38,
647 44, 40, 41, 42, 40, 44, 40, 4, 62, 2,
648 0, 257, 258, 288, 59, 3, 34, 264, 72, 259,
649 59, 41, 61, 290, 44, 41, 116, 41, 47, 42,
650 44, 59, 38, 44, 40, 38, 42, 40, 284, 42,
651 94, 34, 282, 62, 98, 135, 43, 285, 59, 61,
652 47, 284, 44, 59, 99, 59, 59, 76, 48, 41,
653 79, 284, 44, 53, 38, 83, 40, 59, 42, 87,
654 41, 116, 60, 44, 41, 41, 73, 121, 44, 257,
655 258, 99, 44, 73, 41, 44, 287, 284, 59, 285,
656 61, 59, 44, 41, 87, 41, 285, 41, 0, 92,
657 0, 284, 41, 284, 41, 41, 99, 44, 41, 59,
658 59, 92, 121, 123, 116, 94, 109, 48, -1, -1,
659 -1, -1, 59, 116, 61, -1, 116, -1, 125, -1,
660 -1, -1, -1, 123, -1, -1, -1, -1, -1, -1,
661 -1, 44, -1, -1, -1, 135, -1, -1, -1, 142,
662 -1, -1, -1, -1, -1, -1, 59, -1, -1, -1,
663 -1, -1, -1, -1, -1, 38, -1, 40, -1, -1,
664 38, -1, 40, 41, 42, -1, 44, -1, -1, -1,
665 -1, -1, -1, -1, 257, 258, 259, 260, 261, 262,
666 263, 59, 265, 266, 267, 268, 269, 270, 271, 272,
667 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
668 -1, 38, -1, 40, 41, 42, -1, -1, 257, 258,
669 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
670 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
671 279, 280, 281, 282, 283, 284, 38, 283, 40, 283,
672 42, 257, 291, 256, 257, 258, 259, 260, 261, 262,
673 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
674 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
675 38, 285, 40, 257, 258, -1, 289, 258, 259, 260,
676 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
677 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
678 281, 282, 38, 284, 40, 41, 42, -1, 44, -1,
679 291, 258, 259, 260, 261, 262, 263, 264, 265, 266,
680 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
681 277, 278, 279, 280, 281, 282, 38, 284, 40, 41,
682 42, -1, 44, -1, 291, 258, 259, 260, 261, 262,
683 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
684 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
685 38, 284, 40, 41, 257, 258, 44, -1, 291, 257,
686 258, 259, 260, 261, 262, 263, -1, 265, 266, 267,
687 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
688 278, 279, 280, 281, 282, 283, 38, -1, 40, 41,
689 42, -1, 44, -1, -1, -1, -1, -1, -1, -1,
690 257, 258, 259, 260, 261, 262, 263, 59, 265, 266,
691 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
692 277, 278, 279, 280, 281, 282, 283, 41, -1, -1,
693 -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
694 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
695 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
696 282, 283, 38, -1, 40, -1, 42, -1, -1, 257,
697 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
698 -1, -1, -1, 59, -1, -1, -1, -1, 38, -1,
699 40, -1, 42, -1, -1, 283, -1, -1, -1, -1,
700 -1, 257, 258, -1, -1, -1, -1, -1, -1, 59,
701 -1, -1, -1, -1, -1, -1, 38, -1, 40, -1,
702 42, -1, -1, -1, -1, -1, -1, 283, -1, -1,
703 -1, -1, -1, -1, -1, 257, 258, 59, -1, -1,
704 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
705 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
706 -1, 283, -1, -1, -1, -1, -1, -1, -1, 257,
707 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
708 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
709 -1, -1, -1, -1, -1, 283, -1, -1, -1, -1,
710 -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
711 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
712 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
713 282, 283, -1, -1, -1, -1, -1, -1, -1, -1,
714 -1, -1, -1, -1, 258, 259, 260, 261, 262, 263,
715 -1, 265, 266, 267, 268, 269, 270, 271, 272, 273,
716 274, 275, 276, 277, 278, 279, 280, 281, 282, -1,
717 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
718 -1, 257, 258, 259, 260, 261, 262, 263, -1, 265,
719 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
720 276, 277, 278, 279, 280, 281, 282, 257, 258, 259,
721 260, 261, 262, 263, -1, 265, 266, 267, 268, 269,
722 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
723 280, 281, 282, -1, -1, 257, 258, 259, 260, 261,
724 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
725 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
726 282, 258, 259, 260, 261, 262, 263, 264, 265, 266,
727 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
728 277, 278, 279, 280, 281, 282, -1, -1, 258, 259,
729 260, 261, 262, 263, 291, 265, 266, 267, 268, 269,
730 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
731 280, 281, 282, -1, -1, -1, 286, 258, 259, 260,
732 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
733 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
734 281, 282, -1, 284, 258, 259, 260, 261, 262, 263,
735 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
736 274, 275, 276, 277, 278, 279, 280, 281, 282, 258,
737 259, 260, 261, 262, 263, -1, 265, 266, 267, 268,
738 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
745 #define YYMAXTOKEN 291
746 #define YYUNDFTOKEN 335
747 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
749 static const char *const grammar_name[] = {
751 "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,
752 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,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,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,
758 "T_IDENTIFIER","T_TYPEDEF_NAME","T_DEFINE_NAME","T_AUTO","T_EXTERN",
759 "T_REGISTER","T_STATIC","T_TYPEDEF","T_INLINE","T_EXTENSION","T_CHAR",
760 "T_DOUBLE","T_FLOAT","T_INT","T_VOID","T_LONG","T_SHORT","T_SIGNED",
761 "T_UNSIGNED","T_ENUM","T_STRUCT","T_UNION","T_Bool","T_Complex","T_Imaginary",
762 "T_TYPE_QUALIFIER","T_BRACKETS","T_LBRACE","T_MATCHRBRACE","T_ELLIPSIS",
763 "T_INITIALIZER","T_STRING_LITERAL","T_ASM","T_ASMARG","T_VA_DCL",0,0,0,0,0,0,0,
764 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,
767 static const char *const grammar_rule[] = {
770 "program : translation_unit",
771 "translation_unit : external_declaration",
772 "translation_unit : translation_unit external_declaration",
773 "external_declaration : declaration",
774 "external_declaration : function_definition",
775 "external_declaration : ';'",
776 "external_declaration : linkage_specification",
777 "external_declaration : T_ASM T_ASMARG ';'",
778 "external_declaration : error T_MATCHRBRACE",
779 "external_declaration : error ';'",
780 "braces : T_LBRACE T_MATCHRBRACE",
781 "linkage_specification : T_EXTERN T_STRING_LITERAL braces",
782 "linkage_specification : T_EXTERN T_STRING_LITERAL declaration",
783 "declaration : decl_specifiers ';'",
784 "declaration : decl_specifiers init_declarator_list ';'",
786 "declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'",
787 "any_typedef : T_EXTENSION T_TYPEDEF",
788 "any_typedef : T_TYPEDEF",
789 "opt_declarator_list :",
790 "opt_declarator_list : declarator_list",
791 "declarator_list : declarator",
792 "declarator_list : declarator_list ',' declarator",
795 "function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE",
797 "function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE",
798 "opt_declaration_list :",
799 "opt_declaration_list : T_VA_DCL",
800 "opt_declaration_list : declaration_list",
801 "declaration_list : declaration",
802 "declaration_list : declaration_list declaration",
803 "decl_specifiers : decl_specifier",
804 "decl_specifiers : decl_specifiers decl_specifier",
805 "decl_specifier : storage_class",
806 "decl_specifier : type_specifier",
807 "decl_specifier : type_qualifier",
808 "storage_class : T_AUTO",
809 "storage_class : T_EXTERN",
810 "storage_class : T_REGISTER",
811 "storage_class : T_STATIC",
812 "storage_class : T_INLINE",
813 "storage_class : T_EXTENSION",
814 "type_specifier : T_CHAR",
815 "type_specifier : T_DOUBLE",
816 "type_specifier : T_FLOAT",
817 "type_specifier : T_INT",
818 "type_specifier : T_LONG",
819 "type_specifier : T_SHORT",
820 "type_specifier : T_SIGNED",
821 "type_specifier : T_UNSIGNED",
822 "type_specifier : T_VOID",
823 "type_specifier : T_Bool",
824 "type_specifier : T_Complex",
825 "type_specifier : T_Imaginary",
826 "type_specifier : T_TYPEDEF_NAME",
827 "type_specifier : struct_or_union_specifier",
828 "type_specifier : enum_specifier",
829 "type_qualifier : T_TYPE_QUALIFIER",
830 "type_qualifier : T_DEFINE_NAME",
831 "struct_or_union_specifier : struct_or_union any_id braces",
832 "struct_or_union_specifier : struct_or_union braces",
833 "struct_or_union_specifier : struct_or_union any_id",
834 "struct_or_union : T_STRUCT",
835 "struct_or_union : T_UNION",
836 "init_declarator_list : init_declarator",
837 "init_declarator_list : init_declarator_list ',' init_declarator",
838 "init_declarator : declarator",
840 "init_declarator : declarator '=' $$5 T_INITIALIZER",
841 "enum_specifier : enumeration any_id braces",
842 "enum_specifier : enumeration braces",
843 "enum_specifier : enumeration any_id",
844 "enumeration : T_ENUM",
845 "any_id : T_IDENTIFIER",
846 "any_id : T_TYPEDEF_NAME",
847 "declarator : pointer direct_declarator",
848 "declarator : direct_declarator",
849 "direct_declarator : identifier_or_ref",
850 "direct_declarator : '(' declarator ')'",
851 "direct_declarator : direct_declarator T_BRACKETS",
852 "direct_declarator : direct_declarator '(' parameter_type_list ')'",
853 "direct_declarator : direct_declarator '(' opt_identifier_list ')'",
854 "pointer : '*' opt_type_qualifiers",
855 "pointer : '*' opt_type_qualifiers pointer",
856 "opt_type_qualifiers :",
857 "opt_type_qualifiers : type_qualifier_list",
858 "type_qualifier_list : type_qualifier",
859 "type_qualifier_list : type_qualifier_list type_qualifier",
860 "parameter_type_list : parameter_list",
861 "parameter_type_list : parameter_list ',' T_ELLIPSIS",
862 "parameter_list : parameter_declaration",
863 "parameter_list : parameter_list ',' parameter_declaration",
864 "parameter_declaration : decl_specifiers declarator",
865 "parameter_declaration : decl_specifiers abs_declarator",
866 "parameter_declaration : decl_specifiers",
867 "opt_identifier_list :",
868 "opt_identifier_list : identifier_list",
869 "identifier_list : any_id",
870 "identifier_list : identifier_list ',' any_id",
871 "identifier_or_ref : any_id",
872 "identifier_or_ref : '&' any_id",
873 "abs_declarator : pointer",
874 "abs_declarator : pointer direct_abs_declarator",
875 "abs_declarator : direct_abs_declarator",
876 "direct_abs_declarator : '(' abs_declarator ')'",
877 "direct_abs_declarator : direct_abs_declarator T_BRACKETS",
878 "direct_abs_declarator : T_BRACKETS",
879 "direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')'",
880 "direct_abs_declarator : direct_abs_declarator '(' ')'",
881 "direct_abs_declarator : '(' parameter_type_list ')'",
882 "direct_abs_declarator : '(' ')'",
895 /* define the initial stack-sizes */
898 #define YYMAXDEPTH YYSTACKSIZE
901 #define YYSTACKSIZE YYMAXDEPTH
903 #define YYSTACKSIZE 10000
904 #define YYMAXDEPTH 10000
908 #define YYINITSTACKSIZE 200
918 /* variables for the parser stack */
919 static YYSTACKDATA yystack;
920 #line 1014 "grammar.y"
923 #define BEGIN yy_start = 1 + 2 *
934 extern FILE *yyin, *yyout;
936 static int curly; /* number of curly brace nesting levels */
937 static int ly_count; /* number of occurances of %% */
938 static int inc_depth; /* include nesting level */
939 static SymbolTable *included_files; /* files already included */
940 static int yy_start = 0; /* start state number */
942 #define grammar_error(s) yaccError(s)
945 yaccError (const char *msg)
948 put_error(); /* tell what line we're on, and what file */
949 fprintf(stderr, "%s at token '%s'\n", msg, yytext);
952 /* Initialize the table of type qualifier keywords recognized by the lexical
958 static const char *keywords[] = {
967 #if defined(MSDOS) || defined(OS2)
1012 "__builtin_va_list",
1025 /* Initialize type qualifier table. */
1026 type_qualifiers = new_symbol_table();
1027 for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) {
1028 new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE);
1032 /* Process the C source file. Write function prototypes to the standard
1033 * output. Convert function definitions and write the converted source
1034 * code to a temporary file.
1037 process_file (FILE *infile, char *name)
1041 if (strlen(name) > 2) {
1042 s = name + strlen(name) - 2;
1045 if (*s == 'l' || *s == 'y')
1047 #if defined(MSDOS) || defined(OS2)
1048 if (*s == 'L' || *s == 'Y')
1054 included_files = new_symbol_table();
1055 typedef_names = new_symbol_table();
1056 define_names = new_symbol_table();
1062 include_file(strcpy(base_file, name), func_style != FUNC_NONE);
1063 if (file_comments) {
1065 if (lintLibrary()) {
1066 put_blankline(stdout);
1070 put_string(stdout, "/* ");
1071 put_string(stdout, cur_file_name());
1072 put_string(stdout, " */\n");
1075 free_symbol_table(define_names);
1076 free_symbol_table(typedef_names);
1077 free_symbol_table(included_files);
1084 free_symbol_table (type_qualifiers);
1086 if (yy_current_buffer != 0)
1087 yy_delete_buffer(yy_current_buffer);
1091 #line 1092 "grammar.tab.c"
1094 #include <stdio.h> /* needed for printf */
1097 #include <stdlib.h> /* needed for malloc, etc */
1098 #include <string.h> /* needed for memset */
1100 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
1101 static int yygrowstack(YYSTACKDATA *data)
1108 if ((newsize = data->stacksize) == 0)
1109 newsize = YYINITSTACKSIZE;
1110 else if (newsize >= YYMAXDEPTH)
1112 else if ((newsize *= 2) > YYMAXDEPTH)
1113 newsize = YYMAXDEPTH;
1115 i = (int) (data->s_mark - data->s_base);
1116 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
1120 data->s_base = newss;
1121 data->s_mark = newss + i;
1123 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
1127 data->l_base = newvs;
1128 data->l_mark = newvs + i;
1130 data->stacksize = newsize;
1131 data->s_last = data->s_base + newsize - 1;
1135 #if YYPURE || defined(YY_NO_LEAKS)
1136 static void yyfreestack(YYSTACKDATA *data)
1140 memset(data, 0, sizeof(*data));
1143 #define yyfreestack(data) /* nothing */
1146 #define YYABORT goto yyabort
1147 #define YYREJECT goto yyabort
1148 #define YYACCEPT goto yyaccept
1149 #define YYERROR goto yyerrlab
1154 int yym, yyn, yystate;
1158 if ((yys = getenv("YYDEBUG")) != 0)
1161 if (yyn >= '0' && yyn <= '9')
1162 yydebug = yyn - '0';
1172 memset(&yystack, 0, sizeof(yystack));
1175 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1176 yystack.s_mark = yystack.s_base;
1177 yystack.l_mark = yystack.l_base;
1179 *yystack.s_mark = 0;
1182 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
1185 if ((yychar = YYLEX) < 0) yychar = YYEOF;
1189 yys = yyname[YYTRANSLATE(yychar)];
1190 printf("%sdebug: state %d, reading %d (%s)\n",
1191 YYPREFIX, yystate, yychar, yys);
1195 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
1196 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
1200 printf("%sdebug: state %d, shifting to state %d\n",
1201 YYPREFIX, yystate, yytable[yyn]);
1203 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
1207 yystate = yytable[yyn];
1208 *++yystack.s_mark = yytable[yyn];
1209 *++yystack.l_mark = yylval;
1211 if (yyerrflag > 0) --yyerrflag;
1214 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
1215 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
1220 if (yyerrflag) goto yyinrecovery;
1222 YYERROR_CALL("syntax error");
1235 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
1236 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
1240 printf("%sdebug: state %d, error recovery shifting\
1241 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
1243 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
1247 yystate = yytable[yyn];
1248 *++yystack.s_mark = yytable[yyn];
1249 *++yystack.l_mark = yylval;
1256 printf("%sdebug: error recovery discarding state %d\n",
1257 YYPREFIX, *yystack.s_mark);
1259 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1267 if (yychar == YYEOF) goto yyabort;
1271 yys = yyname[YYTRANSLATE(yychar)];
1272 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
1273 YYPREFIX, yystate, yychar, yys);
1283 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
1284 YYPREFIX, yystate, yyn, yyrule[yyn]);
1288 yyval = yystack.l_mark[1-yym];
1290 memset(&yyval, 0, sizeof yyval);
1294 #line 377 "grammar.y"
1300 #line 381 "grammar.y"
1306 #line 392 "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 399 "grammar.y"
1321 #line 406 "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 417 "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 431 "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 436 "grammar.y"
1363 #line 443 "grammar.y"
1369 #line 447 "grammar.y"
1375 #line 459 "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 471 "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 483 "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 494 "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 519 "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 529 "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 560 "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 575 "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 579 "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 583 "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 587 "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 591 "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 595 "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 602 "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 606 "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 610 "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 614 "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 618 "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 622 "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 626 "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 630 "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 634 "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 638 "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 642 "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 646 "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 650 "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 662 "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 666 "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 679 "grammar.y"
1615 if ((s = implied_typedef()) == 0)
1616 (void)sprintf(s = buf, "%s %s", yystack.l_mark[-2].text.text, yystack.l_mark[-1].text.text);
1617 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
1621 #line 686 "grammar.y"
1624 if ((s = implied_typedef()) == 0)
1625 (void)sprintf(s = buf, "%s {}", yystack.l_mark[-1].text.text);
1626 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
1630 #line 693 "grammar.y"
1632 (void)sprintf(buf, "%s %s", yystack.l_mark[-1].text.text, yystack.l_mark[0].text.text);
1633 new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
1637 #line 701 "grammar.y"
1639 imply_typedef(yyval.text.text);
1643 #line 705 "grammar.y"
1645 imply_typedef(yyval.text.text);
1649 #line 712 "grammar.y"
1651 new_decl_list(&yyval.decl_list, yystack.l_mark[0].declarator);
1655 #line 716 "grammar.y"
1657 add_decl_list(&yyval.decl_list, &yystack.l_mark[-2].decl_list, yystack.l_mark[0].declarator);
1661 #line 723 "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 732 "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 744 "grammar.y"
1685 if ((s = implied_typedef()) == 0)
1686 (void)sprintf(s = buf, "enum %s", yystack.l_mark[-1].text.text);
1687 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
1691 #line 751 "grammar.y"
1694 if ((s = implied_typedef()) == 0)
1695 (void)sprintf(s = buf, "%s {}", yystack.l_mark[-1].text.text);
1696 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
1700 #line 758 "grammar.y"
1702 (void)sprintf(buf, "enum %s", yystack.l_mark[0].text.text);
1703 new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
1707 #line 766 "grammar.y"
1709 imply_typedef("enum");
1710 yyval.text = yystack.l_mark[0].text;
1714 #line 779 "grammar.y"
1716 yyval.declarator = yystack.l_mark[0].declarator;
1717 (void)sprintf(buf, "%s%s", yystack.l_mark[-1].text.text, 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 792 "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 796 "grammar.y"
1733 yyval.declarator = yystack.l_mark[-1].declarator;
1734 (void)sprintf(buf, "(%s)", 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 804 "grammar.y"
1743 yyval.declarator = yystack.l_mark[-1].declarator;
1744 (void)sprintf(buf, "%s%s", yyval.declarator->text, yystack.l_mark[0].text.text);
1745 free(yyval.declarator->text);
1746 yyval.declarator->text = xstrdup(buf);
1750 #line 811 "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 819 "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 830 "grammar.y"
1772 (void)sprintf(yyval.text.text, "*%s", yystack.l_mark[0].text.text);
1773 yyval.text.begin = yystack.l_mark[-1].text.begin;
1777 #line 835 "grammar.y"
1779 (void)sprintf(yyval.text.text, "*%s%s", yystack.l_mark[-1].text.text, yystack.l_mark[0].text.text);
1780 yyval.text.begin = yystack.l_mark[-2].text.begin;
1784 #line 843 "grammar.y"
1786 strcpy(yyval.text.text, "");
1787 yyval.text.begin = 0L;
1791 #line 852 "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 858 "grammar.y"
1801 (void)sprintf(yyval.text.text, "%s%s ", yystack.l_mark[-1].text.text, 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 868 "grammar.y"
1809 add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, "...");
1813 #line 875 "grammar.y"
1815 new_param_list(&yyval.param_list, yystack.l_mark[0].parameter);
1819 #line 879 "grammar.y"
1821 add_param_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].parameter);
1825 #line 886 "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 891 "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 896 "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 904 "grammar.y"
1848 new_ident_list(&yyval.param_list);
1852 #line 912 "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 917 "grammar.y"
1861 add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].text.text);
1865 #line 924 "grammar.y"
1867 yyval.text = yystack.l_mark[0].text;
1871 #line 928 "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", yystack.l_mark[0].text.text);
1879 yyval.text.begin = yystack.l_mark[-1].text.begin;
1883 #line 941 "grammar.y"
1885 yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
1889 #line 945 "grammar.y"
1891 yyval.declarator = yystack.l_mark[0].declarator;
1892 (void)sprintf(buf, "%s%s", yystack.l_mark[-1].text.text, 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 957 "grammar.y"
1901 yyval.declarator = yystack.l_mark[-1].declarator;
1902 (void)sprintf(buf, "(%s)", 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 965 "grammar.y"
1911 yyval.declarator = yystack.l_mark[-1].declarator;
1912 (void)sprintf(buf, "%s%s", yyval.declarator->text, yystack.l_mark[0].text.text);
1913 free(yyval.declarator->text);
1914 yyval.declarator->text = xstrdup(buf);
1918 #line 972 "grammar.y"
1920 yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
1924 #line 976 "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 984 "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 991 "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 1002 "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;
1985 if ((yychar = YYLEX) < 0) yychar = YYEOF;
1989 yys = yyname[YYTRANSLATE(yychar)];
1990 printf("%sdebug: state %d, reading %d (%s)\n",
1991 YYPREFIX, YYFINAL, yychar, yys);
1995 if (yychar == YYEOF) goto yyaccept;
1998 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
1999 yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
2000 yystate = yytable[yyn];
2002 yystate = yydgoto[yym];
2005 printf("%sdebug: after reduction, shifting from state %d \
2006 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
2008 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
2012 *++yystack.s_mark = (YYINT) yystate;
2013 *++yystack.l_mark = yyval;
2017 YYERROR_CALL("yacc stack overflow");
2020 yyfreestack(&yystack);
2024 yyfreestack(&yystack);