1 /* original parser id follows */ 2 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 3 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ 4 5 #define YYBYACC 1 6 #define YYMAJOR 2 7 #define YYMINOR 0 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 17 #ifndef yyparse 18 #define yyparse grammar_parse 19 #endif /* yyparse */ 20 21 #ifndef yylex 22 #define yylex grammar_lex 23 #endif /* yylex */ 24 25 #ifndef yyerror 26 #define yyerror grammar_error 27 #endif /* yyerror */ 28 29 #ifndef yychar 30 #define yychar grammar_char 31 #endif /* yychar */ 32 33 #ifndef yyval 34 #define yyval grammar_val 35 #endif /* yyval */ 36 37 #ifndef yylval 38 #define yylval grammar_lval 39 #endif /* yylval */ 40 41 #ifndef yydebug 42 #define yydebug grammar_debug 43 #endif /* yydebug */ 44 45 #ifndef yynerrs 46 #define yynerrs grammar_nerrs 47 #endif /* yynerrs */ 48 49 #ifndef yyerrflag 50 #define yyerrflag grammar_errflag 51 #endif /* yyerrflag */ 52 53 #ifndef yylhs 54 #define yylhs grammar_lhs 55 #endif /* yylhs */ 56 57 #ifndef yylen 58 #define yylen grammar_len 59 #endif /* yylen */ 60 61 #ifndef yydefred 62 #define yydefred grammar_defred 63 #endif /* yydefred */ 64 65 #ifndef yydgoto 66 #define yydgoto grammar_dgoto 67 #endif /* yydgoto */ 68 69 #ifndef yysindex 70 #define yysindex grammar_sindex 71 #endif /* yysindex */ 72 73 #ifndef yyrindex 74 #define yyrindex grammar_rindex 75 #endif /* yyrindex */ 76 77 #ifndef yygindex 78 #define yygindex grammar_gindex 79 #endif /* yygindex */ 80 81 #ifndef yytable 82 #define yytable grammar_table 83 #endif /* yytable */ 84 85 #ifndef yycheck 86 #define yycheck grammar_check 87 #endif /* yycheck */ 88 89 #ifndef yyname 90 #define yyname grammar_name 91 #endif /* yyname */ 92 93 #ifndef yyrule 94 #define yyrule grammar_rule 95 #endif /* yyrule */ 96 #define YYPREFIX "grammar_" 97 98 #define YYPURE 0 99 100 #line 9 "grammar.y" 101 #ifdef YYBISON 102 #include <stdlib.h> 103 #define YYSTYPE_IS_DECLARED 104 #define yyerror yaccError 105 #endif 106 107 #if defined(YYBISON) || !defined(YYBYACC) 108 static void yyerror(const char *s); 109 #endif 110 #line 81 "grammar.y" 111 #include <stdio.h> 112 #include <ctype.h> 113 #include <string.h> 114 115 #define OPT_LINTLIBRARY 1 116 117 #ifndef TRUE 118 #define TRUE (1) 119 #endif 120 121 #ifndef FALSE 122 #define FALSE (0) 123 #endif 124 125 /* #include "cproto.h" */ 126 #define MAX_TEXT_SIZE 1024 127 #define TEXT_LEN (MAX_TEXT_SIZE / 2 - 3) 128 129 /* Prototype styles */ 130 #if OPT_LINTLIBRARY 131 #define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */ 132 #define PROTO_LINTLIBRARY -1 /* form lint-library source */ 133 #endif 134 #define PROTO_NONE 0 /* do not output any prototypes */ 135 #define PROTO_TRADITIONAL 1 /* comment out parameters */ 136 #define PROTO_ABSTRACT 2 /* comment out parameter names */ 137 #define PROTO_ANSI 3 /* ANSI C prototype */ 138 139 typedef int PrototypeStyle; 140 141 typedef char boolean; 142 143 extern boolean types_out; 144 extern PrototypeStyle proto_style; 145 146 #define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB) 147 #define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY) 148 #define lintLibrary() (knrLintLibrary() || ansiLintLibrary()) 149 150 #if OPT_LINTLIBRARY 151 #define FUNC_UNKNOWN -1 /* unspecified */ 152 #else 153 #define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */ 154 #endif 155 #define FUNC_NONE 0 /* not a function definition */ 156 #define FUNC_TRADITIONAL 1 /* traditional style */ 157 #define FUNC_ANSI 2 /* ANSI style */ 158 #define FUNC_BOTH 3 /* both styles */ 159 160 typedef int FuncDefStyle; 161 162 /* Source file text */ 163 typedef struct text { 164 char text[MAX_TEXT_SIZE]; /* source text */ 165 long begin; /* offset in temporary file */ 166 } Text; 167 168 /* Declaration specifier flags */ 169 #define DS_NONE 0 /* default */ 170 #define DS_EXTERN 1 /* contains "extern" specifier */ 171 #define DS_STATIC 2 /* contains "static" specifier */ 172 #define DS_CHAR 4 /* contains "char" type specifier */ 173 #define DS_SHORT 8 /* contains "short" type specifier */ 174 #define DS_FLOAT 16 /* contains "float" type specifier */ 175 #define DS_INLINE 32 /* contains "inline" specifier */ 176 #define DS_JUNK 64 /* we're not interested in this declaration */ 177 178 /* This structure stores information about a declaration specifier. */ 179 typedef struct decl_spec { 180 unsigned short flags; /* flags defined above */ 181 char *text; /* source text */ 182 long begin; /* offset in temporary file */ 183 } DeclSpec; 184 185 /* This is a list of function parameters. */ 186 typedef struct _ParameterList { 187 struct parameter *first; /* pointer to first parameter in list */ 188 struct parameter *last; /* pointer to last parameter in list */ 189 long begin_comment; /* begin offset of comment */ 190 long end_comment; /* end offset of comment */ 191 char *comment; /* comment at start of parameter list */ 192 } ParameterList; 193 194 /* This structure stores information about a declarator. */ 195 typedef struct _Declarator { 196 char *name; /* name of variable or function */ 197 char *text; /* source text */ 198 long begin; /* offset in temporary file */ 199 long begin_comment; /* begin offset of comment */ 200 long end_comment; /* end offset of comment */ 201 FuncDefStyle func_def; /* style of function definition */ 202 ParameterList params; /* function parameters */ 203 boolean pointer; /* TRUE if it declares a pointer */ 204 struct _Declarator *head; /* head function declarator */ 205 struct _Declarator *func_stack; /* stack of function declarators */ 206 struct _Declarator *next; /* next declarator in list */ 207 } Declarator; 208 209 /* This structure stores information about a function parameter. */ 210 typedef struct parameter { 211 struct parameter *next; /* next parameter in list */ 212 DeclSpec decl_spec; 213 Declarator *declarator; 214 char *comment; /* comment following the parameter */ 215 } Parameter; 216 217 /* This is a list of declarators. */ 218 typedef struct declarator_list { 219 Declarator *first; /* pointer to first declarator in list */ 220 Declarator *last; /* pointer to last declarator in list */ 221 } DeclaratorList; 222 223 /* #include "symbol.h" */ 224 typedef struct symbol { 225 struct symbol *next; /* next symbol in list */ 226 char *name; /* name of symbol */ 227 char *value; /* value of symbol (for defines) */ 228 short flags; /* symbol attributes */ 229 } Symbol; 230 231 /* parser stack entry type */ 232 typedef union { 233 Text text; 234 DeclSpec decl_spec; 235 Parameter *parameter; 236 ParameterList param_list; 237 Declarator *declarator; 238 DeclaratorList decl_list; 239 } YYSTYPE; 240 241 /* The hash table length should be a prime number. */ 242 #define SYM_MAX_HASH 251 243 244 typedef struct symbol_table { 245 Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */ 246 } SymbolTable; 247 248 extern SymbolTable *new_symbol_table /* Create symbol table */ 249 (void); 250 extern void free_symbol_table /* Destroy symbol table */ 251 (SymbolTable *s); 252 extern Symbol *find_symbol /* Lookup symbol name */ 253 (SymbolTable *s, const char *n); 254 extern Symbol *new_symbol /* Define new symbol */ 255 (SymbolTable *s, const char *n, const char *v, int f); 256 257 /* #include "semantic.h" */ 258 extern void new_decl_spec (DeclSpec *, const char *, long, int); 259 extern void free_decl_spec (DeclSpec *); 260 extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *); 261 extern void check_untagged (DeclSpec *); 262 extern Declarator *new_declarator (const char *, const char *, long); 263 extern void free_declarator (Declarator *); 264 extern void new_decl_list (DeclaratorList *, Declarator *); 265 extern void free_decl_list (DeclaratorList *); 266 extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *); 267 extern Parameter *new_parameter (DeclSpec *, Declarator *); 268 extern void free_parameter (Parameter *); 269 extern void new_param_list (ParameterList *, Parameter *); 270 extern void free_param_list (ParameterList *); 271 extern void add_param_list (ParameterList *, ParameterList *, Parameter *); 272 extern void new_ident_list (ParameterList *); 273 extern void add_ident_list (ParameterList *, ParameterList *, const char *); 274 extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *); 275 extern void gen_declarations (DeclSpec *, DeclaratorList *); 276 extern void gen_prototype (DeclSpec *, Declarator *); 277 extern void gen_func_declarator (Declarator *); 278 extern void gen_func_definition (DeclSpec *, Declarator *); 279 280 extern void init_parser (void); 281 extern void process_file (FILE *infile, char *name); 282 extern char *cur_text (void); 283 extern char *cur_file_name (void); 284 extern char *implied_typedef (void); 285 extern void include_file (char *name, int convert); 286 extern char *supply_parm (int count); 287 extern char *xstrdup (const char *); 288 extern int already_declared (char *name); 289 extern int is_actual_func (Declarator *d); 290 extern int lint_ellipsis (Parameter *p); 291 extern int want_typedef (void); 292 extern void begin_tracking (void); 293 extern void begin_typedef (void); 294 extern void copy_typedef (char *s); 295 extern void ellipsis_varargs (Declarator *d); 296 extern void end_typedef (void); 297 extern void flush_varargs (void); 298 extern void fmt_library (int code); 299 extern void imply_typedef (const char *s); 300 extern void indent (FILE *outf); 301 extern void put_blankline (FILE *outf); 302 extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator); 303 extern void put_char (FILE *outf, int c); 304 extern void put_error (void); 305 extern void put_newline (FILE *outf); 306 extern void put_padded (FILE *outf, const char *s); 307 extern void put_string (FILE *outf, const char *s); 308 extern void track_in (void); 309 310 extern boolean file_comments; 311 extern FuncDefStyle func_style; 312 extern char base_file[]; 313 314 extern int yylex (void); 315 316 /* declaration specifier attributes for the typedef statement currently being 317 * scanned 318 */ 319 static int cur_decl_spec_flags; 320 321 /* pointer to parameter list for the current function definition */ 322 static ParameterList *func_params; 323 324 /* A parser semantic action sets this pointer to the current declarator in 325 * a function parameter declaration in order to catch any comments following 326 * the parameter declaration on the same line. If the lexer scans a comment 327 * and <cur_declarator> is not NULL, then the comment is attached to the 328 * declarator. To ignore subsequent comments, the lexer sets this to NULL 329 * after scanning a comment or end of line. 330 */ 331 static Declarator *cur_declarator; 332 333 /* temporary string buffer */ 334 static char buf[MAX_TEXT_SIZE]; 335 336 /* table of typedef names */ 337 static SymbolTable *typedef_names; 338 339 /* table of define names */ 340 static SymbolTable *define_names; 341 342 /* table of type qualifiers */ 343 static SymbolTable *type_qualifiers; 344 345 /* information about the current input file */ 346 typedef struct { 347 char *base_name; /* base input file name */ 348 char *file_name; /* current file name */ 349 FILE *file; /* input file */ 350 unsigned line_num; /* current line number in input file */ 351 FILE *tmp_file; /* temporary file */ 352 long begin_comment; /* tmp file offset after last written ) or ; */ 353 long end_comment; /* tmp file offset after last comment */ 354 boolean convert; /* if TRUE, convert function definitions */ 355 boolean changed; /* TRUE if conversion done in this file */ 356 } IncludeStack; 357 358 static IncludeStack *cur_file; /* current input file */ 359 360 /* #include "yyerror.c" */ 361 362 static int haveAnsiParam (void); 363 364 365 /* Flags to enable us to find if a procedure returns a value. 366 */ 367 static int return_val; /* nonzero on BRACES iff return-expression found */ 368 369 static const char * 370 dft_decl_spec (void) 371 { 372 return (lintLibrary() && !return_val) ? "void" : "int"; 373 } 374 375 static int 376 haveAnsiParam (void) 377 { 378 Parameter *p; 379 if (func_params != 0) { 380 for (p = func_params->first; p != 0; p = p->next) { 381 if (p->declarator->func_def == FUNC_ANSI) { 382 return TRUE; 383 } 384 } 385 } 386 return FALSE; 387 } 388 #line 389 "grammar.tab.c" 389 390 /* compatibility with bison */ 391 #ifdef YYPARSE_PARAM 392 /* compatibility with FreeBSD */ 393 # ifdef YYPARSE_PARAM_TYPE 394 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 395 # else 396 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 397 # endif 398 #else 399 # define YYPARSE_DECL() yyparse(void) 400 #endif 401 402 /* Parameters sent to lex. */ 403 #ifdef YYLEX_PARAM 404 # define YYLEX_DECL() yylex(void *YYLEX_PARAM) 405 # define YYLEX yylex(YYLEX_PARAM) 406 #else 407 # define YYLEX_DECL() yylex(void) 408 # define YYLEX yylex() 409 #endif 410 411 /* Parameters sent to yyerror. */ 412 #ifndef YYERROR_DECL 413 #define YYERROR_DECL() yyerror(const char *s) 414 #endif 415 #ifndef YYERROR_CALL 416 #define YYERROR_CALL(msg) yyerror(msg) 417 #endif 418 419 extern int YYPARSE_DECL(); 420 421 #define T_IDENTIFIER 257 422 #define T_TYPEDEF_NAME 258 423 #define T_DEFINE_NAME 259 424 #define T_AUTO 260 425 #define T_EXTERN 261 426 #define T_REGISTER 262 427 #define T_STATIC 263 428 #define T_TYPEDEF 264 429 #define T_INLINE 265 430 #define T_EXTENSION 266 431 #define T_CHAR 267 432 #define T_DOUBLE 268 433 #define T_FLOAT 269 434 #define T_INT 270 435 #define T_VOID 271 436 #define T_LONG 272 437 #define T_SHORT 273 438 #define T_SIGNED 274 439 #define T_UNSIGNED 275 440 #define T_ENUM 276 441 #define T_STRUCT 277 442 #define T_UNION 278 443 #define T_Bool 279 444 #define T_Complex 280 445 #define T_Imaginary 281 446 #define T_TYPE_QUALIFIER 282 447 #define T_BRACKETS 283 448 #define T_LBRACE 284 449 #define T_MATCHRBRACE 285 450 #define T_ELLIPSIS 286 451 #define T_INITIALIZER 287 452 #define T_STRING_LITERAL 288 453 #define T_ASM 289 454 #define T_ASMARG 290 455 #define T_VA_DCL 291 456 #define YYERRCODE 256 457 typedef int YYINT; 458 static const YYINT grammar_lhs[] = { -1, 459 0, 0, 26, 26, 27, 27, 27, 27, 27, 27, 460 27, 31, 30, 30, 28, 28, 34, 28, 32, 32, 461 33, 33, 35, 35, 37, 38, 29, 39, 29, 36, 462 36, 36, 40, 40, 1, 1, 2, 2, 2, 3, 463 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 464 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 465 5, 5, 6, 6, 6, 19, 19, 8, 8, 9, 466 41, 9, 7, 7, 7, 25, 23, 23, 10, 10, 467 11, 11, 11, 11, 11, 20, 20, 21, 21, 22, 468 22, 14, 14, 15, 15, 16, 16, 16, 17, 17, 469 18, 18, 24, 24, 12, 12, 12, 13, 13, 13, 470 13, 13, 13, 13, 471 }; 472 static const YYINT grammar_len[] = { 2, 473 0, 1, 1, 2, 1, 1, 1, 1, 3, 2, 474 2, 2, 3, 3, 2, 3, 0, 5, 2, 1, 475 0, 1, 1, 3, 0, 0, 7, 0, 5, 0, 476 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 477 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 478 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 479 1, 1, 3, 2, 2, 1, 1, 1, 3, 1, 480 0, 4, 3, 2, 2, 1, 1, 1, 2, 1, 481 1, 3, 2, 4, 4, 2, 3, 0, 1, 1, 482 2, 1, 3, 1, 3, 2, 2, 1, 0, 1, 483 1, 3, 1, 2, 1, 2, 1, 3, 2, 1, 484 4, 3, 3, 2, 485 }; 486 static const YYINT grammar_defred[] = { 0, 487 0, 0, 0, 0, 77, 0, 62, 40, 0, 42, 488 43, 20, 44, 0, 46, 47, 48, 49, 54, 50, 489 51, 52, 53, 76, 66, 67, 55, 56, 57, 61, 490 0, 7, 0, 0, 35, 37, 38, 39, 59, 60, 491 28, 0, 0, 0, 103, 81, 0, 0, 3, 5, 492 6, 8, 0, 10, 11, 78, 0, 90, 0, 0, 493 104, 0, 19, 0, 41, 45, 15, 36, 0, 68, 494 0, 0, 0, 83, 0, 0, 64, 0, 0, 74, 495 4, 58, 0, 82, 87, 91, 0, 14, 13, 9, 496 16, 0, 71, 0, 31, 33, 0, 0, 0, 0, 497 0, 94, 0, 0, 101, 12, 63, 73, 0, 0, 498 69, 0, 0, 0, 34, 0, 110, 96, 97, 0, 499 0, 84, 0, 85, 0, 23, 0, 0, 72, 26, 500 29, 114, 0, 0, 0, 109, 0, 93, 95, 102, 501 18, 0, 0, 108, 113, 112, 0, 24, 27, 111, 502 }; 503 static const YYINT grammar_dgoto[] = { 33, 504 87, 35, 36, 37, 38, 39, 40, 69, 70, 41, 505 42, 119, 120, 100, 101, 102, 103, 104, 43, 44, 506 59, 60, 45, 46, 47, 48, 49, 50, 51, 52, 507 77, 53, 127, 109, 128, 97, 94, 143, 72, 98, 508 112, 509 }; 510 static const YYINT grammar_sindex[] = { -2, 511 -3, 27, -239, -177, 0, 0, 0, 0, -274, 0, 512 0, 0, 0, -246, 0, 0, 0, 0, 0, 0, 513 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514 -266, 0, 0, 455, 0, 0, 0, 0, 0, 0, 515 0, -35, -245, 128, 0, 0, -245, -2, 0, 0, 516 0, 0, 642, 0, 0, 0, -15, 0, -12, -239, 517 0, 590, 0, -27, 0, 0, 0, 0, -10, 0, 518 -11, 534, -72, 0, -237, -232, 0, -35, -232, 0, 519 0, 0, 642, 0, 0, 0, 455, 0, 0, 0, 520 0, 27, 0, 534, 0, 0, -222, 617, 209, 34, 521 39, 0, 44, 42, 0, 0, 0, 0, 27, -11, 522 0, -200, -196, -195, 0, 174, 0, 0, 0, -33, 523 243, 0, 561, 0, -177, 0, 33, 49, 0, 0, 524 0, 0, 53, 55, 417, 0, -33, 0, 0, 0, 525 0, 27, -188, 0, 0, 0, 57, 0, 0, 0, 526 }; 527 static const YYINT grammar_rindex[] = { 99, 528 0, 0, 275, 0, 0, -38, 0, 0, 481, 0, 529 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 530 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532 0, 30, 0, 0, 0, 0, 0, 101, 0, 0, 533 0, 0, 0, 0, 0, 0, 0, 0, 343, 309, 534 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535 98, -182, 62, 0, 0, 133, 0, 64, 379, 0, 536 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 537 0, 0, 0, -182, 0, 0, 0, -180, -19, 0, 538 65, 0, 0, 68, 0, 0, 0, 0, 51, 9, 539 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, 540 19, 0, 0, 0, 0, 0, 0, 52, 0, 0, 541 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 542 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543 }; 544 static const YYINT grammar_gindex[] = { 0, 545 11, -17, 0, 0, 13, 0, 0, 0, 20, 8, 546 -43, -1, -8, -89, 0, -9, 0, 0, 0, -44, 547 0, 0, 4, 0, 0, 0, 70, -53, 0, 0, 548 -18, 0, 0, 0, 0, 22, 0, 0, 0, 0, 549 0, 550 }; 551 #define YYTABLESIZE 924 552 static const YYINT grammar_table[] = { 58, 553 78, 58, 58, 58, 73, 58, 135, 61, 88, 57, 554 34, 5, 56, 62, 85, 58, 68, 63, 96, 7, 555 58, 98, 78, 64, 98, 84, 134, 107, 80, 3, 556 107, 90, 17, 92, 17, 4, 17, 2, 75, 3, 557 96, 71, 30, 89, 115, 147, 76, 106, 91, 93, 558 79, 75, 70, 17, 121, 55, 32, 107, 34, 105, 559 108, 114, 105, 83, 4, 68, 2, 70, 3, 68, 560 80, 121, 86, 80, 122, 106, 105, 78, 106, 5, 561 56, 68, 123, 99, 124, 125, 129, 130, 80, 131, 562 80, 141, 142, 144, 110, 145, 149, 150, 1, 110, 563 2, 30, 99, 32, 79, 92, 118, 79, 100, 21, 564 22, 111, 137, 139, 133, 113, 126, 81, 0, 0, 565 0, 0, 79, 57, 79, 0, 99, 0, 140, 0, 566 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 567 0, 70, 0, 0, 0, 99, 0, 0, 0, 148, 568 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 569 0, 0, 0, 0, 0, 4, 0, 2, 0, 0, 570 65, 0, 65, 65, 65, 0, 65, 0, 0, 0, 571 0, 0, 0, 0, 5, 6, 7, 8, 65, 10, 572 11, 65, 13, 66, 15, 16, 17, 18, 19, 20, 573 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 574 0, 4, 0, 116, 132, 3, 0, 0, 58, 58, 575 58, 58, 58, 58, 58, 78, 58, 58, 58, 58, 576 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 577 58, 58, 58, 58, 58, 78, 4, 74, 116, 136, 578 3, 17, 78, 1, 5, 6, 7, 8, 9, 10, 579 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 580 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 581 4, 54, 116, 5, 56, 0, 31, 80, 80, 80, 582 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 583 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 584 80, 80, 88, 80, 88, 88, 88, 0, 88, 0, 585 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 586 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 587 79, 79, 79, 79, 79, 79, 89, 79, 89, 89, 588 89, 0, 89, 0, 79, 25, 25, 25, 25, 25, 589 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 590 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 591 86, 25, 86, 86, 5, 56, 86, 0, 25, 65, 592 65, 65, 65, 65, 65, 65, 0, 65, 65, 65, 593 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 594 65, 65, 65, 65, 65, 65, 75, 0, 75, 75, 595 75, 0, 75, 0, 0, 0, 0, 0, 0, 0, 596 5, 6, 7, 8, 65, 10, 11, 75, 13, 66, 597 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 598 25, 26, 27, 28, 29, 30, 117, 146, 0, 0, 599 0, 0, 0, 0, 0, 5, 6, 7, 8, 65, 600 10, 11, 0, 13, 66, 15, 16, 17, 18, 19, 601 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 602 30, 117, 4, 0, 2, 0, 3, 0, 0, 5, 603 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604 0, 0, 0, 67, 0, 0, 0, 0, 41, 0, 605 41, 0, 41, 0, 0, 117, 0, 0, 0, 0, 606 0, 88, 88, 0, 0, 0, 0, 0, 0, 41, 607 0, 0, 0, 0, 0, 0, 45, 0, 45, 0, 608 45, 0, 0, 0, 0, 0, 0, 88, 0, 0, 609 0, 0, 0, 0, 0, 89, 89, 45, 0, 0, 610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612 0, 89, 0, 0, 0, 0, 0, 0, 0, 86, 613 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 616 0, 0, 0, 0, 0, 75, 75, 75, 75, 75, 617 75, 75, 0, 75, 75, 75, 75, 75, 75, 75, 618 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 619 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 620 0, 0, 0, 0, 82, 7, 8, 65, 10, 11, 621 0, 13, 66, 15, 16, 17, 18, 19, 20, 21, 622 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 623 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624 0, 5, 6, 7, 8, 65, 10, 11, 0, 13, 625 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 626 24, 25, 26, 27, 28, 29, 30, 41, 41, 41, 627 41, 41, 41, 41, 0, 41, 41, 41, 41, 41, 628 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 629 41, 41, 41, 0, 0, 45, 45, 45, 45, 45, 630 45, 45, 0, 45, 45, 45, 45, 45, 45, 45, 631 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 632 45, 82, 7, 8, 65, 10, 11, 12, 13, 14, 633 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 634 25, 26, 27, 28, 29, 30, 0, 0, 82, 7, 635 8, 65, 10, 11, 95, 13, 66, 15, 16, 17, 636 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 637 28, 29, 30, 0, 0, 0, 138, 82, 7, 8, 638 65, 10, 11, 12, 13, 14, 15, 16, 17, 18, 639 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 640 29, 30, 0, 75, 82, 7, 8, 65, 10, 11, 641 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 642 22, 23, 24, 25, 26, 27, 28, 29, 30, 82, 643 7, 8, 65, 10, 11, 0, 13, 66, 15, 16, 644 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 645 27, 28, 29, 30, 646 }; 647 static const YYINT grammar_check[] = { 38, 648 44, 40, 41, 42, 40, 44, 40, 4, 62, 2, 649 0, 257, 258, 288, 59, 3, 34, 264, 72, 259, 650 59, 41, 61, 290, 44, 41, 116, 41, 47, 42, 651 44, 59, 38, 44, 40, 38, 42, 40, 284, 42, 652 94, 34, 282, 62, 98, 135, 43, 285, 59, 61, 653 47, 284, 44, 59, 99, 59, 59, 76, 48, 41, 654 79, 284, 44, 53, 38, 83, 40, 59, 42, 87, 655 41, 116, 60, 44, 41, 41, 73, 121, 44, 257, 656 258, 99, 44, 73, 41, 44, 287, 284, 59, 285, 657 61, 59, 44, 41, 87, 41, 285, 41, 0, 92, 658 0, 284, 41, 284, 41, 41, 99, 44, 41, 59, 659 59, 92, 121, 123, 116, 94, 109, 48, -1, -1, 660 -1, -1, 59, 116, 61, -1, 116, -1, 125, -1, 661 -1, -1, -1, 123, -1, -1, -1, -1, -1, -1, 662 -1, 44, -1, -1, -1, 135, -1, -1, -1, 142, 663 -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, 664 -1, -1, -1, -1, -1, 38, -1, 40, -1, -1, 665 38, -1, 40, 41, 42, -1, 44, -1, -1, -1, 666 -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 667 263, 59, 265, 266, 267, 268, 269, 270, 271, 272, 668 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 669 -1, 38, -1, 40, 41, 42, -1, -1, 257, 258, 670 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 671 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 672 279, 280, 281, 282, 283, 284, 38, 283, 40, 283, 673 42, 257, 291, 256, 257, 258, 259, 260, 261, 262, 674 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 675 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 676 38, 285, 40, 257, 258, -1, 289, 258, 259, 260, 677 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 678 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 679 281, 282, 38, 284, 40, 41, 42, -1, 44, -1, 680 291, 258, 259, 260, 261, 262, 263, 264, 265, 266, 681 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 682 277, 278, 279, 280, 281, 282, 38, 284, 40, 41, 683 42, -1, 44, -1, 291, 258, 259, 260, 261, 262, 684 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 685 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 686 38, 284, 40, 41, 257, 258, 44, -1, 291, 257, 687 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 688 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 689 278, 279, 280, 281, 282, 283, 38, -1, 40, 41, 690 42, -1, 44, -1, -1, -1, -1, -1, -1, -1, 691 257, 258, 259, 260, 261, 262, 263, 59, 265, 266, 692 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 693 277, 278, 279, 280, 281, 282, 283, 41, -1, -1, 694 -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 695 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 696 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 697 282, 283, 38, -1, 40, -1, 42, -1, -1, 257, 698 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, 699 -1, -1, -1, 59, -1, -1, -1, -1, 38, -1, 700 40, -1, 42, -1, -1, 283, -1, -1, -1, -1, 701 -1, 257, 258, -1, -1, -1, -1, -1, -1, 59, 702 -1, -1, -1, -1, -1, -1, 38, -1, 40, -1, 703 42, -1, -1, -1, -1, -1, -1, 283, -1, -1, 704 -1, -1, -1, -1, -1, 257, 258, 59, -1, -1, 705 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 706 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 707 -1, 283, -1, -1, -1, -1, -1, -1, -1, 257, 708 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, 709 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 710 -1, -1, -1, -1, -1, 283, -1, -1, -1, -1, 711 -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 712 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 713 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 714 282, 283, -1, -1, -1, -1, -1, -1, -1, -1, 715 -1, -1, -1, -1, 258, 259, 260, 261, 262, 263, 716 -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 717 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, 718 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 719 -1, 257, 258, 259, 260, 261, 262, 263, -1, 265, 720 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 721 276, 277, 278, 279, 280, 281, 282, 257, 258, 259, 722 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 723 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 724 280, 281, 282, -1, -1, 257, 258, 259, 260, 261, 725 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 726 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 727 282, 258, 259, 260, 261, 262, 263, 264, 265, 266, 728 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 729 277, 278, 279, 280, 281, 282, -1, -1, 258, 259, 730 260, 261, 262, 263, 291, 265, 266, 267, 268, 269, 731 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 732 280, 281, 282, -1, -1, -1, 286, 258, 259, 260, 733 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 734 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 735 281, 282, -1, 284, 258, 259, 260, 261, 262, 263, 736 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 737 274, 275, 276, 277, 278, 279, 280, 281, 282, 258, 738 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 739 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 740 279, 280, 281, 282, 741 }; 742 #define YYFINAL 33 743 #ifndef YYDEBUG 744 #define YYDEBUG 0 745 #endif 746 #define YYMAXTOKEN 291 747 #define YYUNDFTOKEN 335 748 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 749 #if YYDEBUG 750 static const char *const grammar_name[] = { 751 752 "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 753 0,0,0,0,"'&'",0,"'('","')'","'*'",0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,"';'",0, 754 "'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 755 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 756 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 757 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 758 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 759 "T_IDENTIFIER","T_TYPEDEF_NAME","T_DEFINE_NAME","T_AUTO","T_EXTERN", 760 "T_REGISTER","T_STATIC","T_TYPEDEF","T_INLINE","T_EXTENSION","T_CHAR", 761 "T_DOUBLE","T_FLOAT","T_INT","T_VOID","T_LONG","T_SHORT","T_SIGNED", 762 "T_UNSIGNED","T_ENUM","T_STRUCT","T_UNION","T_Bool","T_Complex","T_Imaginary", 763 "T_TYPE_QUALIFIER","T_BRACKETS","T_LBRACE","T_MATCHRBRACE","T_ELLIPSIS", 764 "T_INITIALIZER","T_STRING_LITERAL","T_ASM","T_ASMARG","T_VA_DCL",0,0,0,0,0,0,0, 765 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 766 "illegal-symbol", 767 }; 768 static const char *const grammar_rule[] = { 769 "$accept : program", 770 "program :", 771 "program : translation_unit", 772 "translation_unit : external_declaration", 773 "translation_unit : translation_unit external_declaration", 774 "external_declaration : declaration", 775 "external_declaration : function_definition", 776 "external_declaration : ';'", 777 "external_declaration : linkage_specification", 778 "external_declaration : T_ASM T_ASMARG ';'", 779 "external_declaration : error T_MATCHRBRACE", 780 "external_declaration : error ';'", 781 "braces : T_LBRACE T_MATCHRBRACE", 782 "linkage_specification : T_EXTERN T_STRING_LITERAL braces", 783 "linkage_specification : T_EXTERN T_STRING_LITERAL declaration", 784 "declaration : decl_specifiers ';'", 785 "declaration : decl_specifiers init_declarator_list ';'", 786 "$$1 :", 787 "declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'", 788 "any_typedef : T_EXTENSION T_TYPEDEF", 789 "any_typedef : T_TYPEDEF", 790 "opt_declarator_list :", 791 "opt_declarator_list : declarator_list", 792 "declarator_list : declarator", 793 "declarator_list : declarator_list ',' declarator", 794 "$$2 :", 795 "$$3 :", 796 "function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE", 797 "$$4 :", 798 "function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE", 799 "opt_declaration_list :", 800 "opt_declaration_list : T_VA_DCL", 801 "opt_declaration_list : declaration_list", 802 "declaration_list : declaration", 803 "declaration_list : declaration_list declaration", 804 "decl_specifiers : decl_specifier", 805 "decl_specifiers : decl_specifiers decl_specifier", 806 "decl_specifier : storage_class", 807 "decl_specifier : type_specifier", 808 "decl_specifier : type_qualifier", 809 "storage_class : T_AUTO", 810 "storage_class : T_EXTERN", 811 "storage_class : T_REGISTER", 812 "storage_class : T_STATIC", 813 "storage_class : T_INLINE", 814 "storage_class : T_EXTENSION", 815 "type_specifier : T_CHAR", 816 "type_specifier : T_DOUBLE", 817 "type_specifier : T_FLOAT", 818 "type_specifier : T_INT", 819 "type_specifier : T_LONG", 820 "type_specifier : T_SHORT", 821 "type_specifier : T_SIGNED", 822 "type_specifier : T_UNSIGNED", 823 "type_specifier : T_VOID", 824 "type_specifier : T_Bool", 825 "type_specifier : T_Complex", 826 "type_specifier : T_Imaginary", 827 "type_specifier : T_TYPEDEF_NAME", 828 "type_specifier : struct_or_union_specifier", 829 "type_specifier : enum_specifier", 830 "type_qualifier : T_TYPE_QUALIFIER", 831 "type_qualifier : T_DEFINE_NAME", 832 "struct_or_union_specifier : struct_or_union any_id braces", 833 "struct_or_union_specifier : struct_or_union braces", 834 "struct_or_union_specifier : struct_or_union any_id", 835 "struct_or_union : T_STRUCT", 836 "struct_or_union : T_UNION", 837 "init_declarator_list : init_declarator", 838 "init_declarator_list : init_declarator_list ',' init_declarator", 839 "init_declarator : declarator", 840 "$$5 :", 841 "init_declarator : declarator '=' $$5 T_INITIALIZER", 842 "enum_specifier : enumeration any_id braces", 843 "enum_specifier : enumeration braces", 844 "enum_specifier : enumeration any_id", 845 "enumeration : T_ENUM", 846 "any_id : T_IDENTIFIER", 847 "any_id : T_TYPEDEF_NAME", 848 "declarator : pointer direct_declarator", 849 "declarator : direct_declarator", 850 "direct_declarator : identifier_or_ref", 851 "direct_declarator : '(' declarator ')'", 852 "direct_declarator : direct_declarator T_BRACKETS", 853 "direct_declarator : direct_declarator '(' parameter_type_list ')'", 854 "direct_declarator : direct_declarator '(' opt_identifier_list ')'", 855 "pointer : '*' opt_type_qualifiers", 856 "pointer : '*' opt_type_qualifiers pointer", 857 "opt_type_qualifiers :", 858 "opt_type_qualifiers : type_qualifier_list", 859 "type_qualifier_list : type_qualifier", 860 "type_qualifier_list : type_qualifier_list type_qualifier", 861 "parameter_type_list : parameter_list", 862 "parameter_type_list : parameter_list ',' T_ELLIPSIS", 863 "parameter_list : parameter_declaration", 864 "parameter_list : parameter_list ',' parameter_declaration", 865 "parameter_declaration : decl_specifiers declarator", 866 "parameter_declaration : decl_specifiers abs_declarator", 867 "parameter_declaration : decl_specifiers", 868 "opt_identifier_list :", 869 "opt_identifier_list : identifier_list", 870 "identifier_list : any_id", 871 "identifier_list : identifier_list ',' any_id", 872 "identifier_or_ref : any_id", 873 "identifier_or_ref : '&' any_id", 874 "abs_declarator : pointer", 875 "abs_declarator : pointer direct_abs_declarator", 876 "abs_declarator : direct_abs_declarator", 877 "direct_abs_declarator : '(' abs_declarator ')'", 878 "direct_abs_declarator : direct_abs_declarator T_BRACKETS", 879 "direct_abs_declarator : T_BRACKETS", 880 "direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')'", 881 "direct_abs_declarator : direct_abs_declarator '(' ')'", 882 "direct_abs_declarator : '(' parameter_type_list ')'", 883 "direct_abs_declarator : '(' ')'", 884 885 }; 886 #endif 887 888 #if YYDEBUG 889 int yydebug; 890 #endif 891 892 int yyerrflag; 893 int yychar; 894 YYSTYPE yyval; 895 YYSTYPE yylval; 896 int yynerrs; 897 898 /* define the initial stack-sizes */ 899 #ifdef YYSTACKSIZE 900 #undef YYMAXDEPTH 901 #define YYMAXDEPTH YYSTACKSIZE 902 #else 903 #ifdef YYMAXDEPTH 904 #define YYSTACKSIZE YYMAXDEPTH 905 #else 906 #define YYSTACKSIZE 10000 907 #define YYMAXDEPTH 10000 908 #endif 909 #endif 910 911 #define YYINITSTACKSIZE 200 912 913 typedef struct { 914 unsigned stacksize; 915 YYINT *s_base; 916 YYINT *s_mark; 917 YYINT *s_last; 918 YYSTYPE *l_base; 919 YYSTYPE *l_mark; 920 } YYSTACKDATA; 921 /* variables for the parser stack */ 922 static YYSTACKDATA yystack; 923 #line 1015 "grammar.y" 924 925 /* lex.yy.c */ 926 #define BEGIN yy_start = 1 + 2 * 927 928 #define CPP1 1 929 #define INIT1 2 930 #define INIT2 3 931 #define CURLY 4 932 #define LEXYACC 5 933 #define ASM 6 934 #define CPP_INLINE 7 935 936 extern char *yytext; 937 extern FILE *yyin, *yyout; 938 939 static int curly; /* number of curly brace nesting levels */ 940 static int ly_count; /* number of occurrences of %% */ 941 static int inc_depth; /* include nesting level */ 942 static SymbolTable *included_files; /* files already included */ 943 static int yy_start = 0; /* start state number */ 944 945 #define grammar_error(s) yaccError(s) 946 947 static void 948 yaccError (const char *msg) 949 { 950 func_params = NULL; 951 put_error(); /* tell what line we're on, and what file */ 952 fprintf(stderr, "%s at token '%s'\n", msg, yytext); 953 } 954 955 /* Initialize the table of type qualifier keywords recognized by the lexical 956 * analyzer. 957 */ 958 void 959 init_parser (void) 960 { 961 static const char *keywords[] = { 962 "const", 963 "restrict", 964 "volatile", 965 "interrupt", 966 #ifdef vms 967 "noshare", 968 "readonly", 969 #endif 970 #if defined(MSDOS) || defined(OS2) 971 "__cdecl", 972 "__export", 973 "__far", 974 "__fastcall", 975 "__fortran", 976 "__huge", 977 "__inline", 978 "__interrupt", 979 "__loadds", 980 "__near", 981 "__pascal", 982 "__saveregs", 983 "__segment", 984 "__stdcall", 985 "__syscall", 986 "_cdecl", 987 "_cs", 988 "_ds", 989 "_es", 990 "_export", 991 "_far", 992 "_fastcall", 993 "_fortran", 994 "_huge", 995 "_interrupt", 996 "_loadds", 997 "_near", 998 "_pascal", 999 "_saveregs", 1000 "_seg", 1001 "_segment", 1002 "_ss", 1003 "cdecl", 1004 "far", 1005 "huge", 1006 "near", 1007 "pascal", 1008 #ifdef OS2 1009 "__far16", 1010 #endif 1011 #endif 1012 #ifdef __GNUC__ 1013 /* gcc aliases */ 1014 "__builtin_va_arg", 1015 "__builtin_va_list", 1016 "__const", 1017 "__const__", 1018 "__inline", 1019 "__inline__", 1020 "__restrict", 1021 "__restrict__", 1022 "__volatile", 1023 "__volatile__", 1024 #endif 1025 }; 1026 unsigned i; 1027 1028 /* Initialize type qualifier table. */ 1029 type_qualifiers = new_symbol_table(); 1030 for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) { 1031 new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE); 1032 } 1033 } 1034 1035 /* Process the C source file. Write function prototypes to the standard 1036 * output. Convert function definitions and write the converted source 1037 * code to a temporary file. 1038 */ 1039 void 1040 process_file (FILE *infile, char *name) 1041 { 1042 char *s; 1043 1044 if (strlen(name) > 2) { 1045 s = name + strlen(name) - 2; 1046 if (*s == '.') { 1047 ++s; 1048 if (*s == 'l' || *s == 'y') 1049 BEGIN LEXYACC; 1050 #if defined(MSDOS) || defined(OS2) 1051 if (*s == 'L' || *s == 'Y') 1052 BEGIN LEXYACC; 1053 #endif 1054 } 1055 } 1056 1057 included_files = new_symbol_table(); 1058 typedef_names = new_symbol_table(); 1059 define_names = new_symbol_table(); 1060 inc_depth = -1; 1061 curly = 0; 1062 ly_count = 0; 1063 func_params = NULL; 1064 yyin = infile; 1065 include_file(strcpy(base_file, name), func_style != FUNC_NONE); 1066 if (file_comments) { 1067 #if OPT_LINTLIBRARY 1068 if (lintLibrary()) { 1069 put_blankline(stdout); 1070 begin_tracking(); 1071 } 1072 #endif 1073 put_string(stdout, "/* "); 1074 put_string(stdout, cur_file_name()); 1075 put_string(stdout, " */\n"); 1076 } 1077 yyparse(); 1078 free_symbol_table(define_names); 1079 free_symbol_table(typedef_names); 1080 free_symbol_table(included_files); 1081 } 1082 1083 #ifdef NO_LEAKS 1084 void 1085 free_parser(void) 1086 { 1087 free_symbol_table (type_qualifiers); 1088 #ifdef FLEX_SCANNER 1089 if (yy_current_buffer != 0) 1090 yy_delete_buffer(yy_current_buffer); 1091 #endif 1092 } 1093 #endif 1094 #line 1095 "grammar.tab.c" 1095 1096 #if YYDEBUG 1097 #include <stdio.h> /* needed for printf */ 1098 #endif 1099 1100 #include <stdlib.h> /* needed for malloc, etc */ 1101 #include <string.h> /* needed for memset */ 1102 1103 /* allocate initial stack or double stack size, up to YYMAXDEPTH */ 1104 static int yygrowstack(YYSTACKDATA *data) 1105 { 1106 int i; 1107 unsigned newsize; 1108 YYINT *newss; 1109 YYSTYPE *newvs; 1110 1111 if ((newsize = data->stacksize) == 0) 1112 newsize = YYINITSTACKSIZE; 1113 else if (newsize >= YYMAXDEPTH) 1114 return YYENOMEM; 1115 else if ((newsize *= 2) > YYMAXDEPTH) 1116 newsize = YYMAXDEPTH; 1117 1118 i = (int) (data->s_mark - data->s_base); 1119 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 1120 if (newss == NULL) 1121 return YYENOMEM; 1122 1123 data->s_base = newss; 1124 data->s_mark = newss + i; 1125 1126 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 1127 if (newvs == NULL) 1128 return YYENOMEM; 1129 1130 data->l_base = newvs; 1131 data->l_mark = newvs + i; 1132 1133 data->stacksize = newsize; 1134 data->s_last = data->s_base + newsize - 1; 1135 return 0; 1136 } 1137 1138 #if YYPURE || defined(YY_NO_LEAKS) 1139 static void yyfreestack(YYSTACKDATA *data) 1140 { 1141 free(data->s_base); 1142 free(data->l_base); 1143 memset(data, 0, sizeof(*data)); 1144 } 1145 #else 1146 #define yyfreestack(data) /* nothing */ 1147 #endif 1148 1149 #define YYABORT goto yyabort 1150 #define YYREJECT goto yyabort 1151 #define YYACCEPT goto yyaccept 1152 #define YYERROR goto yyerrlab 1153 1154 int 1155 YYPARSE_DECL() 1156 { 1157 int yym, yyn, yystate; 1158 #if YYDEBUG 1159 const char *yys; 1160 1161 if ((yys = getenv("YYDEBUG")) != NULL) 1162 { 1163 yyn = *yys; 1164 if (yyn >= '0' && yyn <= '9') 1165 yydebug = yyn - '0'; 1166 } 1167 #endif 1168 1169 /* yym is set below */ 1170 /* yyn is set below */ 1171 yynerrs = 0; 1172 yyerrflag = 0; 1173 yychar = YYEMPTY; 1174 yystate = 0; 1175 1176 #if YYPURE 1177 memset(&yystack, 0, sizeof(yystack)); 1178 #endif 1179 1180 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1181 yystack.s_mark = yystack.s_base; 1182 yystack.l_mark = yystack.l_base; 1183 yystate = 0; 1184 *yystack.s_mark = 0; 1185 1186 yyloop: 1187 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 1188 if (yychar < 0) 1189 { 1190 yychar = YYLEX; 1191 if (yychar < 0) yychar = YYEOF; 1192 #if YYDEBUG 1193 if (yydebug) 1194 { 1195 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 1196 printf("%sdebug: state %d, reading %d (%s)\n", 1197 YYPREFIX, yystate, yychar, yys); 1198 } 1199 #endif 1200 } 1201 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && 1202 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 1203 { 1204 #if YYDEBUG 1205 if (yydebug) 1206 printf("%sdebug: state %d, shifting to state %d\n", 1207 YYPREFIX, yystate, yytable[yyn]); 1208 #endif 1209 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1210 yystate = yytable[yyn]; 1211 *++yystack.s_mark = yytable[yyn]; 1212 *++yystack.l_mark = yylval; 1213 yychar = YYEMPTY; 1214 if (yyerrflag > 0) --yyerrflag; 1215 goto yyloop; 1216 } 1217 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && 1218 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 1219 { 1220 yyn = yytable[yyn]; 1221 goto yyreduce; 1222 } 1223 if (yyerrflag != 0) goto yyinrecovery; 1224 1225 YYERROR_CALL("syntax error"); 1226 1227 goto yyerrlab; /* redundant goto avoids 'unused label' warning */ 1228 yyerrlab: 1229 ++yynerrs; 1230 1231 yyinrecovery: 1232 if (yyerrflag < 3) 1233 { 1234 yyerrflag = 3; 1235 for (;;) 1236 { 1237 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && 1238 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) 1239 { 1240 #if YYDEBUG 1241 if (yydebug) 1242 printf("%sdebug: state %d, error recovery shifting\ 1243 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 1244 #endif 1245 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1246 yystate = yytable[yyn]; 1247 *++yystack.s_mark = yytable[yyn]; 1248 *++yystack.l_mark = yylval; 1249 goto yyloop; 1250 } 1251 else 1252 { 1253 #if YYDEBUG 1254 if (yydebug) 1255 printf("%sdebug: error recovery discarding state %d\n", 1256 YYPREFIX, *yystack.s_mark); 1257 #endif 1258 if (yystack.s_mark <= yystack.s_base) goto yyabort; 1259 --yystack.s_mark; 1260 --yystack.l_mark; 1261 } 1262 } 1263 } 1264 else 1265 { 1266 if (yychar == YYEOF) goto yyabort; 1267 #if YYDEBUG 1268 if (yydebug) 1269 { 1270 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 1271 printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 1272 YYPREFIX, yystate, yychar, yys); 1273 } 1274 #endif 1275 yychar = YYEMPTY; 1276 goto yyloop; 1277 } 1278 1279 yyreduce: 1280 #if YYDEBUG 1281 if (yydebug) 1282 printf("%sdebug: state %d, reducing by rule %d (%s)\n", 1283 YYPREFIX, yystate, yyn, yyrule[yyn]); 1284 #endif 1285 yym = yylen[yyn]; 1286 if (yym > 0) 1287 yyval = yystack.l_mark[1-yym]; 1288 else 1289 memset(&yyval, 0, sizeof yyval); 1290 1291 switch (yyn) 1292 { 1293 case 10: 1294 #line 378 "grammar.y" 1295 { 1296 yyerrok; 1297 } 1298 #line 1299 "grammar.tab.c" 1299 break; 1300 case 11: 1301 #line 382 "grammar.y" 1302 { 1303 yyerrok; 1304 } 1305 #line 1306 "grammar.tab.c" 1306 break; 1307 case 13: 1308 #line 393 "grammar.y" 1309 { 1310 /* Provide an empty action here so bison will not complain about 1311 * incompatible types in the default action it normally would 1312 * have generated. 1313 */ 1314 } 1315 #line 1316 "grammar.tab.c" 1316 break; 1317 case 14: 1318 #line 400 "grammar.y" 1319 { 1320 /* empty */ 1321 } 1322 #line 1323 "grammar.tab.c" 1323 break; 1324 case 15: 1325 #line 407 "grammar.y" 1326 { 1327 #if OPT_LINTLIBRARY 1328 if (types_out && want_typedef()) { 1329 gen_declarations(&yystack.l_mark[-1].decl_spec, (DeclaratorList *)0); 1330 flush_varargs(); 1331 } 1332 #endif 1333 free_decl_spec(&yystack.l_mark[-1].decl_spec); 1334 end_typedef(); 1335 } 1336 #line 1337 "grammar.tab.c" 1337 break; 1338 case 16: 1339 #line 418 "grammar.y" 1340 { 1341 if (func_params != NULL) { 1342 set_param_types(func_params, &yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list); 1343 } else { 1344 gen_declarations(&yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list); 1345 #if OPT_LINTLIBRARY 1346 flush_varargs(); 1347 #endif 1348 free_decl_list(&yystack.l_mark[-1].decl_list); 1349 } 1350 free_decl_spec(&yystack.l_mark[-2].decl_spec); 1351 end_typedef(); 1352 } 1353 #line 1354 "grammar.tab.c" 1354 break; 1355 case 17: 1356 #line 432 "grammar.y" 1357 { 1358 cur_decl_spec_flags = yystack.l_mark[0].decl_spec.flags; 1359 free_decl_spec(&yystack.l_mark[0].decl_spec); 1360 } 1361 #line 1362 "grammar.tab.c" 1362 break; 1363 case 18: 1364 #line 437 "grammar.y" 1365 { 1366 end_typedef(); 1367 } 1368 #line 1369 "grammar.tab.c" 1369 break; 1370 case 19: 1371 #line 444 "grammar.y" 1372 { 1373 begin_typedef(); 1374 } 1375 #line 1376 "grammar.tab.c" 1376 break; 1377 case 20: 1378 #line 448 "grammar.y" 1379 { 1380 begin_typedef(); 1381 } 1382 #line 1383 "grammar.tab.c" 1383 break; 1384 case 23: 1385 #line 460 "grammar.y" 1386 { 1387 int flags = cur_decl_spec_flags; 1388 1389 /* If the typedef is a pointer type, then reset the short type 1390 * flags so it does not get promoted. 1391 */ 1392 if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0) 1393 flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT); 1394 new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags); 1395 free_declarator(yystack.l_mark[0].declarator); 1396 } 1397 #line 1398 "grammar.tab.c" 1398 break; 1399 case 24: 1400 #line 472 "grammar.y" 1401 { 1402 int flags = cur_decl_spec_flags; 1403 1404 if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0) 1405 flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT); 1406 new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags); 1407 free_declarator(yystack.l_mark[0].declarator); 1408 } 1409 #line 1410 "grammar.tab.c" 1410 break; 1411 case 25: 1412 #line 484 "grammar.y" 1413 { 1414 check_untagged(&yystack.l_mark[-1].decl_spec); 1415 if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) { 1416 yyerror("syntax error"); 1417 YYERROR; 1418 } 1419 func_params = &(yystack.l_mark[0].declarator->head->params); 1420 func_params->begin_comment = cur_file->begin_comment; 1421 func_params->end_comment = cur_file->end_comment; 1422 } 1423 #line 1424 "grammar.tab.c" 1424 break; 1425 case 26: 1426 #line 495 "grammar.y" 1427 { 1428 /* If we're converting to K&R and we've got a nominally K&R 1429 * function which has a parameter which is ANSI (i.e., a prototyped 1430 * function pointer), then we must override the deciphered value of 1431 * 'func_def' so that the parameter will be converted. 1432 */ 1433 if (func_style == FUNC_TRADITIONAL 1434 && haveAnsiParam() 1435 && yystack.l_mark[-3].declarator->head->func_def == func_style) { 1436 yystack.l_mark[-3].declarator->head->func_def = FUNC_BOTH; 1437 } 1438 1439 func_params = NULL; 1440 1441 if (cur_file->convert) 1442 gen_func_definition(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator); 1443 gen_prototype(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator); 1444 #if OPT_LINTLIBRARY 1445 flush_varargs(); 1446 #endif 1447 free_decl_spec(&yystack.l_mark[-4].decl_spec); 1448 free_declarator(yystack.l_mark[-3].declarator); 1449 } 1450 #line 1451 "grammar.tab.c" 1451 break; 1452 case 28: 1453 #line 520 "grammar.y" 1454 { 1455 if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) { 1456 yyerror("syntax error"); 1457 YYERROR; 1458 } 1459 func_params = &(yystack.l_mark[0].declarator->head->params); 1460 func_params->begin_comment = cur_file->begin_comment; 1461 func_params->end_comment = cur_file->end_comment; 1462 } 1463 #line 1464 "grammar.tab.c" 1464 break; 1465 case 29: 1466 #line 530 "grammar.y" 1467 { 1468 DeclSpec decl_spec; 1469 1470 func_params = NULL; 1471 1472 new_decl_spec(&decl_spec, dft_decl_spec(), yystack.l_mark[-4].declarator->begin, DS_NONE); 1473 if (cur_file->convert) 1474 gen_func_definition(&decl_spec, yystack.l_mark[-4].declarator); 1475 gen_prototype(&decl_spec, yystack.l_mark[-4].declarator); 1476 #if OPT_LINTLIBRARY 1477 flush_varargs(); 1478 #endif 1479 free_decl_spec(&decl_spec); 1480 free_declarator(yystack.l_mark[-4].declarator); 1481 } 1482 #line 1483 "grammar.tab.c" 1483 break; 1484 case 36: 1485 #line 561 "grammar.y" 1486 { 1487 join_decl_specs(&yyval.decl_spec, &yystack.l_mark[-1].decl_spec, &yystack.l_mark[0].decl_spec); 1488 free(yystack.l_mark[-1].decl_spec.text); 1489 free(yystack.l_mark[0].decl_spec.text); 1490 } 1491 #line 1492 "grammar.tab.c" 1492 break; 1493 case 40: 1494 #line 576 "grammar.y" 1495 { 1496 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); 1497 } 1498 #line 1499 "grammar.tab.c" 1499 break; 1500 case 41: 1501 #line 580 "grammar.y" 1502 { 1503 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_EXTERN); 1504 } 1505 #line 1506 "grammar.tab.c" 1506 break; 1507 case 42: 1508 #line 584 "grammar.y" 1509 { 1510 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); 1511 } 1512 #line 1513 "grammar.tab.c" 1513 break; 1514 case 43: 1515 #line 588 "grammar.y" 1516 { 1517 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_STATIC); 1518 } 1519 #line 1520 "grammar.tab.c" 1520 break; 1521 case 44: 1522 #line 592 "grammar.y" 1523 { 1524 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_INLINE); 1525 } 1526 #line 1527 "grammar.tab.c" 1527 break; 1528 case 45: 1529 #line 596 "grammar.y" 1530 { 1531 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_JUNK); 1532 } 1533 #line 1534 "grammar.tab.c" 1534 break; 1535 case 46: 1536 #line 603 "grammar.y" 1537 { 1538 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR); 1539 } 1540 #line 1541 "grammar.tab.c" 1541 break; 1542 case 47: 1543 #line 607 "grammar.y" 1544 { 1545 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); 1546 } 1547 #line 1548 "grammar.tab.c" 1548 break; 1549 case 48: 1550 #line 611 "grammar.y" 1551 { 1552 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_FLOAT); 1553 } 1554 #line 1555 "grammar.tab.c" 1555 break; 1556 case 49: 1557 #line 615 "grammar.y" 1558 { 1559 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); 1560 } 1561 #line 1562 "grammar.tab.c" 1562 break; 1563 case 50: 1564 #line 619 "grammar.y" 1565 { 1566 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); 1567 } 1568 #line 1569 "grammar.tab.c" 1569 break; 1570 case 51: 1571 #line 623 "grammar.y" 1572 { 1573 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_SHORT); 1574 } 1575 #line 1576 "grammar.tab.c" 1576 break; 1577 case 52: 1578 #line 627 "grammar.y" 1579 { 1580 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); 1581 } 1582 #line 1583 "grammar.tab.c" 1583 break; 1584 case 53: 1585 #line 631 "grammar.y" 1586 { 1587 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); 1588 } 1589 #line 1590 "grammar.tab.c" 1590 break; 1591 case 54: 1592 #line 635 "grammar.y" 1593 { 1594 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); 1595 } 1596 #line 1597 "grammar.tab.c" 1597 break; 1598 case 55: 1599 #line 639 "grammar.y" 1600 { 1601 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR); 1602 } 1603 #line 1604 "grammar.tab.c" 1604 break; 1605 case 56: 1606 #line 643 "grammar.y" 1607 { 1608 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); 1609 } 1610 #line 1611 "grammar.tab.c" 1611 break; 1612 case 57: 1613 #line 647 "grammar.y" 1614 { 1615 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); 1616 } 1617 #line 1618 "grammar.tab.c" 1618 break; 1619 case 58: 1620 #line 651 "grammar.y" 1621 { 1622 Symbol *s; 1623 s = find_symbol(typedef_names, yystack.l_mark[0].text.text); 1624 if (s != NULL) 1625 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags); 1626 } 1627 #line 1628 "grammar.tab.c" 1628 break; 1629 case 61: 1630 #line 663 "grammar.y" 1631 { 1632 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); 1633 } 1634 #line 1635 "grammar.tab.c" 1635 break; 1636 case 62: 1637 #line 667 "grammar.y" 1638 { 1639 /* This rule allows the <pointer> nonterminal to scan #define 1640 * names as if they were type modifiers. 1641 */ 1642 Symbol *s; 1643 s = find_symbol(define_names, yystack.l_mark[0].text.text); 1644 if (s != NULL) 1645 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags); 1646 } 1647 #line 1648 "grammar.tab.c" 1648 break; 1649 case 63: 1650 #line 680 "grammar.y" 1651 { 1652 char *s; 1653 if ((s = implied_typedef()) == 0) 1654 (void)sprintf(s = buf, "%.*s %.*s", TEXT_LEN, yystack.l_mark[-2].text.text, TEXT_LEN, yystack.l_mark[-1].text.text); 1655 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE); 1656 } 1657 #line 1658 "grammar.tab.c" 1658 break; 1659 case 64: 1660 #line 687 "grammar.y" 1661 { 1662 char *s; 1663 if ((s = implied_typedef()) == 0) 1664 (void)sprintf(s = buf, "%.*s {}", TEXT_LEN, yystack.l_mark[-1].text.text); 1665 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE); 1666 } 1667 #line 1668 "grammar.tab.c" 1668 break; 1669 case 65: 1670 #line 694 "grammar.y" 1671 { 1672 (void)sprintf(buf, "%.*s %.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].text.text); 1673 new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE); 1674 } 1675 #line 1676 "grammar.tab.c" 1676 break; 1677 case 66: 1678 #line 702 "grammar.y" 1679 { 1680 imply_typedef(yyval.text.text); 1681 } 1682 #line 1683 "grammar.tab.c" 1683 break; 1684 case 67: 1685 #line 706 "grammar.y" 1686 { 1687 imply_typedef(yyval.text.text); 1688 } 1689 #line 1690 "grammar.tab.c" 1690 break; 1691 case 68: 1692 #line 713 "grammar.y" 1693 { 1694 new_decl_list(&yyval.decl_list, yystack.l_mark[0].declarator); 1695 } 1696 #line 1697 "grammar.tab.c" 1697 break; 1698 case 69: 1699 #line 717 "grammar.y" 1700 { 1701 add_decl_list(&yyval.decl_list, &yystack.l_mark[-2].decl_list, yystack.l_mark[0].declarator); 1702 } 1703 #line 1704 "grammar.tab.c" 1704 break; 1705 case 70: 1706 #line 724 "grammar.y" 1707 { 1708 if (yystack.l_mark[0].declarator->func_def != FUNC_NONE && func_params == NULL && 1709 func_style == FUNC_TRADITIONAL && cur_file->convert) { 1710 gen_func_declarator(yystack.l_mark[0].declarator); 1711 fputs(cur_text(), cur_file->tmp_file); 1712 } 1713 cur_declarator = yyval.declarator; 1714 } 1715 #line 1716 "grammar.tab.c" 1716 break; 1717 case 71: 1718 #line 733 "grammar.y" 1719 { 1720 if (yystack.l_mark[-1].declarator->func_def != FUNC_NONE && func_params == NULL && 1721 func_style == FUNC_TRADITIONAL && cur_file->convert) { 1722 gen_func_declarator(yystack.l_mark[-1].declarator); 1723 fputs(" =", cur_file->tmp_file); 1724 } 1725 } 1726 #line 1727 "grammar.tab.c" 1727 break; 1728 case 73: 1729 #line 745 "grammar.y" 1730 { 1731 char *s; 1732 if ((s = implied_typedef()) == 0) 1733 (void)sprintf(s = buf, "enum %.*s", TEXT_LEN, yystack.l_mark[-1].text.text); 1734 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE); 1735 } 1736 #line 1737 "grammar.tab.c" 1737 break; 1738 case 74: 1739 #line 752 "grammar.y" 1740 { 1741 char *s; 1742 if ((s = implied_typedef()) == 0) 1743 (void)sprintf(s = buf, "%.*s {}", TEXT_LEN, yystack.l_mark[-1].text.text); 1744 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE); 1745 } 1746 #line 1747 "grammar.tab.c" 1747 break; 1748 case 75: 1749 #line 759 "grammar.y" 1750 { 1751 (void)sprintf(buf, "enum %.*s", TEXT_LEN, yystack.l_mark[0].text.text); 1752 new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE); 1753 } 1754 #line 1755 "grammar.tab.c" 1755 break; 1756 case 76: 1757 #line 767 "grammar.y" 1758 { 1759 imply_typedef("enum"); 1760 yyval.text = yystack.l_mark[0].text; 1761 } 1762 #line 1763 "grammar.tab.c" 1763 break; 1764 case 79: 1765 #line 780 "grammar.y" 1766 { 1767 yyval.declarator = yystack.l_mark[0].declarator; 1768 (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yyval.declarator->text); 1769 free(yyval.declarator->text); 1770 yyval.declarator->text = xstrdup(buf); 1771 yyval.declarator->begin = yystack.l_mark[-1].text.begin; 1772 yyval.declarator->pointer = TRUE; 1773 } 1774 #line 1775 "grammar.tab.c" 1775 break; 1776 case 81: 1777 #line 793 "grammar.y" 1778 { 1779 yyval.declarator = new_declarator(yystack.l_mark[0].text.text, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin); 1780 } 1781 #line 1782 "grammar.tab.c" 1782 break; 1783 case 82: 1784 #line 797 "grammar.y" 1785 { 1786 yyval.declarator = yystack.l_mark[-1].declarator; 1787 (void)sprintf(buf, "(%.*s)", TEXT_LEN, yyval.declarator->text); 1788 free(yyval.declarator->text); 1789 yyval.declarator->text = xstrdup(buf); 1790 yyval.declarator->begin = yystack.l_mark[-2].text.begin; 1791 } 1792 #line 1793 "grammar.tab.c" 1793 break; 1794 case 83: 1795 #line 805 "grammar.y" 1796 { 1797 yyval.declarator = yystack.l_mark[-1].declarator; 1798 (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yyval.declarator->text, TEXT_LEN, yystack.l_mark[0].text.text); 1799 free(yyval.declarator->text); 1800 yyval.declarator->text = xstrdup(buf); 1801 } 1802 #line 1803 "grammar.tab.c" 1803 break; 1804 case 84: 1805 #line 812 "grammar.y" 1806 { 1807 yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin); 1808 yyval.declarator->params = yystack.l_mark[-1].param_list; 1809 yyval.declarator->func_stack = yystack.l_mark[-3].declarator; 1810 yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head; 1811 yyval.declarator->func_def = FUNC_ANSI; 1812 } 1813 #line 1814 "grammar.tab.c" 1814 break; 1815 case 85: 1816 #line 820 "grammar.y" 1817 { 1818 yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin); 1819 yyval.declarator->params = yystack.l_mark[-1].param_list; 1820 yyval.declarator->func_stack = yystack.l_mark[-3].declarator; 1821 yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head; 1822 yyval.declarator->func_def = FUNC_TRADITIONAL; 1823 } 1824 #line 1825 "grammar.tab.c" 1825 break; 1826 case 86: 1827 #line 831 "grammar.y" 1828 { 1829 (void)sprintf(yyval.text.text, "*%.*s", TEXT_LEN, yystack.l_mark[0].text.text); 1830 yyval.text.begin = yystack.l_mark[-1].text.begin; 1831 } 1832 #line 1833 "grammar.tab.c" 1833 break; 1834 case 87: 1835 #line 836 "grammar.y" 1836 { 1837 (void)sprintf(yyval.text.text, "*%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].text.text); 1838 yyval.text.begin = yystack.l_mark[-2].text.begin; 1839 } 1840 #line 1841 "grammar.tab.c" 1841 break; 1842 case 88: 1843 #line 844 "grammar.y" 1844 { 1845 strcpy(yyval.text.text, ""); 1846 yyval.text.begin = 0L; 1847 } 1848 #line 1849 "grammar.tab.c" 1849 break; 1850 case 90: 1851 #line 853 "grammar.y" 1852 { 1853 (void)sprintf(yyval.text.text, "%s ", yystack.l_mark[0].decl_spec.text); 1854 yyval.text.begin = yystack.l_mark[0].decl_spec.begin; 1855 free(yystack.l_mark[0].decl_spec.text); 1856 } 1857 #line 1858 "grammar.tab.c" 1858 break; 1859 case 91: 1860 #line 859 "grammar.y" 1861 { 1862 (void)sprintf(yyval.text.text, "%.*s%.*s ", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].decl_spec.text); 1863 yyval.text.begin = yystack.l_mark[-1].text.begin; 1864 free(yystack.l_mark[0].decl_spec.text); 1865 } 1866 #line 1867 "grammar.tab.c" 1867 break; 1868 case 93: 1869 #line 869 "grammar.y" 1870 { 1871 add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, "..."); 1872 } 1873 #line 1874 "grammar.tab.c" 1874 break; 1875 case 94: 1876 #line 876 "grammar.y" 1877 { 1878 new_param_list(&yyval.param_list, yystack.l_mark[0].parameter); 1879 } 1880 #line 1881 "grammar.tab.c" 1881 break; 1882 case 95: 1883 #line 880 "grammar.y" 1884 { 1885 add_param_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].parameter); 1886 } 1887 #line 1888 "grammar.tab.c" 1888 break; 1889 case 96: 1890 #line 887 "grammar.y" 1891 { 1892 check_untagged(&yystack.l_mark[-1].decl_spec); 1893 yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator); 1894 } 1895 #line 1896 "grammar.tab.c" 1896 break; 1897 case 97: 1898 #line 892 "grammar.y" 1899 { 1900 check_untagged(&yystack.l_mark[-1].decl_spec); 1901 yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator); 1902 } 1903 #line 1904 "grammar.tab.c" 1904 break; 1905 case 98: 1906 #line 897 "grammar.y" 1907 { 1908 check_untagged(&yystack.l_mark[0].decl_spec); 1909 yyval.parameter = new_parameter(&yystack.l_mark[0].decl_spec, (Declarator *)0); 1910 } 1911 #line 1912 "grammar.tab.c" 1912 break; 1913 case 99: 1914 #line 905 "grammar.y" 1915 { 1916 new_ident_list(&yyval.param_list); 1917 } 1918 #line 1919 "grammar.tab.c" 1919 break; 1920 case 101: 1921 #line 913 "grammar.y" 1922 { 1923 new_ident_list(&yyval.param_list); 1924 add_ident_list(&yyval.param_list, &yyval.param_list, yystack.l_mark[0].text.text); 1925 } 1926 #line 1927 "grammar.tab.c" 1927 break; 1928 case 102: 1929 #line 918 "grammar.y" 1930 { 1931 add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].text.text); 1932 } 1933 #line 1934 "grammar.tab.c" 1934 break; 1935 case 103: 1936 #line 925 "grammar.y" 1937 { 1938 yyval.text = yystack.l_mark[0].text; 1939 } 1940 #line 1941 "grammar.tab.c" 1941 break; 1942 case 104: 1943 #line 929 "grammar.y" 1944 { 1945 #if OPT_LINTLIBRARY 1946 if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */ 1947 yyval.text = yystack.l_mark[0].text; 1948 } else 1949 #endif 1950 (void)sprintf(yyval.text.text, "&%.*s", TEXT_LEN, yystack.l_mark[0].text.text); 1951 yyval.text.begin = yystack.l_mark[-1].text.begin; 1952 } 1953 #line 1954 "grammar.tab.c" 1954 break; 1955 case 105: 1956 #line 942 "grammar.y" 1957 { 1958 yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin); 1959 } 1960 #line 1961 "grammar.tab.c" 1961 break; 1962 case 106: 1963 #line 946 "grammar.y" 1964 { 1965 yyval.declarator = yystack.l_mark[0].declarator; 1966 (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yyval.declarator->text); 1967 free(yyval.declarator->text); 1968 yyval.declarator->text = xstrdup(buf); 1969 yyval.declarator->begin = yystack.l_mark[-1].text.begin; 1970 } 1971 #line 1972 "grammar.tab.c" 1972 break; 1973 case 108: 1974 #line 958 "grammar.y" 1975 { 1976 yyval.declarator = yystack.l_mark[-1].declarator; 1977 (void)sprintf(buf, "(%.*s)", TEXT_LEN, yyval.declarator->text); 1978 free(yyval.declarator->text); 1979 yyval.declarator->text = xstrdup(buf); 1980 yyval.declarator->begin = yystack.l_mark[-2].text.begin; 1981 } 1982 #line 1983 "grammar.tab.c" 1983 break; 1984 case 109: 1985 #line 966 "grammar.y" 1986 { 1987 yyval.declarator = yystack.l_mark[-1].declarator; 1988 (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yyval.declarator->text, TEXT_LEN, yystack.l_mark[0].text.text); 1989 free(yyval.declarator->text); 1990 yyval.declarator->text = xstrdup(buf); 1991 } 1992 #line 1993 "grammar.tab.c" 1993 break; 1994 case 110: 1995 #line 973 "grammar.y" 1996 { 1997 yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin); 1998 } 1999 #line 2000 "grammar.tab.c" 2000 break; 2001 case 111: 2002 #line 977 "grammar.y" 2003 { 2004 yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-3].declarator->begin); 2005 yyval.declarator->params = yystack.l_mark[-1].param_list; 2006 yyval.declarator->func_stack = yystack.l_mark[-3].declarator; 2007 yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head; 2008 yyval.declarator->func_def = FUNC_ANSI; 2009 } 2010 #line 2011 "grammar.tab.c" 2011 break; 2012 case 112: 2013 #line 985 "grammar.y" 2014 { 2015 yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].declarator->begin); 2016 yyval.declarator->func_stack = yystack.l_mark[-2].declarator; 2017 yyval.declarator->head = (yystack.l_mark[-2].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-2].declarator->head; 2018 yyval.declarator->func_def = FUNC_ANSI; 2019 } 2020 #line 2021 "grammar.tab.c" 2021 break; 2022 case 113: 2023 #line 992 "grammar.y" 2024 { 2025 Declarator *d; 2026 2027 d = new_declarator("", "", yystack.l_mark[-2].text.begin); 2028 yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].text.begin); 2029 yyval.declarator->params = yystack.l_mark[-1].param_list; 2030 yyval.declarator->func_stack = d; 2031 yyval.declarator->head = yyval.declarator; 2032 yyval.declarator->func_def = FUNC_ANSI; 2033 } 2034 #line 2035 "grammar.tab.c" 2035 break; 2036 case 114: 2037 #line 1003 "grammar.y" 2038 { 2039 Declarator *d; 2040 2041 d = new_declarator("", "", yystack.l_mark[-1].text.begin); 2042 yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-1].text.begin); 2043 yyval.declarator->func_stack = d; 2044 yyval.declarator->head = yyval.declarator; 2045 yyval.declarator->func_def = FUNC_ANSI; 2046 } 2047 #line 2048 "grammar.tab.c" 2048 break; 2049 #line 2050 "grammar.tab.c" 2050 } 2051 yystack.s_mark -= yym; 2052 yystate = *yystack.s_mark; 2053 yystack.l_mark -= yym; 2054 yym = yylhs[yyn]; 2055 if (yystate == 0 && yym == 0) 2056 { 2057 #if YYDEBUG 2058 if (yydebug) 2059 printf("%sdebug: after reduction, shifting from state 0 to\ 2060 state %d\n", YYPREFIX, YYFINAL); 2061 #endif 2062 yystate = YYFINAL; 2063 *++yystack.s_mark = YYFINAL; 2064 *++yystack.l_mark = yyval; 2065 if (yychar < 0) 2066 { 2067 yychar = YYLEX; 2068 if (yychar < 0) yychar = YYEOF; 2069 #if YYDEBUG 2070 if (yydebug) 2071 { 2072 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 2073 printf("%sdebug: state %d, reading %d (%s)\n", 2074 YYPREFIX, YYFINAL, yychar, yys); 2075 } 2076 #endif 2077 } 2078 if (yychar == YYEOF) goto yyaccept; 2079 goto yyloop; 2080 } 2081 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && 2082 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) 2083 yystate = yytable[yyn]; 2084 else 2085 yystate = yydgoto[yym]; 2086 #if YYDEBUG 2087 if (yydebug) 2088 printf("%sdebug: after reduction, shifting from state %d \ 2089 to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 2090 #endif 2091 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 2092 *++yystack.s_mark = (YYINT) yystate; 2093 *++yystack.l_mark = yyval; 2094 goto yyloop; 2095 2096 yyoverflow: 2097 YYERROR_CALL("yacc stack overflow"); 2098 2099 yyabort: 2100 yyfreestack(&yystack); 2101 return (1); 2102 2103 yyaccept: 2104 yyfreestack(&yystack); 2105 return (0); 2106 } 2107