xref: /freebsd/contrib/byacc/test/btyacc/grammar.tab.c (revision 3b8f08459569bf0faa21473e5cec2491e95c9349)
1 /* original parser id follows */
2 /* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
3 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
4 
5 #define YYBYACC 1
6 #define YYMAJOR 1
7 #define YYMINOR 9
8 #define YYCHECK "yyyymmdd"
9 
10 #define YYEMPTY        (-1)
11 #define yyclearin      (yychar = YYEMPTY)
12 #define yyerrok        (yyerrflag = 0)
13 #define YYRECOVERING() (yyerrflag != 0)
14 #define YYENOMEM       (-2)
15 #define YYEOF          0
16 #undef YYBTYACC
17 #define YYBTYACC 0
18 #define YYDEBUGSTR YYPREFIX "debug"
19 
20 #ifndef yyparse
21 #define yyparse    grammar_parse
22 #endif /* yyparse */
23 
24 #ifndef yylex
25 #define yylex      grammar_lex
26 #endif /* yylex */
27 
28 #ifndef yyerror
29 #define yyerror    grammar_error
30 #endif /* yyerror */
31 
32 #ifndef yychar
33 #define yychar     grammar_char
34 #endif /* yychar */
35 
36 #ifndef yyval
37 #define yyval      grammar_val
38 #endif /* yyval */
39 
40 #ifndef yylval
41 #define yylval     grammar_lval
42 #endif /* yylval */
43 
44 #ifndef yydebug
45 #define yydebug    grammar_debug
46 #endif /* yydebug */
47 
48 #ifndef yynerrs
49 #define yynerrs    grammar_nerrs
50 #endif /* yynerrs */
51 
52 #ifndef yyerrflag
53 #define yyerrflag  grammar_errflag
54 #endif /* yyerrflag */
55 
56 #ifndef yylhs
57 #define yylhs      grammar_lhs
58 #endif /* yylhs */
59 
60 #ifndef yylen
61 #define yylen      grammar_len
62 #endif /* yylen */
63 
64 #ifndef yydefred
65 #define yydefred   grammar_defred
66 #endif /* yydefred */
67 
68 #ifndef yystos
69 #define yystos     grammar_stos
70 #endif /* yystos */
71 
72 #ifndef yydgoto
73 #define yydgoto    grammar_dgoto
74 #endif /* yydgoto */
75 
76 #ifndef yysindex
77 #define yysindex   grammar_sindex
78 #endif /* yysindex */
79 
80 #ifndef yyrindex
81 #define yyrindex   grammar_rindex
82 #endif /* yyrindex */
83 
84 #ifndef yygindex
85 #define yygindex   grammar_gindex
86 #endif /* yygindex */
87 
88 #ifndef yytable
89 #define yytable    grammar_table
90 #endif /* yytable */
91 
92 #ifndef yycheck
93 #define yycheck    grammar_check
94 #endif /* yycheck */
95 
96 #ifndef yyname
97 #define yyname     grammar_name
98 #endif /* yyname */
99 
100 #ifndef yyrule
101 #define yyrule     grammar_rule
102 #endif /* yyrule */
103 
104 #if YYBTYACC
105 
106 #ifndef yycindex
107 #define yycindex   grammar_cindex
108 #endif /* yycindex */
109 
110 #ifndef yyctable
111 #define yyctable   grammar_ctable
112 #endif /* yyctable */
113 
114 #endif /* YYBTYACC */
115 
116 #define YYPREFIX "grammar_"
117 
118 #define YYPURE 0
119 
120 #line 9 "grammar.y"
121 #ifdef YYBISON
122 #include <stdlib.h>
123 #define YYSTYPE_IS_DECLARED
124 #define yyerror yaccError
125 #endif
126 
127 #if defined(YYBISON) || !defined(YYBYACC)
128 static void yyerror(const char *s);
129 #endif
130 #line 81 "grammar.y"
131 #include <stdio.h>
132 #include <ctype.h>
133 #include <string.h>
134 
135 #define OPT_LINTLIBRARY 1
136 
137 #ifndef TRUE
138 #define	TRUE	(1)
139 #endif
140 
141 #ifndef FALSE
142 #define	FALSE	(0)
143 #endif
144 
145 /* #include "cproto.h" */
146 #define MAX_TEXT_SIZE 1024
147 
148 /* Prototype styles */
149 #if OPT_LINTLIBRARY
150 #define PROTO_ANSI_LLIB		-2	/* form ANSI lint-library source */
151 #define PROTO_LINTLIBRARY	-1	/* form lint-library source */
152 #endif
153 #define PROTO_NONE		0	/* do not output any prototypes */
154 #define PROTO_TRADITIONAL	1	/* comment out parameters */
155 #define PROTO_ABSTRACT		2	/* comment out parameter names */
156 #define PROTO_ANSI		3	/* ANSI C prototype */
157 
158 typedef int PrototypeStyle;
159 
160 typedef char boolean;
161 
162 extern boolean types_out;
163 extern PrototypeStyle proto_style;
164 
165 #define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB)
166 #define knrLintLibrary()  (proto_style == PROTO_LINTLIBRARY)
167 #define lintLibrary()     (knrLintLibrary() || ansiLintLibrary())
168 
169 #if OPT_LINTLIBRARY
170 #define FUNC_UNKNOWN		-1	/* unspecified */
171 #else
172 #define FUNC_UNKNOWN		0	/* unspecified (same as FUNC_NONE) */
173 #endif
174 #define FUNC_NONE		0	/* not a function definition */
175 #define FUNC_TRADITIONAL	1	/* traditional style */
176 #define FUNC_ANSI		2	/* ANSI style */
177 #define FUNC_BOTH		3	/* both styles */
178 
179 typedef int FuncDefStyle;
180 
181 /* Source file text */
182 typedef struct text {
183     char text[MAX_TEXT_SIZE];	/* source text */
184     long begin; 		/* offset in temporary file */
185 } Text;
186 
187 /* Declaration specifier flags */
188 #define DS_NONE 	0	/* default */
189 #define DS_EXTERN	1	/* contains "extern" specifier */
190 #define DS_STATIC	2	/* contains "static" specifier */
191 #define DS_CHAR 	4	/* contains "char" type specifier */
192 #define DS_SHORT	8	/* contains "short" type specifier */
193 #define DS_FLOAT	16	/* contains "float" type specifier */
194 #define DS_INLINE	32	/* contains "inline" specifier */
195 #define DS_JUNK 	64	/* we're not interested in this declaration */
196 
197 /* This structure stores information about a declaration specifier. */
198 typedef struct decl_spec {
199     unsigned short flags;	/* flags defined above */
200     char *text; 		/* source text */
201     long begin; 		/* offset in temporary file */
202 } DeclSpec;
203 
204 /* This is a list of function parameters. */
205 typedef struct _ParameterList {
206     struct parameter *first;	/* pointer to first parameter in list */
207     struct parameter *last;	/* pointer to last parameter in list */
208     long begin_comment; 	/* begin offset of comment */
209     long end_comment;		/* end offset of comment */
210     char *comment;		/* comment at start of parameter list */
211 } ParameterList;
212 
213 /* This structure stores information about a declarator. */
214 typedef struct _Declarator {
215     char *name; 			/* name of variable or function */
216     char *text; 			/* source text */
217     long begin; 			/* offset in temporary file */
218     long begin_comment; 		/* begin offset of comment */
219     long end_comment;			/* end offset of comment */
220     FuncDefStyle func_def;		/* style of function definition */
221     ParameterList params;		/* function parameters */
222     boolean pointer;			/* TRUE if it declares a pointer */
223     struct _Declarator *head;		/* head function declarator */
224     struct _Declarator *func_stack;	/* stack of function declarators */
225     struct _Declarator *next;		/* next declarator in list */
226 } Declarator;
227 
228 /* This structure stores information about a function parameter. */
229 typedef struct parameter {
230     struct parameter *next;	/* next parameter in list */
231     DeclSpec decl_spec;
232     Declarator *declarator;
233     char *comment;		/* comment following the parameter */
234 } Parameter;
235 
236 /* This is a list of declarators. */
237 typedef struct declarator_list {
238     Declarator *first;		/* pointer to first declarator in list */
239     Declarator *last;		/* pointer to last declarator in list */
240 } DeclaratorList;
241 
242 /* #include "symbol.h" */
243 typedef struct symbol {
244     struct symbol *next;	/* next symbol in list */
245     char *name; 		/* name of symbol */
246     char *value;		/* value of symbol (for defines) */
247     short flags;		/* symbol attributes */
248 } Symbol;
249 
250 /* parser stack entry type */
251 typedef union {
252     Text text;
253     DeclSpec decl_spec;
254     Parameter *parameter;
255     ParameterList param_list;
256     Declarator *declarator;
257     DeclaratorList decl_list;
258 } YYSTYPE;
259 
260 /* The hash table length should be a prime number. */
261 #define SYM_MAX_HASH 251
262 
263 typedef struct symbol_table {
264     Symbol *bucket[SYM_MAX_HASH];	/* hash buckets */
265 } SymbolTable;
266 
267 extern SymbolTable *new_symbol_table	/* Create symbol table */
268 	(void);
269 extern void free_symbol_table		/* Destroy symbol table */
270 	(SymbolTable *s);
271 extern Symbol *find_symbol		/* Lookup symbol name */
272 	(SymbolTable *s, const char *n);
273 extern Symbol *new_symbol		/* Define new symbol */
274 	(SymbolTable *s, const char *n, const char *v, int f);
275 
276 /* #include "semantic.h" */
277 extern void new_decl_spec (DeclSpec *, const char *, long, int);
278 extern void free_decl_spec (DeclSpec *);
279 extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *);
280 extern void check_untagged (DeclSpec *);
281 extern Declarator *new_declarator (const char *, const char *, long);
282 extern void free_declarator (Declarator *);
283 extern void new_decl_list (DeclaratorList *, Declarator *);
284 extern void free_decl_list (DeclaratorList *);
285 extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *);
286 extern Parameter *new_parameter (DeclSpec *, Declarator *);
287 extern void free_parameter (Parameter *);
288 extern void new_param_list (ParameterList *, Parameter *);
289 extern void free_param_list (ParameterList *);
290 extern void add_param_list (ParameterList *, ParameterList *, Parameter *);
291 extern void new_ident_list (ParameterList *);
292 extern void add_ident_list (ParameterList *, ParameterList *, const char *);
293 extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *);
294 extern void gen_declarations (DeclSpec *, DeclaratorList *);
295 extern void gen_prototype (DeclSpec *, Declarator *);
296 extern void gen_func_declarator (Declarator *);
297 extern void gen_func_definition (DeclSpec *, Declarator *);
298 
299 extern void init_parser     (void);
300 extern void process_file    (FILE *infile, char *name);
301 extern char *cur_text       (void);
302 extern char *cur_file_name  (void);
303 extern char *implied_typedef (void);
304 extern void include_file    (char *name, int convert);
305 extern char *supply_parm    (int count);
306 extern char *xstrdup        (const char *);
307 extern int already_declared (char *name);
308 extern int is_actual_func   (Declarator *d);
309 extern int lint_ellipsis    (Parameter *p);
310 extern int want_typedef     (void);
311 extern void begin_tracking  (void);
312 extern void begin_typedef   (void);
313 extern void copy_typedef    (char *s);
314 extern void ellipsis_varargs (Declarator *d);
315 extern void end_typedef     (void);
316 extern void flush_varargs   (void);
317 extern void fmt_library     (int code);
318 extern void imply_typedef   (const char *s);
319 extern void indent          (FILE *outf);
320 extern void put_blankline   (FILE *outf);
321 extern void put_body        (FILE *outf, DeclSpec *decl_spec, Declarator *declarator);
322 extern void put_char        (FILE *outf, int c);
323 extern void put_error       (void);
324 extern void put_newline     (FILE *outf);
325 extern void put_padded      (FILE *outf, const char *s);
326 extern void put_string      (FILE *outf, const char *s);
327 extern void track_in        (void);
328 
329 extern boolean file_comments;
330 extern FuncDefStyle func_style;
331 extern char base_file[];
332 
333 extern	int	yylex (void);
334 
335 /* declaration specifier attributes for the typedef statement currently being
336  * scanned
337  */
338 static int cur_decl_spec_flags;
339 
340 /* pointer to parameter list for the current function definition */
341 static ParameterList *func_params;
342 
343 /* A parser semantic action sets this pointer to the current declarator in
344  * a function parameter declaration in order to catch any comments following
345  * the parameter declaration on the same line.  If the lexer scans a comment
346  * and <cur_declarator> is not NULL, then the comment is attached to the
347  * declarator.  To ignore subsequent comments, the lexer sets this to NULL
348  * after scanning a comment or end of line.
349  */
350 static Declarator *cur_declarator;
351 
352 /* temporary string buffer */
353 static char buf[MAX_TEXT_SIZE];
354 
355 /* table of typedef names */
356 static SymbolTable *typedef_names;
357 
358 /* table of define names */
359 static SymbolTable *define_names;
360 
361 /* table of type qualifiers */
362 static SymbolTable *type_qualifiers;
363 
364 /* information about the current input file */
365 typedef struct {
366     char *base_name;		/* base input file name */
367     char *file_name;		/* current file name */
368     FILE *file; 		/* input file */
369     unsigned line_num;		/* current line number in input file */
370     FILE *tmp_file;		/* temporary file */
371     long begin_comment; 	/* tmp file offset after last written ) or ; */
372     long end_comment;		/* tmp file offset after last comment */
373     boolean convert;		/* if TRUE, convert function definitions */
374     boolean changed;		/* TRUE if conversion done in this file */
375 } IncludeStack;
376 
377 static IncludeStack *cur_file;	/* current input file */
378 
379 /* #include "yyerror.c" */
380 
381 static int haveAnsiParam (void);
382 
383 
384 /* Flags to enable us to find if a procedure returns a value.
385  */
386 static int return_val;	/* nonzero on BRACES iff return-expression found */
387 
388 static const char *
389 dft_decl_spec (void)
390 {
391     return (lintLibrary() && !return_val) ? "void" : "int";
392 }
393 
394 static int
395 haveAnsiParam (void)
396 {
397     Parameter *p;
398     if (func_params != 0) {
399 	for (p = func_params->first; p != 0; p = p->next) {
400 	    if (p->declarator->func_def == FUNC_ANSI) {
401 		return TRUE;
402 	    }
403 	}
404     }
405     return FALSE;
406 }
407 #line 408 "grammar.tab.c"
408 
409 /* compatibility with bison */
410 #ifdef YYPARSE_PARAM
411 /* compatibility with FreeBSD */
412 # ifdef YYPARSE_PARAM_TYPE
413 #  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
414 # else
415 #  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
416 # endif
417 #else
418 # define YYPARSE_DECL() yyparse(void)
419 #endif
420 
421 /* Parameters sent to lex. */
422 #ifdef YYLEX_PARAM
423 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
424 # define YYLEX yylex(YYLEX_PARAM)
425 #else
426 # define YYLEX_DECL() yylex(void)
427 # define YYLEX yylex()
428 #endif
429 
430 /* Parameters sent to yyerror. */
431 #ifndef YYERROR_DECL
432 #define YYERROR_DECL() yyerror(const char *s)
433 #endif
434 #ifndef YYERROR_CALL
435 #define YYERROR_CALL(msg) yyerror(msg)
436 #endif
437 
438 extern int YYPARSE_DECL();
439 
440 #define T_IDENTIFIER 257
441 #define T_TYPEDEF_NAME 258
442 #define T_DEFINE_NAME 259
443 #define T_AUTO 260
444 #define T_EXTERN 261
445 #define T_REGISTER 262
446 #define T_STATIC 263
447 #define T_TYPEDEF 264
448 #define T_INLINE 265
449 #define T_EXTENSION 266
450 #define T_CHAR 267
451 #define T_DOUBLE 268
452 #define T_FLOAT 269
453 #define T_INT 270
454 #define T_VOID 271
455 #define T_LONG 272
456 #define T_SHORT 273
457 #define T_SIGNED 274
458 #define T_UNSIGNED 275
459 #define T_ENUM 276
460 #define T_STRUCT 277
461 #define T_UNION 278
462 #define T_Bool 279
463 #define T_Complex 280
464 #define T_Imaginary 281
465 #define T_TYPE_QUALIFIER 282
466 #define T_BRACKETS 283
467 #define T_LBRACE 284
468 #define T_MATCHRBRACE 285
469 #define T_ELLIPSIS 286
470 #define T_INITIALIZER 287
471 #define T_STRING_LITERAL 288
472 #define T_ASM 289
473 #define T_ASMARG 290
474 #define T_VA_DCL 291
475 #define YYERRCODE 256
476 typedef short YYINT;
477 static const YYINT grammar_lhs[] = {                     -1,
478     0,    0,   26,   26,   27,   27,   27,   27,   27,   27,
479    27,   31,   30,   30,   28,   28,   34,   28,   32,   32,
480    33,   33,   35,   35,   37,   38,   29,   39,   29,   36,
481    36,   36,   40,   40,    1,    1,    2,    2,    2,    3,
482     3,    3,    3,    3,    3,    4,    4,    4,    4,    4,
483     4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
484     5,    5,    6,    6,    6,   19,   19,    8,    8,    9,
485    41,    9,    7,    7,    7,   25,   23,   23,   10,   10,
486    11,   11,   11,   11,   11,   20,   20,   21,   21,   22,
487    22,   14,   14,   15,   15,   16,   16,   16,   17,   17,
488    18,   18,   24,   24,   12,   12,   12,   13,   13,   13,
489    13,   13,   13,   13,
490 };
491 static const YYINT grammar_len[] = {                      2,
492     0,    1,    1,    2,    1,    1,    1,    1,    3,    2,
493     2,    2,    3,    3,    2,    3,    0,    5,    2,    1,
494     0,    1,    1,    3,    0,    0,    7,    0,    5,    0,
495     1,    1,    1,    2,    1,    2,    1,    1,    1,    1,
496     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
497     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
498     1,    1,    3,    2,    2,    1,    1,    1,    3,    1,
499     0,    4,    3,    2,    2,    1,    1,    1,    2,    1,
500     1,    3,    2,    4,    4,    2,    3,    0,    1,    1,
501     2,    1,    3,    1,    3,    2,    2,    1,    0,    1,
502     1,    3,    1,    2,    1,    2,    1,    3,    2,    1,
503     4,    3,    3,    2,
504 };
505 static const YYINT grammar_defred[] = {                   0,
506     0,    0,    0,    0,   77,    0,   62,   40,    0,   42,
507    43,   20,   44,    0,   46,   47,   48,   49,   54,   50,
508    51,   52,   53,   76,   66,   67,   55,   56,   57,   61,
509     0,    7,    0,    0,   35,   37,   38,   39,   59,   60,
510    28,    0,    0,    0,  103,   81,    0,    0,    3,    5,
511     6,    8,    0,   10,   11,   78,    0,   90,    0,    0,
512   104,    0,   19,    0,   41,   45,   15,   36,    0,   68,
513     0,    0,    0,   83,    0,    0,   64,    0,    0,   74,
514     4,   58,    0,   82,   87,   91,    0,   14,   13,    9,
515    16,    0,   71,    0,   31,   33,    0,    0,    0,    0,
516     0,   94,    0,    0,  101,   12,   63,   73,    0,    0,
517    69,    0,    0,    0,   34,    0,  110,   96,   97,    0,
518     0,   84,    0,   85,    0,   23,    0,    0,   72,   26,
519    29,  114,    0,    0,    0,  109,    0,   93,   95,  102,
520    18,    0,    0,  108,  113,  112,    0,   24,   27,  111,
521 };
522 static const YYINT grammar_stos[] = {                     0,
523   256,   40,   42,   38,  257,  258,  259,  260,  261,  262,
524   263,  264,  265,  266,  267,  268,  269,  270,  271,  272,
525   273,  274,  275,  276,  277,  278,  279,  280,  281,  282,
526   289,   59,  293,  294,  295,  296,  297,  298,  299,  300,
527   303,  304,  312,  313,  316,  317,  318,  319,  320,  321,
528   322,  323,  325,  285,   59,  258,  303,  298,  314,  315,
529   316,  288,  264,  290,  261,  266,   59,  295,  301,  302,
530   303,  332,   40,  283,  284,  316,  324,  304,  316,  324,
531   320,  258,  294,   41,  313,  298,  294,  321,  324,   59,
532    59,   44,   61,  330,  291,  321,  329,  333,  294,  307,
533   308,  309,  310,  311,  316,  285,  324,  324,  327,  303,
534   302,  334,  329,  284,  321,   40,  283,  303,  305,  306,
535   313,   41,   44,   41,   44,  303,  326,  328,  287,  284,
536   285,   41,  305,  307,   40,  283,  306,  286,  309,  316,
537    59,   44,  331,   41,   41,   41,  307,  303,  285,   41,
538 };
539 static const YYINT grammar_dgoto[] = {                   33,
540    87,   35,   36,   37,   38,   39,   40,   69,   70,   41,
541    42,  119,  120,  100,  101,  102,  103,  104,   43,   44,
542    59,   60,   45,   46,   47,   48,   49,   50,   51,   52,
543    77,   53,  127,  109,  128,   97,   94,  143,   72,   98,
544   112,
545 };
546 static const YYINT grammar_sindex[] = {                  -2,
547    -3,   27, -239, -177,    0,    0,    0,    0, -274,    0,
548     0,    0,    0, -246,    0,    0,    0,    0,    0,    0,
549     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
550  -266,    0,    0,  455,    0,    0,    0,    0,    0,    0,
551     0,  -35, -245,  128,    0,    0, -245,   -2,    0,    0,
552     0,    0,  642,    0,    0,    0,  -15,    0,  -12, -239,
553     0,  590,    0,  -27,    0,    0,    0,    0,  -10,    0,
554   -11,  534,  -72,    0, -237, -232,    0,  -35, -232,    0,
555     0,    0,  642,    0,    0,    0,  455,    0,    0,    0,
556     0,   27,    0,  534,    0,    0, -222,  617,  209,   34,
557    39,    0,   44,   42,    0,    0,    0,    0,   27,  -11,
558     0, -200, -196, -195,    0,  174,    0,    0,    0,  -33,
559   243,    0,  561,    0, -177,    0,   33,   49,    0,    0,
560     0,    0,   53,   55,  417,    0,  -33,    0,    0,    0,
561     0,   27, -188,    0,    0,    0,   57,    0,    0,    0,
562 };
563 static const YYINT grammar_rindex[] = {                  99,
564     0,    0,  275,    0,    0,  -38,    0,    0,  481,    0,
565     0,    0,    0,  509,    0,    0,    0,    0,    0,    0,
566     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
567     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
568     0,   30,    0,    0,    0,    0,    0,  101,    0,    0,
569     0,    0,    0,    0,    0,    0,    0,    0,  343,  309,
570     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
571    98, -182,   62,    0,    0,  133,    0,   64,  379,    0,
572     0,    0,   -5,    0,    0,    0,    0,    0,    0,    0,
573     0,    0,    0, -182,    0,    0,    0, -180,  -19,    0,
574    65,    0,    0,   68,    0,    0,    0,    0,   51,    9,
575     0,    0,    0,    0,    0,    0,    0,    0,    0,  -13,
576    19,    0,    0,    0,    0,    0,    0,   52,    0,    0,
577     0,    0,    0,    0,    0,    0,   35,    0,    0,    0,
578     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
579 };
580 #if YYBTYACC
581 static const YYINT grammar_cindex[] = {                   0,
582     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
583     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
584     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
585     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
586     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
587     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
588     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
589     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
590     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
591     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
592     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
593     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
594     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
595     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
596     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
597 };
598 #endif
599 static const YYINT grammar_gindex[] = {                   0,
600    11,  -17,    0,    0,   13,    0,    0,    0,   20,    8,
601   -43,   -1,   -8,  -89,    0,   -9,    0,    0,    0,  -44,
602     0,    0,    4,    0,    0,    0,   70,  -53,    0,    0,
603   -18,    0,    0,    0,    0,   22,    0,    0,    0,    0,
604     0,
605 };
606 #define YYTABLESIZE 924
607 static const YYINT grammar_table[] = {                   58,
608    78,   58,   58,   58,   73,   58,  135,   61,   88,   57,
609    34,    5,   56,   62,   85,   58,   68,   63,   96,    7,
610    58,   98,   78,   64,   98,   84,  134,  107,   80,    3,
611   107,   90,   17,   92,   17,    4,   17,    2,   75,    3,
612    96,   71,   30,   89,  115,  147,   76,  106,   91,   93,
613    79,   75,   70,   17,  121,   55,   32,  107,   34,  105,
614   108,  114,  105,   83,    4,   68,    2,   70,    3,   68,
615    80,  121,   86,   80,  122,  106,  105,   78,  106,    5,
616    56,   68,  123,   99,  124,  125,  129,  130,   80,  131,
617    80,  141,  142,  144,  110,  145,  149,  150,    1,  110,
618     2,   30,   99,   32,   79,   92,  118,   79,  100,   21,
619    22,  111,  137,  139,  133,  113,  126,   81,    0,    0,
620     0,    0,   79,   57,   79,    0,   99,    0,  140,    0,
621     0,    0,    0,   99,    0,    0,    0,    0,    0,    0,
622     0,   70,    0,    0,    0,   99,    0,    0,    0,  148,
623     0,    0,    0,    0,    0,    0,   70,    0,    0,    0,
624     0,    0,    0,    0,    0,    4,    0,    2,    0,    0,
625    65,    0,   65,   65,   65,    0,   65,    0,    0,    0,
626     0,    0,    0,    0,    5,    6,    7,    8,   65,   10,
627    11,   65,   13,   66,   15,   16,   17,   18,   19,   20,
628    21,   22,   23,   24,   25,   26,   27,   28,   29,   30,
629     0,    4,    0,  116,  132,    3,    0,    0,   58,   58,
630    58,   58,   58,   58,   58,   78,   58,   58,   58,   58,
631    58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
632    58,   58,   58,   58,   58,   78,    4,   74,  116,  136,
633     3,   17,   78,    1,    5,    6,    7,    8,    9,   10,
634    11,   12,   13,   14,   15,   16,   17,   18,   19,   20,
635    21,   22,   23,   24,   25,   26,   27,   28,   29,   30,
636     4,   54,  116,    5,   56,    0,   31,   80,   80,   80,
637    80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
638    80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
639    80,   80,   88,   80,   88,   88,   88,    0,   88,    0,
640    80,   79,   79,   79,   79,   79,   79,   79,   79,   79,
641    79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
642    79,   79,   79,   79,   79,   79,   89,   79,   89,   89,
643    89,    0,   89,    0,   79,   25,   25,   25,   25,   25,
644    25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
645    25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
646    86,   25,   86,   86,    5,   56,   86,    0,   25,   65,
647    65,   65,   65,   65,   65,   65,    0,   65,   65,   65,
648    65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
649    65,   65,   65,   65,   65,   65,   75,    0,   75,   75,
650    75,    0,   75,    0,    0,    0,    0,    0,    0,    0,
651     5,    6,    7,    8,   65,   10,   11,   75,   13,   66,
652    15,   16,   17,   18,   19,   20,   21,   22,   23,   24,
653    25,   26,   27,   28,   29,   30,  117,  146,    0,    0,
654     0,    0,    0,    0,    0,    5,    6,    7,    8,   65,
655    10,   11,    0,   13,   66,   15,   16,   17,   18,   19,
656    20,   21,   22,   23,   24,   25,   26,   27,   28,   29,
657    30,  117,    4,    0,    2,    0,    3,    0,    0,    5,
658    56,    0,    0,    0,    0,    0,    0,    0,    0,    0,
659     0,    0,    0,   67,    0,    0,    0,    0,   41,    0,
660    41,    0,   41,    0,    0,  117,    0,    0,    0,    0,
661     0,   88,   88,    0,    0,    0,    0,    0,    0,   41,
662     0,    0,    0,    0,    0,    0,   45,    0,   45,    0,
663    45,    0,    0,    0,    0,    0,    0,   88,    0,    0,
664     0,    0,    0,    0,    0,   89,   89,   45,    0,    0,
665     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
666     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
667     0,   89,    0,    0,    0,    0,    0,    0,    0,   86,
668    86,    0,    0,    0,    0,    0,    0,    0,    0,    0,
669     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
670     0,    0,    0,    0,    0,   86,    0,    0,    0,    0,
671     0,    0,    0,    0,    0,   75,   75,   75,   75,   75,
672    75,   75,    0,   75,   75,   75,   75,   75,   75,   75,
673    75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
674    75,   75,    0,    0,    0,    0,    0,    0,    0,    0,
675     0,    0,    0,    0,   82,    7,    8,   65,   10,   11,
676     0,   13,   66,   15,   16,   17,   18,   19,   20,   21,
677    22,   23,   24,   25,   26,   27,   28,   29,   30,    0,
678     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
679     0,    5,    6,    7,    8,   65,   10,   11,    0,   13,
680    66,   15,   16,   17,   18,   19,   20,   21,   22,   23,
681    24,   25,   26,   27,   28,   29,   30,   41,   41,   41,
682    41,   41,   41,   41,    0,   41,   41,   41,   41,   41,
683    41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
684    41,   41,   41,    0,    0,   45,   45,   45,   45,   45,
685    45,   45,    0,   45,   45,   45,   45,   45,   45,   45,
686    45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
687    45,   82,    7,    8,   65,   10,   11,   12,   13,   14,
688    15,   16,   17,   18,   19,   20,   21,   22,   23,   24,
689    25,   26,   27,   28,   29,   30,    0,    0,   82,    7,
690     8,   65,   10,   11,   95,   13,   66,   15,   16,   17,
691    18,   19,   20,   21,   22,   23,   24,   25,   26,   27,
692    28,   29,   30,    0,    0,    0,  138,   82,    7,    8,
693    65,   10,   11,   12,   13,   14,   15,   16,   17,   18,
694    19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
695    29,   30,    0,   75,   82,    7,    8,   65,   10,   11,
696    12,   13,   14,   15,   16,   17,   18,   19,   20,   21,
697    22,   23,   24,   25,   26,   27,   28,   29,   30,   82,
698     7,    8,   65,   10,   11,    0,   13,   66,   15,   16,
699    17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
700    27,   28,   29,   30,
701 };
702 static const YYINT grammar_check[] = {                   38,
703    44,   40,   41,   42,   40,   44,   40,    4,   62,    2,
704     0,  257,  258,  288,   59,    3,   34,  264,   72,  259,
705    59,   41,   61,  290,   44,   41,  116,   41,   47,   42,
706    44,   59,   38,   44,   40,   38,   42,   40,  284,   42,
707    94,   34,  282,   62,   98,  135,   43,  285,   59,   61,
708    47,  284,   44,   59,   99,   59,   59,   76,   48,   41,
709    79,  284,   44,   53,   38,   83,   40,   59,   42,   87,
710    41,  116,   60,   44,   41,   41,   73,  121,   44,  257,
711   258,   99,   44,   73,   41,   44,  287,  284,   59,  285,
712    61,   59,   44,   41,   87,   41,  285,   41,    0,   92,
713     0,  284,   41,  284,   41,   41,   99,   44,   41,   59,
714    59,   92,  121,  123,  116,   94,  109,   48,   -1,   -1,
715    -1,   -1,   59,  116,   61,   -1,  116,   -1,  125,   -1,
716    -1,   -1,   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,
717    -1,   44,   -1,   -1,   -1,  135,   -1,   -1,   -1,  142,
718    -1,   -1,   -1,   -1,   -1,   -1,   59,   -1,   -1,   -1,
719    -1,   -1,   -1,   -1,   -1,   38,   -1,   40,   -1,   -1,
720    38,   -1,   40,   41,   42,   -1,   44,   -1,   -1,   -1,
721    -1,   -1,   -1,   -1,  257,  258,  259,  260,  261,  262,
722   263,   59,  265,  266,  267,  268,  269,  270,  271,  272,
723   273,  274,  275,  276,  277,  278,  279,  280,  281,  282,
724    -1,   38,   -1,   40,   41,   42,   -1,   -1,  257,  258,
725   259,  260,  261,  262,  263,  264,  265,  266,  267,  268,
726   269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
727   279,  280,  281,  282,  283,  284,   38,  283,   40,  283,
728    42,  257,  291,  256,  257,  258,  259,  260,  261,  262,
729   263,  264,  265,  266,  267,  268,  269,  270,  271,  272,
730   273,  274,  275,  276,  277,  278,  279,  280,  281,  282,
731    38,  285,   40,  257,  258,   -1,  289,  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,   38,  284,   40,   41,   42,   -1,   44,   -1,
735   291,  258,  259,  260,  261,  262,  263,  264,  265,  266,
736   267,  268,  269,  270,  271,  272,  273,  274,  275,  276,
737   277,  278,  279,  280,  281,  282,   38,  284,   40,   41,
738    42,   -1,   44,   -1,  291,  258,  259,  260,  261,  262,
739   263,  264,  265,  266,  267,  268,  269,  270,  271,  272,
740   273,  274,  275,  276,  277,  278,  279,  280,  281,  282,
741    38,  284,   40,   41,  257,  258,   44,   -1,  291,  257,
742   258,  259,  260,  261,  262,  263,   -1,  265,  266,  267,
743   268,  269,  270,  271,  272,  273,  274,  275,  276,  277,
744   278,  279,  280,  281,  282,  283,   38,   -1,   40,   41,
745    42,   -1,   44,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
746   257,  258,  259,  260,  261,  262,  263,   59,  265,  266,
747   267,  268,  269,  270,  271,  272,  273,  274,  275,  276,
748   277,  278,  279,  280,  281,  282,  283,   41,   -1,   -1,
749    -1,   -1,   -1,   -1,   -1,  257,  258,  259,  260,  261,
750   262,  263,   -1,  265,  266,  267,  268,  269,  270,  271,
751   272,  273,  274,  275,  276,  277,  278,  279,  280,  281,
752   282,  283,   38,   -1,   40,   -1,   42,   -1,   -1,  257,
753   258,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
754    -1,   -1,   -1,   59,   -1,   -1,   -1,   -1,   38,   -1,
755    40,   -1,   42,   -1,   -1,  283,   -1,   -1,   -1,   -1,
756    -1,  257,  258,   -1,   -1,   -1,   -1,   -1,   -1,   59,
757    -1,   -1,   -1,   -1,   -1,   -1,   38,   -1,   40,   -1,
758    42,   -1,   -1,   -1,   -1,   -1,   -1,  283,   -1,   -1,
759    -1,   -1,   -1,   -1,   -1,  257,  258,   59,   -1,   -1,
760    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
761    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
762    -1,  283,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,
763   258,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
764    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
765    -1,   -1,   -1,   -1,   -1,  283,   -1,   -1,   -1,   -1,
766    -1,   -1,   -1,   -1,   -1,  257,  258,  259,  260,  261,
767   262,  263,   -1,  265,  266,  267,  268,  269,  270,  271,
768   272,  273,  274,  275,  276,  277,  278,  279,  280,  281,
769   282,  283,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
770    -1,   -1,   -1,   -1,  258,  259,  260,  261,  262,  263,
771    -1,  265,  266,  267,  268,  269,  270,  271,  272,  273,
772   274,  275,  276,  277,  278,  279,  280,  281,  282,   -1,
773    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
774    -1,  257,  258,  259,  260,  261,  262,  263,   -1,  265,
775   266,  267,  268,  269,  270,  271,  272,  273,  274,  275,
776   276,  277,  278,  279,  280,  281,  282,  257,  258,  259,
777   260,  261,  262,  263,   -1,  265,  266,  267,  268,  269,
778   270,  271,  272,  273,  274,  275,  276,  277,  278,  279,
779   280,  281,  282,   -1,   -1,  257,  258,  259,  260,  261,
780   262,  263,   -1,  265,  266,  267,  268,  269,  270,  271,
781   272,  273,  274,  275,  276,  277,  278,  279,  280,  281,
782   282,  258,  259,  260,  261,  262,  263,  264,  265,  266,
783   267,  268,  269,  270,  271,  272,  273,  274,  275,  276,
784   277,  278,  279,  280,  281,  282,   -1,   -1,  258,  259,
785   260,  261,  262,  263,  291,  265,  266,  267,  268,  269,
786   270,  271,  272,  273,  274,  275,  276,  277,  278,  279,
787   280,  281,  282,   -1,   -1,   -1,  286,  258,  259,  260,
788   261,  262,  263,  264,  265,  266,  267,  268,  269,  270,
789   271,  272,  273,  274,  275,  276,  277,  278,  279,  280,
790   281,  282,   -1,  284,  258,  259,  260,  261,  262,  263,
791   264,  265,  266,  267,  268,  269,  270,  271,  272,  273,
792   274,  275,  276,  277,  278,  279,  280,  281,  282,  258,
793   259,  260,  261,  262,  263,   -1,  265,  266,  267,  268,
794   269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
795   279,  280,  281,  282,
796 };
797 #define YYFINAL 33
798 #ifndef YYDEBUG
799 #define YYDEBUG 0
800 #endif
801 #define YYMAXTOKEN 291
802 #define YYUNDFTOKEN 335
803 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
804 #if YYDEBUG
805 static const char *const grammar_name[] = {
806 
807 "$end",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,
808 0,"'&'",0,"'('","')'","'*'",0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,"';'",0,"'='",0,
809 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,
810 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,
811 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,
812 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,
813 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,"error",
814 "T_IDENTIFIER","T_TYPEDEF_NAME","T_DEFINE_NAME","T_AUTO","T_EXTERN",
815 "T_REGISTER","T_STATIC","T_TYPEDEF","T_INLINE","T_EXTENSION","T_CHAR",
816 "T_DOUBLE","T_FLOAT","T_INT","T_VOID","T_LONG","T_SHORT","T_SIGNED",
817 "T_UNSIGNED","T_ENUM","T_STRUCT","T_UNION","T_Bool","T_Complex","T_Imaginary",
818 "T_TYPE_QUALIFIER","T_BRACKETS","T_LBRACE","T_MATCHRBRACE","T_ELLIPSIS",
819 "T_INITIALIZER","T_STRING_LITERAL","T_ASM","T_ASMARG","T_VA_DCL","$accept",
820 "program","decl_specifiers","decl_specifier","storage_class","type_specifier",
821 "type_qualifier","struct_or_union_specifier","enum_specifier",
822 "init_declarator_list","init_declarator","declarator","direct_declarator",
823 "abs_declarator","direct_abs_declarator","parameter_type_list","parameter_list",
824 "parameter_declaration","opt_identifier_list","identifier_list",
825 "struct_or_union","pointer","opt_type_qualifiers","type_qualifier_list",
826 "any_id","identifier_or_ref","enumeration","translation_unit",
827 "external_declaration","declaration","function_definition",
828 "linkage_specification","braces","any_typedef","opt_declarator_list","$$1",
829 "declarator_list","opt_declaration_list","$$2","$$3","$$4","declaration_list",
830 "$$5","illegal-symbol",
831 };
832 static const char *const grammar_rule[] = {
833 "$accept : program",
834 "program :",
835 "program : translation_unit",
836 "translation_unit : external_declaration",
837 "translation_unit : translation_unit external_declaration",
838 "external_declaration : declaration",
839 "external_declaration : function_definition",
840 "external_declaration : ';'",
841 "external_declaration : linkage_specification",
842 "external_declaration : T_ASM T_ASMARG ';'",
843 "external_declaration : error T_MATCHRBRACE",
844 "external_declaration : error ';'",
845 "braces : T_LBRACE T_MATCHRBRACE",
846 "linkage_specification : T_EXTERN T_STRING_LITERAL braces",
847 "linkage_specification : T_EXTERN T_STRING_LITERAL declaration",
848 "declaration : decl_specifiers ';'",
849 "declaration : decl_specifiers init_declarator_list ';'",
850 "$$1 :",
851 "declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'",
852 "any_typedef : T_EXTENSION T_TYPEDEF",
853 "any_typedef : T_TYPEDEF",
854 "opt_declarator_list :",
855 "opt_declarator_list : declarator_list",
856 "declarator_list : declarator",
857 "declarator_list : declarator_list ',' declarator",
858 "$$2 :",
859 "$$3 :",
860 "function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE",
861 "$$4 :",
862 "function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE",
863 "opt_declaration_list :",
864 "opt_declaration_list : T_VA_DCL",
865 "opt_declaration_list : declaration_list",
866 "declaration_list : declaration",
867 "declaration_list : declaration_list declaration",
868 "decl_specifiers : decl_specifier",
869 "decl_specifiers : decl_specifiers decl_specifier",
870 "decl_specifier : storage_class",
871 "decl_specifier : type_specifier",
872 "decl_specifier : type_qualifier",
873 "storage_class : T_AUTO",
874 "storage_class : T_EXTERN",
875 "storage_class : T_REGISTER",
876 "storage_class : T_STATIC",
877 "storage_class : T_INLINE",
878 "storage_class : T_EXTENSION",
879 "type_specifier : T_CHAR",
880 "type_specifier : T_DOUBLE",
881 "type_specifier : T_FLOAT",
882 "type_specifier : T_INT",
883 "type_specifier : T_LONG",
884 "type_specifier : T_SHORT",
885 "type_specifier : T_SIGNED",
886 "type_specifier : T_UNSIGNED",
887 "type_specifier : T_VOID",
888 "type_specifier : T_Bool",
889 "type_specifier : T_Complex",
890 "type_specifier : T_Imaginary",
891 "type_specifier : T_TYPEDEF_NAME",
892 "type_specifier : struct_or_union_specifier",
893 "type_specifier : enum_specifier",
894 "type_qualifier : T_TYPE_QUALIFIER",
895 "type_qualifier : T_DEFINE_NAME",
896 "struct_or_union_specifier : struct_or_union any_id braces",
897 "struct_or_union_specifier : struct_or_union braces",
898 "struct_or_union_specifier : struct_or_union any_id",
899 "struct_or_union : T_STRUCT",
900 "struct_or_union : T_UNION",
901 "init_declarator_list : init_declarator",
902 "init_declarator_list : init_declarator_list ',' init_declarator",
903 "init_declarator : declarator",
904 "$$5 :",
905 "init_declarator : declarator '=' $$5 T_INITIALIZER",
906 "enum_specifier : enumeration any_id braces",
907 "enum_specifier : enumeration braces",
908 "enum_specifier : enumeration any_id",
909 "enumeration : T_ENUM",
910 "any_id : T_IDENTIFIER",
911 "any_id : T_TYPEDEF_NAME",
912 "declarator : pointer direct_declarator",
913 "declarator : direct_declarator",
914 "direct_declarator : identifier_or_ref",
915 "direct_declarator : '(' declarator ')'",
916 "direct_declarator : direct_declarator T_BRACKETS",
917 "direct_declarator : direct_declarator '(' parameter_type_list ')'",
918 "direct_declarator : direct_declarator '(' opt_identifier_list ')'",
919 "pointer : '*' opt_type_qualifiers",
920 "pointer : '*' opt_type_qualifiers pointer",
921 "opt_type_qualifiers :",
922 "opt_type_qualifiers : type_qualifier_list",
923 "type_qualifier_list : type_qualifier",
924 "type_qualifier_list : type_qualifier_list type_qualifier",
925 "parameter_type_list : parameter_list",
926 "parameter_type_list : parameter_list ',' T_ELLIPSIS",
927 "parameter_list : parameter_declaration",
928 "parameter_list : parameter_list ',' parameter_declaration",
929 "parameter_declaration : decl_specifiers declarator",
930 "parameter_declaration : decl_specifiers abs_declarator",
931 "parameter_declaration : decl_specifiers",
932 "opt_identifier_list :",
933 "opt_identifier_list : identifier_list",
934 "identifier_list : any_id",
935 "identifier_list : identifier_list ',' any_id",
936 "identifier_or_ref : any_id",
937 "identifier_or_ref : '&' any_id",
938 "abs_declarator : pointer",
939 "abs_declarator : pointer direct_abs_declarator",
940 "abs_declarator : direct_abs_declarator",
941 "direct_abs_declarator : '(' abs_declarator ')'",
942 "direct_abs_declarator : direct_abs_declarator T_BRACKETS",
943 "direct_abs_declarator : T_BRACKETS",
944 "direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')'",
945 "direct_abs_declarator : direct_abs_declarator '(' ')'",
946 "direct_abs_declarator : '(' parameter_type_list ')'",
947 "direct_abs_declarator : '(' ')'",
948 
949 };
950 #endif
951 
952 int      yydebug;
953 int      yynerrs;
954 
955 int      yyerrflag;
956 int      yychar;
957 YYSTYPE  yyval;
958 YYSTYPE  yylval;
959 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
960 YYLTYPE  yyloc; /* position returned by actions */
961 YYLTYPE  yylloc; /* position from the lexer */
962 #endif
963 
964 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
965 #ifndef YYLLOC_DEFAULT
966 #define YYLLOC_DEFAULT(loc, rhs, n) \
967 do \
968 { \
969     if (n == 0) \
970     { \
971         (loc).first_line   = ((rhs)[-1]).last_line; \
972         (loc).first_column = ((rhs)[-1]).last_column; \
973         (loc).last_line    = ((rhs)[-1]).last_line; \
974         (loc).last_column  = ((rhs)[-1]).last_column; \
975     } \
976     else \
977     { \
978         (loc).first_line   = ((rhs)[ 0 ]).first_line; \
979         (loc).first_column = ((rhs)[ 0 ]).first_column; \
980         (loc).last_line    = ((rhs)[n-1]).last_line; \
981         (loc).last_column  = ((rhs)[n-1]).last_column; \
982     } \
983 } while (0)
984 #endif /* YYLLOC_DEFAULT */
985 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
986 #if YYBTYACC
987 
988 #ifndef YYLVQUEUEGROWTH
989 #define YYLVQUEUEGROWTH 32
990 #endif
991 #endif /* YYBTYACC */
992 
993 /* define the initial stack-sizes */
994 #ifdef YYSTACKSIZE
995 #undef YYMAXDEPTH
996 #define YYMAXDEPTH  YYSTACKSIZE
997 #else
998 #ifdef YYMAXDEPTH
999 #define YYSTACKSIZE YYMAXDEPTH
1000 #else
1001 #define YYSTACKSIZE 10000
1002 #define YYMAXDEPTH  10000
1003 #endif
1004 #endif
1005 
1006 #ifndef YYINITSTACKSIZE
1007 #define YYINITSTACKSIZE 200
1008 #endif
1009 
1010 typedef struct {
1011     unsigned stacksize;
1012     short    *s_base;
1013     short    *s_mark;
1014     short    *s_last;
1015     YYSTYPE  *l_base;
1016     YYSTYPE  *l_mark;
1017 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1018     YYLTYPE  *p_base;
1019     YYLTYPE  *p_mark;
1020 #endif
1021 } YYSTACKDATA;
1022 #if YYBTYACC
1023 
1024 struct YYParseState_s
1025 {
1026     struct YYParseState_s *save;    /* Previously saved parser state */
1027     YYSTACKDATA            yystack; /* saved parser stack */
1028     int                    state;   /* saved parser state */
1029     int                    errflag; /* saved error recovery status */
1030     int                    lexeme;  /* saved index of the conflict lexeme in the lexical queue */
1031     YYINT                  ctry;    /* saved index in yyctable[] for this conflict */
1032 };
1033 typedef struct YYParseState_s YYParseState;
1034 #endif /* YYBTYACC */
1035 /* variables for the parser stack */
1036 static YYSTACKDATA yystack;
1037 #if YYBTYACC
1038 
1039 /* Current parser state */
1040 static YYParseState *yyps = 0;
1041 
1042 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
1043 static YYParseState *yypath = 0;
1044 
1045 /* Base of the lexical value queue */
1046 static YYSTYPE *yylvals = 0;
1047 
1048 /* Current position at lexical value queue */
1049 static YYSTYPE *yylvp = 0;
1050 
1051 /* End position of lexical value queue */
1052 static YYSTYPE *yylve = 0;
1053 
1054 /* The last allocated position at the lexical value queue */
1055 static YYSTYPE *yylvlim = 0;
1056 
1057 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1058 /* Base of the lexical position queue */
1059 static YYLTYPE *yylpsns = 0;
1060 
1061 /* Current position at lexical position queue */
1062 static YYLTYPE *yylpp = 0;
1063 
1064 /* End position of lexical position queue */
1065 static YYLTYPE *yylpe = 0;
1066 
1067 /* The last allocated position at the lexical position queue */
1068 static YYLTYPE *yylplim = 0;
1069 #endif
1070 
1071 /* Current position at lexical token queue */
1072 static short  *yylexp = 0;
1073 
1074 static short  *yylexemes = 0;
1075 #endif /* YYBTYACC */
1076 #line 1014 "grammar.y"
1077 
1078 /* lex.yy.c */
1079 #define BEGIN yy_start = 1 + 2 *
1080 
1081 #define CPP1 1
1082 #define INIT1 2
1083 #define INIT2 3
1084 #define CURLY 4
1085 #define LEXYACC 5
1086 #define ASM 6
1087 #define CPP_INLINE 7
1088 
1089 extern char *yytext;
1090 extern FILE *yyin, *yyout;
1091 
1092 static int curly;			/* number of curly brace nesting levels */
1093 static int ly_count;			/* number of occurances of %% */
1094 static int inc_depth;			/* include nesting level */
1095 static SymbolTable *included_files;	/* files already included */
1096 static int yy_start = 0;		/* start state number */
1097 
1098 #define grammar_error(s) yaccError(s)
1099 
1100 static void
1101 yaccError (const char *msg)
1102 {
1103     func_params = NULL;
1104     put_error();		/* tell what line we're on, and what file */
1105     fprintf(stderr, "%s at token '%s'\n", msg, yytext);
1106 }
1107 
1108 /* Initialize the table of type qualifier keywords recognized by the lexical
1109  * analyzer.
1110  */
1111 void
1112 init_parser (void)
1113 {
1114     static const char *keywords[] = {
1115 	"const",
1116 	"restrict",
1117 	"volatile",
1118 	"interrupt",
1119 #ifdef vms
1120 	"noshare",
1121 	"readonly",
1122 #endif
1123 #if defined(MSDOS) || defined(OS2)
1124 	"__cdecl",
1125 	"__export",
1126 	"__far",
1127 	"__fastcall",
1128 	"__fortran",
1129 	"__huge",
1130 	"__inline",
1131 	"__interrupt",
1132 	"__loadds",
1133 	"__near",
1134 	"__pascal",
1135 	"__saveregs",
1136 	"__segment",
1137 	"__stdcall",
1138 	"__syscall",
1139 	"_cdecl",
1140 	"_cs",
1141 	"_ds",
1142 	"_es",
1143 	"_export",
1144 	"_far",
1145 	"_fastcall",
1146 	"_fortran",
1147 	"_huge",
1148 	"_interrupt",
1149 	"_loadds",
1150 	"_near",
1151 	"_pascal",
1152 	"_saveregs",
1153 	"_seg",
1154 	"_segment",
1155 	"_ss",
1156 	"cdecl",
1157 	"far",
1158 	"huge",
1159 	"near",
1160 	"pascal",
1161 #ifdef OS2
1162 	"__far16",
1163 #endif
1164 #endif
1165 #ifdef __GNUC__
1166 	/* gcc aliases */
1167 	"__builtin_va_arg",
1168 	"__builtin_va_list",
1169 	"__const",
1170 	"__const__",
1171 	"__inline",
1172 	"__inline__",
1173 	"__restrict",
1174 	"__restrict__",
1175 	"__volatile",
1176 	"__volatile__",
1177 #endif
1178     };
1179     unsigned i;
1180 
1181     /* Initialize type qualifier table. */
1182     type_qualifiers = new_symbol_table();
1183     for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) {
1184 	new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE);
1185     }
1186 }
1187 
1188 /* Process the C source file.  Write function prototypes to the standard
1189  * output.  Convert function definitions and write the converted source
1190  * code to a temporary file.
1191  */
1192 void
1193 process_file (FILE *infile, char *name)
1194 {
1195     char *s;
1196 
1197     if (strlen(name) > 2) {
1198 	s = name + strlen(name) - 2;
1199 	if (*s == '.') {
1200 	    ++s;
1201 	    if (*s == 'l' || *s == 'y')
1202 		BEGIN LEXYACC;
1203 #if defined(MSDOS) || defined(OS2)
1204 	    if (*s == 'L' || *s == 'Y')
1205 		BEGIN LEXYACC;
1206 #endif
1207 	}
1208     }
1209 
1210     included_files = new_symbol_table();
1211     typedef_names = new_symbol_table();
1212     define_names = new_symbol_table();
1213     inc_depth = -1;
1214     curly = 0;
1215     ly_count = 0;
1216     func_params = NULL;
1217     yyin = infile;
1218     include_file(strcpy(base_file, name), func_style != FUNC_NONE);
1219     if (file_comments) {
1220 #if OPT_LINTLIBRARY
1221     	if (lintLibrary()) {
1222 	    put_blankline(stdout);
1223 	    begin_tracking();
1224 	}
1225 #endif
1226 	put_string(stdout, "/* ");
1227 	put_string(stdout, cur_file_name());
1228 	put_string(stdout, " */\n");
1229     }
1230     yyparse();
1231     free_symbol_table(define_names);
1232     free_symbol_table(typedef_names);
1233     free_symbol_table(included_files);
1234 }
1235 
1236 #ifdef NO_LEAKS
1237 void
1238 free_parser(void)
1239 {
1240     free_symbol_table (type_qualifiers);
1241 #ifdef FLEX_SCANNER
1242     if (yy_current_buffer != 0)
1243 	yy_delete_buffer(yy_current_buffer);
1244 #endif
1245 }
1246 #endif
1247 #line 1248 "grammar.tab.c"
1248 
1249 /* For use in generated program */
1250 #define yydepth (int)(yystack.s_mark - yystack.s_base)
1251 #if YYBTYACC
1252 #define yytrial (yyps->save)
1253 #endif /* YYBTYACC */
1254 
1255 #if YYDEBUG
1256 #include <stdio.h>		/* needed for printf */
1257 #endif
1258 
1259 #include <stdlib.h>	/* needed for malloc, etc */
1260 #include <string.h>	/* needed for memset */
1261 
1262 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
1263 static int yygrowstack(YYSTACKDATA *data)
1264 {
1265     int i;
1266     unsigned newsize;
1267     short *newss;
1268     YYSTYPE *newvs;
1269 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1270     YYLTYPE *newps;
1271 #endif
1272 
1273     if ((newsize = data->stacksize) == 0)
1274         newsize = YYINITSTACKSIZE;
1275     else if (newsize >= YYMAXDEPTH)
1276         return YYENOMEM;
1277     else if ((newsize *= 2) > YYMAXDEPTH)
1278         newsize = YYMAXDEPTH;
1279 
1280     i = (int) (data->s_mark - data->s_base);
1281     newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
1282     if (newss == 0)
1283         return YYENOMEM;
1284 
1285     data->s_base = newss;
1286     data->s_mark = newss + i;
1287 
1288     newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
1289     if (newvs == 0)
1290         return YYENOMEM;
1291 
1292     data->l_base = newvs;
1293     data->l_mark = newvs + i;
1294 
1295 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1296     newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
1297     if (newps == 0)
1298         return YYENOMEM;
1299 
1300     data->p_base = newps;
1301     data->p_mark = newps + i;
1302 #endif
1303 
1304     data->stacksize = newsize;
1305     data->s_last = data->s_base + newsize - 1;
1306 
1307 #if YYDEBUG
1308     if (yydebug)
1309         fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
1310 #endif
1311     return 0;
1312 }
1313 
1314 #if YYPURE || defined(YY_NO_LEAKS)
1315 static void yyfreestack(YYSTACKDATA *data)
1316 {
1317     free(data->s_base);
1318     free(data->l_base);
1319 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1320     free(data->p_base);
1321 #endif
1322     memset(data, 0, sizeof(*data));
1323 }
1324 #else
1325 #define yyfreestack(data) /* nothing */
1326 #endif /* YYPURE || defined(YY_NO_LEAKS) */
1327 #if YYBTYACC
1328 
1329 static YYParseState *
1330 yyNewState(unsigned size)
1331 {
1332     YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
1333     if (p == NULL) return NULL;
1334 
1335     p->yystack.stacksize = size;
1336     if (size == 0)
1337     {
1338         p->yystack.s_base = NULL;
1339         p->yystack.l_base = NULL;
1340 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1341         p->yystack.p_base = NULL;
1342 #endif
1343         return p;
1344     }
1345     p->yystack.s_base    = (short *) malloc(size * sizeof(short));
1346     if (p->yystack.s_base == NULL) return NULL;
1347     p->yystack.l_base    = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
1348     if (p->yystack.l_base == NULL) return NULL;
1349     memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
1350 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1351     p->yystack.p_base    = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
1352     if (p->yystack.p_base == NULL) return NULL;
1353     memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
1354 #endif
1355 
1356     return p;
1357 }
1358 
1359 static void
1360 yyFreeState(YYParseState *p)
1361 {
1362     yyfreestack(&p->yystack);
1363     free(p);
1364 }
1365 #endif /* YYBTYACC */
1366 
1367 #define YYABORT  goto yyabort
1368 #define YYREJECT goto yyabort
1369 #define YYACCEPT goto yyaccept
1370 #define YYERROR  goto yyerrlab
1371 #if YYBTYACC
1372 #define YYVALID        do { if (yyps->save)            goto yyvalid; } while(0)
1373 #define YYVALID_NESTED do { if (yyps->save && \
1374                                 yyps->save->save == 0) goto yyvalid; } while(0)
1375 #endif /* YYBTYACC */
1376 
1377 int
1378 YYPARSE_DECL()
1379 {
1380     int yym, yyn, yystate, yyresult;
1381 #if YYBTYACC
1382     int yynewerrflag;
1383     YYParseState *yyerrctx = NULL;
1384 #endif /* YYBTYACC */
1385 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1386     YYLTYPE  yyerror_loc_range[2]; /* position of error start & end */
1387 #endif
1388 #if YYDEBUG
1389     const char *yys;
1390 
1391     if ((yys = getenv("YYDEBUG")) != 0)
1392     {
1393         yyn = *yys;
1394         if (yyn >= '0' && yyn <= '9')
1395             yydebug = yyn - '0';
1396     }
1397     if (yydebug)
1398         fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
1399 #endif
1400 
1401 #if YYBTYACC
1402     yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
1403     yyps->save = 0;
1404 #endif /* YYBTYACC */
1405     yynerrs = 0;
1406     yyerrflag = 0;
1407     yychar = YYEMPTY;
1408     yystate = 0;
1409 
1410 #if YYPURE
1411     memset(&yystack, 0, sizeof(yystack));
1412 #endif
1413 
1414     if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1415     yystack.s_mark = yystack.s_base;
1416     yystack.l_mark = yystack.l_base;
1417 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1418     yystack.p_mark = yystack.p_base;
1419 #endif
1420     yystate = 0;
1421     *yystack.s_mark = 0;
1422 
1423 yyloop:
1424     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
1425     if (yychar < 0)
1426     {
1427 #if YYBTYACC
1428         do {
1429         if (yylvp < yylve)
1430         {
1431             /* we're currently re-reading tokens */
1432             yylval = *yylvp++;
1433 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1434             yylloc = *yylpp++;
1435 #endif
1436             yychar = *yylexp++;
1437             break;
1438         }
1439         if (yyps->save)
1440         {
1441             /* in trial mode; save scanner results for future parse attempts */
1442             if (yylvp == yylvlim)
1443             {   /* Enlarge lexical value queue */
1444                 int p = yylvp - yylvals;
1445                 int s = yylvlim - yylvals;
1446 
1447                 s += YYLVQUEUEGROWTH;
1448                 if ((yylexemes = (short *)   realloc(yylexemes, s * sizeof(short))) == NULL) goto yyenomem;
1449                 if ((yylvals   = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
1450 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1451                 if ((yylpsns   = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
1452 #endif
1453                 yylvp   = yylve = yylvals + p;
1454                 yylvlim = yylvals + s;
1455 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1456                 yylpp   = yylpe = yylpsns + p;
1457                 yylplim = yylpsns + s;
1458 #endif
1459                 yylexp  = yylexemes + p;
1460             }
1461             *yylexp = (short) YYLEX;
1462             *yylvp++ = yylval;
1463             yylve++;
1464 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1465             *yylpp++ = yylloc;
1466             yylpe++;
1467 #endif
1468             yychar = *yylexp++;
1469             break;
1470         }
1471         /* normal operation, no conflict encountered */
1472 #endif /* YYBTYACC */
1473         yychar = YYLEX;
1474 #if YYBTYACC
1475         } while (0);
1476 #endif /* YYBTYACC */
1477         if (yychar < 0) yychar = YYEOF;
1478         /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */
1479 #if YYDEBUG
1480         if (yydebug)
1481         {
1482             yys = yyname[YYTRANSLATE(yychar)];
1483             fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
1484                             YYDEBUGSTR, yydepth, yystate, yychar, yys);
1485 #ifdef YYSTYPE_TOSTRING
1486 #if YYBTYACC
1487             if (!yytrial)
1488 #endif /* YYBTYACC */
1489                 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
1490 #endif
1491             fputc('\n', stderr);
1492         }
1493 #endif
1494     }
1495 #if YYBTYACC
1496 
1497     /* Do we have a conflict? */
1498     if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1499         yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1500     {
1501         YYINT ctry;
1502 
1503         if (yypath)
1504         {
1505             YYParseState *save;
1506 #if YYDEBUG
1507             if (yydebug)
1508                 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
1509                                 YYDEBUGSTR, yydepth, yystate);
1510 #endif
1511             /* Switch to the next conflict context */
1512             save = yypath;
1513             yypath = save->save;
1514             save->save = NULL;
1515             ctry = save->ctry;
1516             if (save->state != yystate) YYABORT;
1517             yyFreeState(save);
1518 
1519         }
1520         else
1521         {
1522 
1523             /* Unresolved conflict - start/continue trial parse */
1524             YYParseState *save;
1525 #if YYDEBUG
1526             if (yydebug)
1527             {
1528                 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
1529                 if (yyps->save)
1530                     fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
1531                 else
1532                     fputs("Starting trial parse.\n", stderr);
1533             }
1534 #endif
1535             save                  = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1536             if (save == NULL) goto yyenomem;
1537             save->save            = yyps->save;
1538             save->state           = yystate;
1539             save->errflag         = yyerrflag;
1540             save->yystack.s_mark  = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
1541             memcpy (save->yystack.s_base, yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1542             save->yystack.l_mark  = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
1543             memcpy (save->yystack.l_base, yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1544 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1545             save->yystack.p_mark  = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
1546             memcpy (save->yystack.p_base, yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1547 #endif
1548             ctry                  = yytable[yyn];
1549             if (yyctable[ctry] == -1)
1550             {
1551 #if YYDEBUG
1552                 if (yydebug && yychar >= YYEOF)
1553                     fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
1554 #endif
1555                 ctry++;
1556             }
1557             save->ctry = ctry;
1558             if (yyps->save == NULL)
1559             {
1560                 /* If this is a first conflict in the stack, start saving lexemes */
1561                 if (!yylexemes)
1562                 {
1563                     yylexemes = (short *) malloc((YYLVQUEUEGROWTH) * sizeof(short));
1564                     if (yylexemes == NULL) goto yyenomem;
1565                     yylvals   = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
1566                     if (yylvals == NULL) goto yyenomem;
1567                     yylvlim   = yylvals + YYLVQUEUEGROWTH;
1568 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1569                     yylpsns   = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
1570                     if (yylpsns == NULL) goto yyenomem;
1571                     yylplim   = yylpsns + YYLVQUEUEGROWTH;
1572 #endif
1573                 }
1574                 if (yylvp == yylve)
1575                 {
1576                     yylvp  = yylve = yylvals;
1577 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1578                     yylpp  = yylpe = yylpsns;
1579 #endif
1580                     yylexp = yylexemes;
1581                     if (yychar >= YYEOF)
1582                     {
1583                         *yylve++ = yylval;
1584 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1585                         *yylpe++ = yylloc;
1586 #endif
1587                         *yylexp  = (short) yychar;
1588                         yychar   = YYEMPTY;
1589                     }
1590                 }
1591             }
1592             if (yychar >= YYEOF)
1593             {
1594                 yylvp--;
1595 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1596                 yylpp--;
1597 #endif
1598                 yylexp--;
1599                 yychar = YYEMPTY;
1600             }
1601             save->lexeme = yylvp - yylvals;
1602             yyps->save   = save;
1603         }
1604         if (yytable[yyn] == ctry)
1605         {
1606 #if YYDEBUG
1607             if (yydebug)
1608                 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1609                                 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
1610 #endif
1611             if (yychar < 0)
1612             {
1613                 yylvp++;
1614 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1615                 yylpp++;
1616 #endif
1617                 yylexp++;
1618             }
1619             if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
1620                 goto yyoverflow;
1621             yystate = yyctable[ctry];
1622             *++yystack.s_mark = (short) yystate;
1623             *++yystack.l_mark = yylval;
1624 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1625             *++yystack.p_mark = yylloc;
1626 #endif
1627             yychar  = YYEMPTY;
1628             if (yyerrflag > 0) --yyerrflag;
1629             goto yyloop;
1630         }
1631         else
1632         {
1633             yyn = yyctable[ctry];
1634             goto yyreduce;
1635         }
1636     } /* End of code dealing with conflicts */
1637 #endif /* YYBTYACC */
1638     if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1639             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1640     {
1641 #if YYDEBUG
1642         if (yydebug)
1643             fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1644                             YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
1645 #endif
1646         if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1647         yystate = yytable[yyn];
1648         *++yystack.s_mark = yytable[yyn];
1649         *++yystack.l_mark = yylval;
1650 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1651         *++yystack.p_mark = yylloc;
1652 #endif
1653         yychar = YYEMPTY;
1654         if (yyerrflag > 0)  --yyerrflag;
1655         goto yyloop;
1656     }
1657     if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1658             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1659     {
1660         yyn = yytable[yyn];
1661         goto yyreduce;
1662     }
1663     if (yyerrflag != 0) goto yyinrecovery;
1664 #if YYBTYACC
1665 
1666     yynewerrflag = 1;
1667     goto yyerrhandler;
1668     goto yyerrlab;
1669 
1670 yyerrlab:
1671     yynewerrflag = 0;
1672 yyerrhandler:
1673     while (yyps->save)
1674     {
1675         int ctry;
1676         YYParseState *save = yyps->save;
1677 #if YYDEBUG
1678         if (yydebug)
1679             fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
1680                             YYDEBUGSTR, yydepth, yystate, yyps->save->state,
1681                     (int)(yylvp - yylvals - yyps->save->lexeme));
1682 #endif
1683         /* Memorize most forward-looking error state in case it's really an error. */
1684         if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
1685         {
1686             /* Free old saved error context state */
1687             if (yyerrctx) yyFreeState(yyerrctx);
1688             /* Create and fill out new saved error context state */
1689             yyerrctx                 = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1690             if (yyerrctx == NULL) goto yyenomem;
1691             yyerrctx->save           = yyps->save;
1692             yyerrctx->state          = yystate;
1693             yyerrctx->errflag        = yyerrflag;
1694             yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
1695             memcpy (yyerrctx->yystack.s_base, yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1696             yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
1697             memcpy (yyerrctx->yystack.l_base, yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1698 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1699             yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
1700             memcpy (yyerrctx->yystack.p_base, yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1701 #endif
1702             yyerrctx->lexeme         = yylvp - yylvals;
1703         }
1704         yylvp          = yylvals   + save->lexeme;
1705 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1706         yylpp          = yylpsns   + save->lexeme;
1707 #endif
1708         yylexp         = yylexemes + save->lexeme;
1709         yychar         = YYEMPTY;
1710         yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1711         memcpy (yystack.s_base, save->yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1712         yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1713         memcpy (yystack.l_base, save->yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1714 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1715         yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1716         memcpy (yystack.p_base, save->yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1717 #endif
1718         ctry           = ++save->ctry;
1719         yystate        = save->state;
1720         /* We tried shift, try reduce now */
1721         if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1722         yyps->save     = save->save;
1723         save->save     = NULL;
1724         yyFreeState(save);
1725 
1726         /* Nothing left on the stack -- error */
1727         if (!yyps->save)
1728         {
1729 #if YYDEBUG
1730             if (yydebug)
1731                 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1732                                 YYPREFIX, yydepth);
1733 #endif
1734             /* Restore state as it was in the most forward-advanced error */
1735             yylvp          = yylvals   + yyerrctx->lexeme;
1736 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1737             yylpp          = yylpsns   + yyerrctx->lexeme;
1738 #endif
1739             yylexp         = yylexemes + yyerrctx->lexeme;
1740             yychar         = yylexp[-1];
1741             yylval         = yylvp[-1];
1742 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1743             yylloc         = yylpp[-1];
1744 #endif
1745             yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1746             memcpy (yystack.s_base, yyerrctx->yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1747             yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1748             memcpy (yystack.l_base, yyerrctx->yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1749 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1750             yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1751             memcpy (yystack.p_base, yyerrctx->yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1752 #endif
1753             yystate        = yyerrctx->state;
1754             yyFreeState(yyerrctx);
1755             yyerrctx       = NULL;
1756         }
1757         yynewerrflag = 1;
1758     }
1759     if (yynewerrflag == 0) goto yyinrecovery;
1760 #endif /* YYBTYACC */
1761 
1762     YYERROR_CALL("syntax error");
1763 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1764     yyerror_loc_range[0] = yylloc; /* lookahead position is error start position */
1765 #endif
1766 
1767 #if !YYBTYACC
1768     goto yyerrlab;
1769 yyerrlab:
1770 #endif
1771     ++yynerrs;
1772 
1773 yyinrecovery:
1774     if (yyerrflag < 3)
1775     {
1776         yyerrflag = 3;
1777         for (;;)
1778         {
1779             if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1780                     yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1781             {
1782 #if YYDEBUG
1783                 if (yydebug)
1784                     fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1785                                     YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1786 #endif
1787                 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1788                 yystate = yytable[yyn];
1789                 *++yystack.s_mark = yytable[yyn];
1790                 *++yystack.l_mark = yylval;
1791 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1792                 /* lookahead position is error end position */
1793                 yyerror_loc_range[1] = yylloc;
1794                 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1795                 *++yystack.p_mark = yyloc;
1796 #endif
1797                 goto yyloop;
1798             }
1799             else
1800             {
1801 #if YYDEBUG
1802                 if (yydebug)
1803                     fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1804                                     YYDEBUGSTR, yydepth, *yystack.s_mark);
1805 #endif
1806                 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1807 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1808                 /* the current TOS position is the error start position */
1809                 yyerror_loc_range[0] = *yystack.p_mark;
1810 #endif
1811 #if defined(YYDESTRUCT_CALL)
1812 #if YYBTYACC
1813                 if (!yytrial)
1814 #endif /* YYBTYACC */
1815 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1816                     YYDESTRUCT_CALL("error: discarding state",
1817                                     yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1818 #else
1819                     YYDESTRUCT_CALL("error: discarding state",
1820                                     yystos[*yystack.s_mark], yystack.l_mark);
1821 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1822 #endif /* defined(YYDESTRUCT_CALL) */
1823                 --yystack.s_mark;
1824                 --yystack.l_mark;
1825 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1826                 --yystack.p_mark;
1827 #endif
1828             }
1829         }
1830     }
1831     else
1832     {
1833         if (yychar == YYEOF) goto yyabort;
1834 #if YYDEBUG
1835         if (yydebug)
1836         {
1837             yys = yyname[YYTRANSLATE(yychar)];
1838             fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1839                             YYDEBUGSTR, yydepth, yystate, yychar, yys);
1840         }
1841 #endif
1842 #if defined(YYDESTRUCT_CALL)
1843 #if YYBTYACC
1844         if (!yytrial)
1845 #endif /* YYBTYACC */
1846 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1847             YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1848 #else
1849             YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1850 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1851 #endif /* defined(YYDESTRUCT_CALL) */
1852         yychar = YYEMPTY;
1853         goto yyloop;
1854     }
1855 
1856 yyreduce:
1857     yym = yylen[yyn];
1858 #if YYDEBUG
1859     if (yydebug)
1860     {
1861         fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1862                         YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1863 #ifdef YYSTYPE_TOSTRING
1864 #if YYBTYACC
1865         if (!yytrial)
1866 #endif /* YYBTYACC */
1867             if (yym > 0)
1868             {
1869                 int i;
1870                 fputc('<', stderr);
1871                 for (i = yym; i > 0; i--)
1872                 {
1873                     if (i != yym) fputs(", ", stderr);
1874                     fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1875                                            yystack.l_mark[1-i]), stderr);
1876                 }
1877                 fputc('>', stderr);
1878             }
1879 #endif
1880         fputc('\n', stderr);
1881     }
1882 #endif
1883     if (yym > 0)
1884         yyval = yystack.l_mark[1-yym];
1885     else
1886         memset(&yyval, 0, sizeof yyval);
1887 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1888 
1889     /* Perform position reduction */
1890     memset(&yyloc, 0, sizeof(yyloc));
1891 #if YYBTYACC
1892     if (!yytrial)
1893 #endif /* YYBTYACC */
1894     {
1895         YYLLOC_DEFAULT(yyloc, &yystack.p_mark[1-yym], yym);
1896         /* just in case YYERROR is invoked within the action, save
1897            the start of the rhs as the error start position */
1898         yyerror_loc_range[0] = yystack.p_mark[1-yym];
1899     }
1900 #endif
1901 
1902     switch (yyn)
1903     {
1904 case 10:
1905 #line 377 "grammar.y"
1906 	{
1907 	    yyerrok;
1908 	}
1909 break;
1910 case 11:
1911 #line 381 "grammar.y"
1912 	{
1913 	    yyerrok;
1914 	}
1915 break;
1916 case 13:
1917 #line 392 "grammar.y"
1918 	{
1919 	    /* Provide an empty action here so bison will not complain about
1920 	     * incompatible types in the default action it normally would
1921 	     * have generated.
1922 	     */
1923 	}
1924 break;
1925 case 14:
1926 #line 399 "grammar.y"
1927 	{
1928 	    /* empty */
1929 	}
1930 break;
1931 case 15:
1932 #line 406 "grammar.y"
1933 	{
1934 #if OPT_LINTLIBRARY
1935 	    if (types_out && want_typedef()) {
1936 		gen_declarations(&yystack.l_mark[-1].decl_spec, (DeclaratorList *)0);
1937 		flush_varargs();
1938 	    }
1939 #endif
1940 	    free_decl_spec(&yystack.l_mark[-1].decl_spec);
1941 	    end_typedef();
1942 	}
1943 break;
1944 case 16:
1945 #line 417 "grammar.y"
1946 	{
1947 	    if (func_params != NULL) {
1948 		set_param_types(func_params, &yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list);
1949 	    } else {
1950 		gen_declarations(&yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list);
1951 #if OPT_LINTLIBRARY
1952 		flush_varargs();
1953 #endif
1954 		free_decl_list(&yystack.l_mark[-1].decl_list);
1955 	    }
1956 	    free_decl_spec(&yystack.l_mark[-2].decl_spec);
1957 	    end_typedef();
1958 	}
1959 break;
1960 case 17:
1961 #line 431 "grammar.y"
1962 	{
1963 	    cur_decl_spec_flags = yystack.l_mark[0].decl_spec.flags;
1964 	    free_decl_spec(&yystack.l_mark[0].decl_spec);
1965 	}
1966 break;
1967 case 18:
1968 #line 436 "grammar.y"
1969 	{
1970 	    end_typedef();
1971 	}
1972 break;
1973 case 19:
1974 #line 443 "grammar.y"
1975 	{
1976 	    begin_typedef();
1977 	}
1978 break;
1979 case 20:
1980 #line 447 "grammar.y"
1981 	{
1982 	    begin_typedef();
1983 	}
1984 break;
1985 case 23:
1986 #line 459 "grammar.y"
1987 	{
1988 	    int flags = cur_decl_spec_flags;
1989 
1990 	    /* If the typedef is a pointer type, then reset the short type
1991 	     * flags so it does not get promoted.
1992 	     */
1993 	    if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0)
1994 		flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
1995 	    new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags);
1996 	    free_declarator(yystack.l_mark[0].declarator);
1997 	}
1998 break;
1999 case 24:
2000 #line 471 "grammar.y"
2001 	{
2002 	    int flags = cur_decl_spec_flags;
2003 
2004 	    if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0)
2005 		flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
2006 	    new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags);
2007 	    free_declarator(yystack.l_mark[0].declarator);
2008 	}
2009 break;
2010 case 25:
2011 #line 483 "grammar.y"
2012 	{
2013 	    check_untagged(&yystack.l_mark[-1].decl_spec);
2014 	    if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) {
2015 		yyerror("syntax error");
2016 		YYERROR;
2017 	    }
2018 	    func_params = &(yystack.l_mark[0].declarator->head->params);
2019 	    func_params->begin_comment = cur_file->begin_comment;
2020 	    func_params->end_comment = cur_file->end_comment;
2021 	}
2022 break;
2023 case 26:
2024 #line 494 "grammar.y"
2025 	{
2026 	    /* If we're converting to K&R and we've got a nominally K&R
2027 	     * function which has a parameter which is ANSI (i.e., a prototyped
2028 	     * function pointer), then we must override the deciphered value of
2029 	     * 'func_def' so that the parameter will be converted.
2030 	     */
2031 	    if (func_style == FUNC_TRADITIONAL
2032 	     && haveAnsiParam()
2033 	     && yystack.l_mark[-3].declarator->head->func_def == func_style) {
2034 		yystack.l_mark[-3].declarator->head->func_def = FUNC_BOTH;
2035 	    }
2036 
2037 	    func_params = NULL;
2038 
2039 	    if (cur_file->convert)
2040 		gen_func_definition(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator);
2041 	    gen_prototype(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator);
2042 #if OPT_LINTLIBRARY
2043 	    flush_varargs();
2044 #endif
2045 	    free_decl_spec(&yystack.l_mark[-4].decl_spec);
2046 	    free_declarator(yystack.l_mark[-3].declarator);
2047 	}
2048 break;
2049 case 28:
2050 #line 519 "grammar.y"
2051 	{
2052 	    if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) {
2053 		yyerror("syntax error");
2054 		YYERROR;
2055 	    }
2056 	    func_params = &(yystack.l_mark[0].declarator->head->params);
2057 	    func_params->begin_comment = cur_file->begin_comment;
2058 	    func_params->end_comment = cur_file->end_comment;
2059 	}
2060 break;
2061 case 29:
2062 #line 529 "grammar.y"
2063 	{
2064 	    DeclSpec decl_spec;
2065 
2066 	    func_params = NULL;
2067 
2068 	    new_decl_spec(&decl_spec, dft_decl_spec(), yystack.l_mark[-4].declarator->begin, DS_NONE);
2069 	    if (cur_file->convert)
2070 		gen_func_definition(&decl_spec, yystack.l_mark[-4].declarator);
2071 	    gen_prototype(&decl_spec, yystack.l_mark[-4].declarator);
2072 #if OPT_LINTLIBRARY
2073 	    flush_varargs();
2074 #endif
2075 	    free_decl_spec(&decl_spec);
2076 	    free_declarator(yystack.l_mark[-4].declarator);
2077 	}
2078 break;
2079 case 36:
2080 #line 560 "grammar.y"
2081 	{
2082 	    join_decl_specs(&yyval.decl_spec, &yystack.l_mark[-1].decl_spec, &yystack.l_mark[0].decl_spec);
2083 	    free(yystack.l_mark[-1].decl_spec.text);
2084 	    free(yystack.l_mark[0].decl_spec.text);
2085 	}
2086 break;
2087 case 40:
2088 #line 575 "grammar.y"
2089 	{
2090 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2091 	}
2092 break;
2093 case 41:
2094 #line 579 "grammar.y"
2095 	{
2096 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_EXTERN);
2097 	}
2098 break;
2099 case 42:
2100 #line 583 "grammar.y"
2101 	{
2102 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2103 	}
2104 break;
2105 case 43:
2106 #line 587 "grammar.y"
2107 	{
2108 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_STATIC);
2109 	}
2110 break;
2111 case 44:
2112 #line 591 "grammar.y"
2113 	{
2114 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_INLINE);
2115 	}
2116 break;
2117 case 45:
2118 #line 595 "grammar.y"
2119 	{
2120 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_JUNK);
2121 	}
2122 break;
2123 case 46:
2124 #line 602 "grammar.y"
2125 	{
2126 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR);
2127 	}
2128 break;
2129 case 47:
2130 #line 606 "grammar.y"
2131 	{
2132 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2133 	}
2134 break;
2135 case 48:
2136 #line 610 "grammar.y"
2137 	{
2138 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_FLOAT);
2139 	}
2140 break;
2141 case 49:
2142 #line 614 "grammar.y"
2143 	{
2144 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2145 	}
2146 break;
2147 case 50:
2148 #line 618 "grammar.y"
2149 	{
2150 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2151 	}
2152 break;
2153 case 51:
2154 #line 622 "grammar.y"
2155 	{
2156 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_SHORT);
2157 	}
2158 break;
2159 case 52:
2160 #line 626 "grammar.y"
2161 	{
2162 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2163 	}
2164 break;
2165 case 53:
2166 #line 630 "grammar.y"
2167 	{
2168 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2169 	}
2170 break;
2171 case 54:
2172 #line 634 "grammar.y"
2173 	{
2174 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2175 	}
2176 break;
2177 case 55:
2178 #line 638 "grammar.y"
2179 	{
2180 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR);
2181 	}
2182 break;
2183 case 56:
2184 #line 642 "grammar.y"
2185 	{
2186 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2187 	}
2188 break;
2189 case 57:
2190 #line 646 "grammar.y"
2191 	{
2192 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2193 	}
2194 break;
2195 case 58:
2196 #line 650 "grammar.y"
2197 	{
2198 	    Symbol *s;
2199 	    s = find_symbol(typedef_names, yystack.l_mark[0].text.text);
2200 	    if (s != NULL)
2201 		new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags);
2202 	}
2203 break;
2204 case 61:
2205 #line 662 "grammar.y"
2206 	{
2207 	    new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2208 	}
2209 break;
2210 case 62:
2211 #line 666 "grammar.y"
2212 	{
2213 	    /* This rule allows the <pointer> nonterminal to scan #define
2214 	     * names as if they were type modifiers.
2215 	     */
2216 	    Symbol *s;
2217 	    s = find_symbol(define_names, yystack.l_mark[0].text.text);
2218 	    if (s != NULL)
2219 		new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags);
2220 	}
2221 break;
2222 case 63:
2223 #line 679 "grammar.y"
2224 	{
2225 	    char *s;
2226 	    if ((s = implied_typedef()) == 0)
2227 	        (void)sprintf(s = buf, "%s %s", yystack.l_mark[-2].text.text, yystack.l_mark[-1].text.text);
2228 	    new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
2229 	}
2230 break;
2231 case 64:
2232 #line 686 "grammar.y"
2233 	{
2234 	    char *s;
2235 	    if ((s = implied_typedef()) == 0)
2236 		(void)sprintf(s = buf, "%s {}", yystack.l_mark[-1].text.text);
2237 	    new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
2238 	}
2239 break;
2240 case 65:
2241 #line 693 "grammar.y"
2242 	{
2243 	    (void)sprintf(buf, "%s %s", yystack.l_mark[-1].text.text, yystack.l_mark[0].text.text);
2244 	    new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
2245 	}
2246 break;
2247 case 66:
2248 #line 701 "grammar.y"
2249 	{
2250 	    imply_typedef(yyval.text.text);
2251 	}
2252 break;
2253 case 67:
2254 #line 705 "grammar.y"
2255 	{
2256 	    imply_typedef(yyval.text.text);
2257 	}
2258 break;
2259 case 68:
2260 #line 712 "grammar.y"
2261 	{
2262 	    new_decl_list(&yyval.decl_list, yystack.l_mark[0].declarator);
2263 	}
2264 break;
2265 case 69:
2266 #line 716 "grammar.y"
2267 	{
2268 	    add_decl_list(&yyval.decl_list, &yystack.l_mark[-2].decl_list, yystack.l_mark[0].declarator);
2269 	}
2270 break;
2271 case 70:
2272 #line 723 "grammar.y"
2273 	{
2274 	    if (yystack.l_mark[0].declarator->func_def != FUNC_NONE && func_params == NULL &&
2275 		func_style == FUNC_TRADITIONAL && cur_file->convert) {
2276 		gen_func_declarator(yystack.l_mark[0].declarator);
2277 		fputs(cur_text(), cur_file->tmp_file);
2278 	    }
2279 	    cur_declarator = yyval.declarator;
2280 	}
2281 break;
2282 case 71:
2283 #line 732 "grammar.y"
2284 	{
2285 	    if (yystack.l_mark[-1].declarator->func_def != FUNC_NONE && func_params == NULL &&
2286 		func_style == FUNC_TRADITIONAL && cur_file->convert) {
2287 		gen_func_declarator(yystack.l_mark[-1].declarator);
2288 		fputs(" =", cur_file->tmp_file);
2289 	    }
2290 	}
2291 break;
2292 case 73:
2293 #line 744 "grammar.y"
2294 	{
2295 	    char *s;
2296 	    if ((s = implied_typedef()) == 0)
2297 		(void)sprintf(s = buf, "enum %s", yystack.l_mark[-1].text.text);
2298 	    new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
2299 	}
2300 break;
2301 case 74:
2302 #line 751 "grammar.y"
2303 	{
2304 	    char *s;
2305 	    if ((s = implied_typedef()) == 0)
2306 		(void)sprintf(s = buf, "%s {}", yystack.l_mark[-1].text.text);
2307 	    new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
2308 	}
2309 break;
2310 case 75:
2311 #line 758 "grammar.y"
2312 	{
2313 	    (void)sprintf(buf, "enum %s", yystack.l_mark[0].text.text);
2314 	    new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
2315 	}
2316 break;
2317 case 76:
2318 #line 766 "grammar.y"
2319 	{
2320 	    imply_typedef("enum");
2321 	    yyval.text = yystack.l_mark[0].text;
2322 	}
2323 break;
2324 case 79:
2325 #line 779 "grammar.y"
2326 	{
2327 	    yyval.declarator = yystack.l_mark[0].declarator;
2328 	    (void)sprintf(buf, "%s%s", yystack.l_mark[-1].text.text, yyval.declarator->text);
2329 	    free(yyval.declarator->text);
2330 	    yyval.declarator->text = xstrdup(buf);
2331 	    yyval.declarator->begin = yystack.l_mark[-1].text.begin;
2332 	    yyval.declarator->pointer = TRUE;
2333 	}
2334 break;
2335 case 81:
2336 #line 792 "grammar.y"
2337 	{
2338 	    yyval.declarator = new_declarator(yystack.l_mark[0].text.text, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin);
2339 	}
2340 break;
2341 case 82:
2342 #line 796 "grammar.y"
2343 	{
2344 	    yyval.declarator = yystack.l_mark[-1].declarator;
2345 	    (void)sprintf(buf, "(%s)", yyval.declarator->text);
2346 	    free(yyval.declarator->text);
2347 	    yyval.declarator->text = xstrdup(buf);
2348 	    yyval.declarator->begin = yystack.l_mark[-2].text.begin;
2349 	}
2350 break;
2351 case 83:
2352 #line 804 "grammar.y"
2353 	{
2354 	    yyval.declarator = yystack.l_mark[-1].declarator;
2355 	    (void)sprintf(buf, "%s%s", yyval.declarator->text, yystack.l_mark[0].text.text);
2356 	    free(yyval.declarator->text);
2357 	    yyval.declarator->text = xstrdup(buf);
2358 	}
2359 break;
2360 case 84:
2361 #line 811 "grammar.y"
2362 	{
2363 	    yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin);
2364 	    yyval.declarator->params = yystack.l_mark[-1].param_list;
2365 	    yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
2366 	    yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
2367 	    yyval.declarator->func_def = FUNC_ANSI;
2368 	}
2369 break;
2370 case 85:
2371 #line 819 "grammar.y"
2372 	{
2373 	    yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin);
2374 	    yyval.declarator->params = yystack.l_mark[-1].param_list;
2375 	    yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
2376 	    yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
2377 	    yyval.declarator->func_def = FUNC_TRADITIONAL;
2378 	}
2379 break;
2380 case 86:
2381 #line 830 "grammar.y"
2382 	{
2383 	    (void)sprintf(yyval.text.text, "*%s", yystack.l_mark[0].text.text);
2384 	    yyval.text.begin = yystack.l_mark[-1].text.begin;
2385 	}
2386 break;
2387 case 87:
2388 #line 835 "grammar.y"
2389 	{
2390 	    (void)sprintf(yyval.text.text, "*%s%s", yystack.l_mark[-1].text.text, yystack.l_mark[0].text.text);
2391 	    yyval.text.begin = yystack.l_mark[-2].text.begin;
2392 	}
2393 break;
2394 case 88:
2395 #line 843 "grammar.y"
2396 	{
2397 	    strcpy(yyval.text.text, "");
2398 	    yyval.text.begin = 0L;
2399 	}
2400 break;
2401 case 90:
2402 #line 852 "grammar.y"
2403 	{
2404 	    (void)sprintf(yyval.text.text, "%s ", yystack.l_mark[0].decl_spec.text);
2405 	    yyval.text.begin = yystack.l_mark[0].decl_spec.begin;
2406 	    free(yystack.l_mark[0].decl_spec.text);
2407 	}
2408 break;
2409 case 91:
2410 #line 858 "grammar.y"
2411 	{
2412 	    (void)sprintf(yyval.text.text, "%s%s ", yystack.l_mark[-1].text.text, yystack.l_mark[0].decl_spec.text);
2413 	    yyval.text.begin = yystack.l_mark[-1].text.begin;
2414 	    free(yystack.l_mark[0].decl_spec.text);
2415 	}
2416 break;
2417 case 93:
2418 #line 868 "grammar.y"
2419 	{
2420 	    add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, "...");
2421 	}
2422 break;
2423 case 94:
2424 #line 875 "grammar.y"
2425 	{
2426 	    new_param_list(&yyval.param_list, yystack.l_mark[0].parameter);
2427 	}
2428 break;
2429 case 95:
2430 #line 879 "grammar.y"
2431 	{
2432 	    add_param_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].parameter);
2433 	}
2434 break;
2435 case 96:
2436 #line 886 "grammar.y"
2437 	{
2438 	    check_untagged(&yystack.l_mark[-1].decl_spec);
2439 	    yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator);
2440 	}
2441 break;
2442 case 97:
2443 #line 891 "grammar.y"
2444 	{
2445 	    check_untagged(&yystack.l_mark[-1].decl_spec);
2446 	    yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator);
2447 	}
2448 break;
2449 case 98:
2450 #line 896 "grammar.y"
2451 	{
2452 	    check_untagged(&yystack.l_mark[0].decl_spec);
2453 	    yyval.parameter = new_parameter(&yystack.l_mark[0].decl_spec, (Declarator *)0);
2454 	}
2455 break;
2456 case 99:
2457 #line 904 "grammar.y"
2458 	{
2459 	    new_ident_list(&yyval.param_list);
2460 	}
2461 break;
2462 case 101:
2463 #line 912 "grammar.y"
2464 	{
2465 	    new_ident_list(&yyval.param_list);
2466 	    add_ident_list(&yyval.param_list, &yyval.param_list, yystack.l_mark[0].text.text);
2467 	}
2468 break;
2469 case 102:
2470 #line 917 "grammar.y"
2471 	{
2472 	    add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].text.text);
2473 	}
2474 break;
2475 case 103:
2476 #line 924 "grammar.y"
2477 	{
2478 	    yyval.text = yystack.l_mark[0].text;
2479 	}
2480 break;
2481 case 104:
2482 #line 928 "grammar.y"
2483 	{
2484 #if OPT_LINTLIBRARY
2485 	    if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */
2486 		yyval.text = yystack.l_mark[0].text;
2487 	    } else
2488 #endif
2489 		(void)sprintf(yyval.text.text, "&%s", yystack.l_mark[0].text.text);
2490 	    yyval.text.begin = yystack.l_mark[-1].text.begin;
2491 	}
2492 break;
2493 case 105:
2494 #line 941 "grammar.y"
2495 	{
2496 	    yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
2497 	}
2498 break;
2499 case 106:
2500 #line 945 "grammar.y"
2501 	{
2502 	    yyval.declarator = yystack.l_mark[0].declarator;
2503 	    (void)sprintf(buf, "%s%s", yystack.l_mark[-1].text.text, yyval.declarator->text);
2504 	    free(yyval.declarator->text);
2505 	    yyval.declarator->text = xstrdup(buf);
2506 	    yyval.declarator->begin = yystack.l_mark[-1].text.begin;
2507 	}
2508 break;
2509 case 108:
2510 #line 957 "grammar.y"
2511 	{
2512 	    yyval.declarator = yystack.l_mark[-1].declarator;
2513 	    (void)sprintf(buf, "(%s)", yyval.declarator->text);
2514 	    free(yyval.declarator->text);
2515 	    yyval.declarator->text = xstrdup(buf);
2516 	    yyval.declarator->begin = yystack.l_mark[-2].text.begin;
2517 	}
2518 break;
2519 case 109:
2520 #line 965 "grammar.y"
2521 	{
2522 	    yyval.declarator = yystack.l_mark[-1].declarator;
2523 	    (void)sprintf(buf, "%s%s", yyval.declarator->text, yystack.l_mark[0].text.text);
2524 	    free(yyval.declarator->text);
2525 	    yyval.declarator->text = xstrdup(buf);
2526 	}
2527 break;
2528 case 110:
2529 #line 972 "grammar.y"
2530 	{
2531 	    yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
2532 	}
2533 break;
2534 case 111:
2535 #line 976 "grammar.y"
2536 	{
2537 	    yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-3].declarator->begin);
2538 	    yyval.declarator->params = yystack.l_mark[-1].param_list;
2539 	    yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
2540 	    yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
2541 	    yyval.declarator->func_def = FUNC_ANSI;
2542 	}
2543 break;
2544 case 112:
2545 #line 984 "grammar.y"
2546 	{
2547 	    yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].declarator->begin);
2548 	    yyval.declarator->func_stack = yystack.l_mark[-2].declarator;
2549 	    yyval.declarator->head = (yystack.l_mark[-2].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-2].declarator->head;
2550 	    yyval.declarator->func_def = FUNC_ANSI;
2551 	}
2552 break;
2553 case 113:
2554 #line 991 "grammar.y"
2555 	{
2556 	    Declarator *d;
2557 
2558 	    d = new_declarator("", "", yystack.l_mark[-2].text.begin);
2559 	    yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].text.begin);
2560 	    yyval.declarator->params = yystack.l_mark[-1].param_list;
2561 	    yyval.declarator->func_stack = d;
2562 	    yyval.declarator->head = yyval.declarator;
2563 	    yyval.declarator->func_def = FUNC_ANSI;
2564 	}
2565 break;
2566 case 114:
2567 #line 1002 "grammar.y"
2568 	{
2569 	    Declarator *d;
2570 
2571 	    d = new_declarator("", "", yystack.l_mark[-1].text.begin);
2572 	    yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-1].text.begin);
2573 	    yyval.declarator->func_stack = d;
2574 	    yyval.declarator->head = yyval.declarator;
2575 	    yyval.declarator->func_def = FUNC_ANSI;
2576 	}
2577 break;
2578 #line 2579 "grammar.tab.c"
2579     default:
2580         break;
2581     }
2582     yystack.s_mark -= yym;
2583     yystate = *yystack.s_mark;
2584     yystack.l_mark -= yym;
2585 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2586     yystack.p_mark -= yym;
2587 #endif
2588     yym = yylhs[yyn];
2589     if (yystate == 0 && yym == 0)
2590     {
2591 #if YYDEBUG
2592         if (yydebug)
2593         {
2594             fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
2595 #ifdef YYSTYPE_TOSTRING
2596 #if YYBTYACC
2597             if (!yytrial)
2598 #endif /* YYBTYACC */
2599                 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
2600 #endif
2601             fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
2602         }
2603 #endif
2604         yystate = YYFINAL;
2605         *++yystack.s_mark = YYFINAL;
2606         *++yystack.l_mark = yyval;
2607 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2608         *++yystack.p_mark = yyloc;
2609 #endif
2610         if (yychar < 0)
2611         {
2612 #if YYBTYACC
2613             do {
2614             if (yylvp < yylve)
2615             {
2616                 /* we're currently re-reading tokens */
2617                 yylval = *yylvp++;
2618 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2619                 yylloc = *yylpp++;
2620 #endif
2621                 yychar = *yylexp++;
2622                 break;
2623             }
2624             if (yyps->save)
2625             {
2626                 /* in trial mode; save scanner results for future parse attempts */
2627                 if (yylvp == yylvlim)
2628                 {   /* Enlarge lexical value queue */
2629                     int p = yylvp - yylvals;
2630                     int s = yylvlim - yylvals;
2631 
2632                     s += YYLVQUEUEGROWTH;
2633                     if ((yylexemes = (short *)   realloc(yylexemes, s * sizeof(short))) == NULL)
2634                         goto yyenomem;
2635                     if ((yylvals   = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
2636                         goto yyenomem;
2637 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2638                     if ((yylpsns   = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
2639                         goto yyenomem;
2640 #endif
2641                     yylvp   = yylve = yylvals + p;
2642                     yylvlim = yylvals + s;
2643 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2644                     yylpp   = yylpe = yylpsns + p;
2645                     yylplim = yylpsns + s;
2646 #endif
2647                     yylexp  = yylexemes + p;
2648                 }
2649                 *yylexp = (short) YYLEX;
2650                 *yylvp++ = yylval;
2651                 yylve++;
2652 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2653                 *yylpp++ = yylloc;
2654                 yylpe++;
2655 #endif
2656                 yychar = *yylexp++;
2657                 break;
2658             }
2659             /* normal operation, no conflict encountered */
2660 #endif /* YYBTYACC */
2661             yychar = YYLEX;
2662 #if YYBTYACC
2663             } while (0);
2664 #endif /* YYBTYACC */
2665             if (yychar < 0) yychar = YYEOF;
2666             /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */
2667 #if YYDEBUG
2668             if (yydebug)
2669             {
2670                 yys = yyname[YYTRANSLATE(yychar)];
2671                 fprintf(stderr, "%s[%d]: state %d, reading %d (%s)\n",
2672                                 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
2673             }
2674 #endif
2675         }
2676         if (yychar == YYEOF) goto yyaccept;
2677         goto yyloop;
2678     }
2679     if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
2680             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
2681         yystate = yytable[yyn];
2682     else
2683         yystate = yydgoto[yym];
2684 #if YYDEBUG
2685     if (yydebug)
2686     {
2687         fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
2688 #ifdef YYSTYPE_TOSTRING
2689 #if YYBTYACC
2690         if (!yytrial)
2691 #endif /* YYBTYACC */
2692             fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
2693 #endif
2694         fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
2695     }
2696 #endif
2697     if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
2698     *++yystack.s_mark = (short) yystate;
2699     *++yystack.l_mark = yyval;
2700 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2701     *++yystack.p_mark = yyloc;
2702 #endif
2703     goto yyloop;
2704 #if YYBTYACC
2705 
2706     /* Reduction declares that this path is valid. Set yypath and do a full parse */
2707 yyvalid:
2708     if (yypath) YYABORT;
2709     while (yyps->save)
2710     {
2711         YYParseState *save = yyps->save;
2712         yyps->save = save->save;
2713         save->save = yypath;
2714         yypath = save;
2715     }
2716 #if YYDEBUG
2717     if (yydebug)
2718         fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
2719                         YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
2720 #endif
2721     if (yyerrctx)
2722     {
2723         yyFreeState(yyerrctx);
2724         yyerrctx = NULL;
2725     }
2726     yylvp          = yylvals + yypath->lexeme;
2727 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2728     yylpp          = yylpsns + yypath->lexeme;
2729 #endif
2730     yylexp         = yylexemes + yypath->lexeme;
2731     yychar         = YYEMPTY;
2732     yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
2733     memcpy (yystack.s_base, yypath->yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
2734     yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
2735     memcpy (yystack.l_base, yypath->yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
2736 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2737     yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
2738     memcpy (yystack.p_base, yypath->yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
2739 #endif
2740     yystate        = yypath->state;
2741     goto yyloop;
2742 #endif /* YYBTYACC */
2743 
2744 yyoverflow:
2745     YYERROR_CALL("yacc stack overflow");
2746 #if YYBTYACC
2747     goto yyabort_nomem;
2748 yyenomem:
2749     YYERROR_CALL("memory exhausted");
2750 yyabort_nomem:
2751 #endif /* YYBTYACC */
2752     yyresult = 2;
2753     goto yyreturn;
2754 
2755 yyabort:
2756     yyresult = 1;
2757     goto yyreturn;
2758 
2759 yyaccept:
2760 #if YYBTYACC
2761     if (yyps->save) goto yyvalid;
2762 #endif /* YYBTYACC */
2763     yyresult = 0;
2764 
2765 yyreturn:
2766 #if defined(YYDESTRUCT_CALL)
2767     if (yychar != YYEOF && yychar != YYEMPTY)
2768 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2769         YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
2770 #else
2771         YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
2772 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
2773 
2774     {
2775         YYSTYPE *pv;
2776 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2777         YYLTYPE *pp;
2778 
2779         for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
2780              YYDESTRUCT_CALL("cleanup: discarding state",
2781                              yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
2782 #else
2783         for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
2784              YYDESTRUCT_CALL("cleanup: discarding state",
2785                              yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
2786 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
2787     }
2788 #endif /* defined(YYDESTRUCT_CALL) */
2789 
2790 #if YYBTYACC
2791     if (yyerrctx)
2792     {
2793         yyFreeState(yyerrctx);
2794         yyerrctx = NULL;
2795     }
2796     while (yyps)
2797     {
2798         YYParseState *save = yyps;
2799         yyps = save->save;
2800         save->save = NULL;
2801         yyFreeState(save);
2802     }
2803     while (yypath)
2804     {
2805         YYParseState *save = yypath;
2806         yypath = save->save;
2807         save->save = NULL;
2808         yyFreeState(save);
2809     }
2810 #endif /* YYBTYACC */
2811     yyfreestack(&yystack);
2812     return (yyresult);
2813 }
2814