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