home *** CD-ROM | disk | FTP | other *** search
-
- /* A Bison parser, made from parse.y */
-
- #define IDENTIFIER 258
- #define TYPENAME 259
- #define SCSPEC 260
- #define TYPESPEC 261
- #define TYPE_QUAL 262
- #define CONSTANT 263
- #define STRING 264
- #define ELLIPSIS 265
- #define SIZEOF 266
- #define ENUM 267
- #define STRUCT 268
- #define UNION 269
- #define IF 270
- #define ELSE 271
- #define WHILE 272
- #define DO 273
- #define FOR 274
- #define SWITCH 275
- #define CASE 276
- #define DEFAULT 277
- #define BREAK 278
- #define CONTINUE 279
- #define RETURN 280
- #define GOTO 281
- #define ASM 282
- #define TYPEOF 283
- #define ALIGNOF 284
- #define ASSIGN 285
- #define OROR 286
- #define ANDAND 287
- #define EQCOMPARE 288
- #define ARITHCOMPARE 289
- #define LSHIFT 290
- #define RSHIFT 291
- #define UNARY 292
- #define PLUSPLUS 293
- #define MINUSMINUS 294
- #define HYPERUNARY 295
- #define POINTSAT 296
-
- #line 48 "parse.y"
-
- #include "config.h"
- #include "tree.h"
- #include "parse.h"
- #include "c-tree.h"
- #include "flags.h"
-
- #include <stdio.h>
- #include <errno.h>
-
- extern int errno;
-
- /* Cause the `yydebug' variable to be defined. */
- #define YYDEBUG
-
- #line 66 "parse.y"
- typedef union {long itype; tree ttype; enum tree_code code; char *cptr; } YYSTYPE;
- #line 150 "parse.y"
-
- /* the declaration found for the last IDENTIFIER token read in.
- yylex must look this up to detect typedefs, which get token type TYPENAME,
- so it is left around in case the identifier is not a typedef but is
- used in a context which makes it a reference to a variable. */
- static tree lastiddecl;
-
- static tree make_pointer_declarator ();
- static tree combine_strings ();
- static void reinit_parse_for_function ();
-
- extern double atof ();
-
- /* List of types and structure classes of the current declaration */
- tree current_declspecs;
-
- char *input_filename; /* source file current line is coming from */
- char *main_input_filename; /* top-level source file */
-
- static int yylex ();
-
- #ifndef YYLTYPE
- typedef
- struct yyltype
- {
- int timestamp;
- int first_line;
- int first_column;
- int last_line;
- int last_column;
- char *text;
- }
- yyltype;
-
- #define YYLTYPE yyltype
- #endif
-
- #define YYACCEPT return(0)
- #define YYABORT return(1)
- #define YYERROR return(1)
- #include <stdio.h>
-
- #ifndef __STDC__
- #define const
- #endif
-
-
-
- #define YYFINAL 485
- #define YYFLAG -32768
- #define YYNTBASE 64
-
- #define YYTRANSLATE(x) ((unsigned)(x) <= 296 ? yytranslate[x] : 163)
-
- static const char yytranslate[] = { 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 59, 2, 2, 2, 47, 38, 2, 54,
- 55, 45, 43, 60, 44, 53, 46, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 33, 56, 2,
- 31, 2, 32, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 62, 2, 63, 37, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 61, 36, 57, 58, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 34, 35, 39, 40, 41,
- 42, 48, 49, 50, 51, 52
- };
-
- static const short yyrline[] = { 0,
- 173, 174, 181, 183, 183, 184, 186, 188, 189, 196,
- 202, 204, 206, 208, 210, 211, 212, 215, 221, 223,
- 224, 226, 231, 233, 234, 236, 241, 243, 244, 248,
- 250, 253, 255, 257, 259, 261, 263, 265, 269, 273,
- 276, 279, 282, 286, 288, 290, 292, 295, 307, 312,
- 314, 319, 321, 323, 325, 327, 329, 331, 333, 335,
- 337, 339, 341, 343, 345, 347, 349, 351, 353, 357,
- 379, 380, 382, 384, 386, 393, 398, 400, 402, 404,
- 406, 408, 413, 415, 419, 421, 424, 426, 427, 428,
- 433, 438, 441, 443, 445, 453, 456, 460, 462, 464,
- 472, 475, 477, 479, 488, 491, 495, 497, 505, 506,
- 507, 508, 512, 520, 521, 522, 525, 527, 530, 532,
- 535, 538, 546, 551, 552, 557, 562, 563, 568, 570,
- 572, 574, 580, 583, 590, 592, 597, 600, 605, 607,
- 609, 611, 619, 625, 627, 629, 631, 637, 643, 645,
- 647, 649, 651, 654, 659, 663, 666, 668, 670, 672,
- 675, 677, 680, 683, 686, 689, 693, 695, 698, 700,
- 702, 716, 720, 723, 727, 730, 731, 735, 738, 740,
- 749, 751, 756, 759, 763, 766, 770, 773, 776, 779,
- 783, 786, 790, 794, 796, 798, 800, 802, 804, 806,
- 808, 816, 818, 819, 822, 824, 827, 830, 839, 841,
- 844, 845, 849, 853, 859, 864, 866, 868, 872, 875,
- 876, 878, 881, 885, 886, 889, 891, 896, 901, 905,
- 911, 917, 924, 926, 952, 952, 963, 963, 967, 971,
- 974, 977, 983, 990, 996, 1001, 1006, 1006, 1009, 1012,
- 1016, 1019, 1024, 1026, 1029, 1031, 1035, 1042, 1045, 1050,
- 1053, 1056, 1058, 1060, 1064, 1066, 1072, 1074, 1076, 1080,
- 1083, 1089, 1092, 1094, 1096, 1098, 1103, 1106
- };
-
- static const char * const yytname[] = { 0,
- "error","$illegal.","IDENTIFIER","TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS",
- "SIZEOF","ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH",
- "CASE","DEFAULT","BREAK","CONTINUE","RETURN","GOTO","ASM","TYPEOF","ALIGNOF","ASSIGN",
- "'='","'?'","':'","OROR","ANDAND","'|'","'^'","'&'","EQCOMPARE","ARITHCOMPARE",
- "LSHIFT","RSHIFT","'+'","'-'","'*'","'/'","'%'","UNARY","PLUSPLUS","MINUSMINUS",
- "HYPERUNARY","POINTSAT","'.'","'('","')'","';'","'}'","'~'","'!'","','",
- "'{'","'['","']'","program"
- };
-
- static const short yyr1[] = { 0,
- 64, 64, 66, 65, 67, 65, 68, 68, 68, 69,
- 69, 69, 69, 69, 69, 69, 69, 71, 72, 70,
- 70, 73, 74, 70, 70, 75, 76, 70, 70, 77,
- 77, 78, 78, 78, 78, 78, 78, 78, 79, 80,
- 80, 81, 81, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 83,
- 83, 83, 83, 83, 84, 83, 83, 83, 83, 83,
- 83, 83, 85, 85, 86, 86, 87, 87, 87, 87,
- 88, 89, 89, 89, 89, 90, 90, 91, 91, 91,
- 92, 92, 92, 92, 93, 93, 94, 94, 95, 95,
- 95, 95, 95, 96, 96, 96, 97, 97, 98, 98,
- 99, 99, 101, 100, 100, 103, 102, 102, 104, 104,
- 104, 104, 105, 105, 106, 106, 107, 107, 107, 107,
- 107, 107, 108, 108, 108, 108, 108, 109, 109, 109,
- 109, 109, 109, 111, 110, 110, 110, 112, 110, 110,
- 110, 113, 110, 114, 110, 110, 115, 115, 116, 116,
- 116, 117, 117, 117, 118, 118, 118, 119, 119, 119,
- 120, 120, 121, 121, 122, 122, 123, 123, 124, 124,
- 125, 125, 126, 126, 126, 126, 126, 126, 126, 126,
- 126, 127, 127, 127, 128, 128, 129, 130, 131, 131,
- 132, 132, 132, 132, 134, 133, 135, 135, 136, 135,
- 135, 137, 138, 135, 139, 140, 135, 141, 142, 143,
- 135, 144, 135, 145, 135, 146, 135, 135, 135, 135,
- 135, 135, 135, 135, 135, 147, 135, 135, 148, 148,
- 149, 149, 150, 150, 151, 151, 152, 154, 153, 156,
- 155, 157, 157, 157, 158, 158, 159, 159, 159, 160,
- 160, 161, 161, 161, 161, 161, 162, 162
- };
-
- static const short yyr2[] = { 0,
- 0, 1, 0, 2, 0, 3, 1, 1, 5, 3,
- 4, 4, 2, 2, 2, 2, 1, 0, 0, 7,
- 4, 0, 0, 7, 4, 0, 0, 6, 3, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 3, 1, 2, 2, 4, 7, 2, 4,
- 2, 4, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 5, 3, 3, 1,
- 1, 1, 3, 3, 0, 4, 4, 4, 3, 3,
- 2, 2, 1, 2, 0, 1, 1, 1, 2, 2,
- 0, 4, 4, 2, 2, 2, 3, 0, 2, 2,
- 1, 1, 2, 2, 2, 3, 0, 2, 1, 1,
- 1, 4, 4, 1, 1, 1, 1, 3, 1, 3,
- 0, 4, 0, 5, 2, 0, 5, 2, 1, 3,
- 4, 1, 1, 3, 1, 1, 3, 3, 4, 3,
- 3, 1, 3, 4, 3, 3, 1, 3, 3, 3,
- 4, 3, 1, 0, 6, 4, 2, 0, 6, 4,
- 2, 0, 7, 0, 6, 2, 0, 1, 0, 3,
- 2, 3, 3, 1, 0, 1, 3, 1, 3, 2,
- 1, 3, 1, 3, 2, 2, 0, 1, 1, 2,
- 0, 2, 3, 3, 2, 3, 4, 3, 2, 3,
- 2, 1, 2, 2, 0, 1, 2, 0, 1, 2,
- 2, 5, 4, 4, 0, 6, 1, 2, 0, 4,
- 1, 0, 0, 7, 0, 0, 9, 0, 0, 0,
- 12, 0, 6, 0, 5, 0, 4, 2, 2, 2,
- 3, 6, 8, 10, 3, 0, 4, 1, 0, 1,
- 0, 1, 0, 1, 1, 3, 4, 0, 2, 0,
- 2, 2, 2, 2, 2, 2, 0, 1, 3, 1,
- 3, 2, 2, 2, 2, 2, 1, 3
- };
-
- static const short yydefact[] = { 3,
- 5, 0, 0, 0, 111, 102, 109, 101, 0, 0,
- 0, 0, 0, 17, 4, 8, 7, 0, 91, 91,
- 98, 110, 6, 15, 16, 30, 31, 164, 166, 169,
- 157, 169, 161, 0, 0, 153, 191, 0, 0, 119,
- 0, 14, 0, 104, 103, 13, 0, 98, 96, 0,
- 162, 0, 154, 0, 158, 83, 0, 70, 189, 71,
- 0, 0, 32, 34, 33, 0, 35, 36, 0, 37,
- 38, 0, 0, 39, 42, 44, 72, 187, 107, 0,
- 187, 0, 0, 10, 0, 29, 0, 260, 0, 0,
- 128, 142, 191, 0, 0, 117, 0, 135, 136, 0,
- 0, 97, 100, 114, 115, 99, 116, 183, 167, 181,
- 0, 174, 171, 156, 91, 0, 91, 169, 160, 169,
- 84, 0, 0, 49, 0, 51, 45, 0, 0, 0,
- 0, 46, 112, 0, 0, 0, 251, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 81, 82, 0, 0, 40, 0, 191, 258, 0,
- 185, 188, 105, 113, 190, 107, 186, 192, 150, 149,
- 120, 121, 0, 148, 0, 152, 0, 0, 27, 86,
- 0, 91, 91, 88, 126, 0, 0, 12, 0, 21,
- 0, 125, 260, 0, 11, 25, 0, 0, 168, 0,
- 167, 175, 170, 175, 0, 0, 9, 0, 0, 74,
- 73, 208, 0, 0, 43, 69, 68, 252, 0, 66,
- 65, 63, 64, 62, 61, 60, 58, 59, 53, 54,
- 55, 56, 57, 80, 79, 0, 41, 0, 195, 0,
- 199, 0, 201, 0, 258, 0, 108, 106, 0, 0,
- 277, 187, 187, 261, 0, 268, 270, 0, 151, 207,
- 0, 89, 90, 94, 0, 95, 0, 0, 141, 137,
- 118, 19, 123, 138, 140, 0, 23, 184, 182, 165,
- 0, 0, 178, 172, 176, 173, 155, 159, 50, 52,
- 211, 0, 76, 0, 47, 0, 77, 78, 194, 193,
- 0, 259, 0, 200, 196, 198, 0, 122, 264, 147,
- 191, 258, 272, 273, 274, 191, 275, 276, 262, 0,
- 263, 0, 0, 28, 209, 0, 0, 121, 132, 0,
- 129, 127, 0, 0, 139, 0, 163, 180, 0, 0,
- 0, 70, 111, 0, 222, 225, 0, 0, 0, 0,
- 0, 0, 0, 0, 249, 248, 0, 0, 205, 0,
- 217, 221, 202, 133, 167, 67, 266, 265, 197, 195,
- 260, 0, 195, 269, 271, 278, 210, 92, 93, 0,
- 20, 124, 24, 179, 177, 213, 0, 0, 0, 251,
- 0, 0, 236, 238, 239, 240, 0, 0, 250, 0,
- 246, 218, 0, 0, 214, 204, 203, 219, 0, 0,
- 146, 143, 145, 0, 130, 0, 0, 0, 0, 0,
- 0, 234, 0, 241, 245, 0, 0, 212, 0, 134,
- 48, 144, 131, 215, 0, 226, 228, 232, 0, 237,
- 0, 247, 220, 0, 223, 0, 251, 0, 235, 253,
- 0, 216, 0, 0, 0, 233, 0, 0, 254, 255,
- 242, 224, 0, 229, 0, 253, 0, 0, 0, 251,
- 0, 0, 243, 256, 227, 0, 257, 0, 230, 244,
- 0, 231, 0, 0, 0
- };
-
- static const short yydefgoto[] = { 483,
- 1, 2, 3, 15, 16, 17, 191, 333, 197, 336,
- 90, 261, 357, 72, 358, 236, 74, 75, 76, 130,
- 77, 179, 180, 18, 181, 182, 49, 183, 78, 163,
- 21, 106, 95, 39, 91, 96, 334, 40, 268, 364,
- 365, 172, 98, 313, 99, 22, 118, 120, 111, 50,
- 200, 52, 116, 284, 285, 109, 110, 80, 161, 81,
- 82, 162, 360, 404, 184, 292, 324, 361, 362, 444,
- 363, 429, 388, 453, 389, 446, 447, 470, 481, 448,
- 439, 423, 427, 400, 219, 458, 459, 460, 241, 242,
- 174, 175, 254, 302, 255, 256, 257, 258
- };
-
- static const short yypact[] = { 29,
- 42, 1365, 1365, 20,-32768,-32768,-32768,-32768, 65, 76,
- 78, 40, 106,-32768,-32768,-32768,-32768, 225, -7, 637,
- -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 90,-32768,
- 102,-32768, 108, 173, 1181,-32768,-32768, 225, 132,-32768,
- 315,-32768, 154,-32768,-32768,-32768, 225,-32768, 419, 138,
- -32768, 756,-32768, 1325,-32768,-32768, 23,-32768,-32768,-32768,
- 1225, 1247,-32768,-32768,-32768, 1269,-32768,-32768, 669,-32768,
- -32768, 1269, 166, 158, 1445, 282, 231, 111,-32768, 179,
- 946, 44, 250,-32768, 154,-32768, 196,-32768, 794, 971,
- 224,-32768,-32768, 154, 146,-32768, 942, -1, 3, 163,
- 360, 419,-32768,-32768,-32768,-32768,-32768, 241, 206,-32768,
- 138,-32768,-32768,-32768,-32768, 239, 519,-32768,-32768,-32768,
- -32768, 242, 669,-32768, 669,-32768,-32768, 226, 236, 219,
- 251,-32768,-32768, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
- 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
- 1269,-32768,-32768, 138, 138, 1269, 1269,-32768, 111, 816,
- -32768, 37, 262,-32768,-32768,-32768,-32768,-32768, 3,-32768,
- -32768, 260, 173,-32768, 1394,-32768, 244, 259,-32768, 460,
- 433, 267, 1422,-32768,-32768, 232, 255,-32768, 154,-32768,
- 971, 293,-32768, 838,-32768,-32768, 971, 1269, 138, 256,
- 206, 257,-32768, 257, 1329, 1348,-32768, 278, 283,-32768,
- -32768, 284, 290, 1122, 1445, 1445, 1445,-32768, 317, 1416,
- 1457, 1468, 1158, 1401, 541, 364, 641, 641, 334, 334,
- -32768,-32768,-32768,-32768,-32768, 296, 158, 291, 200, 285,
- -32768, 1411,-32768, 294,-32768, 860,-32768, 262, 46, 298,
- -32768, 168, 983,-32768, 303, 288,-32768, 124,-32768,-32768,
- 25,-32768,-32768,-32768, 154,-32768, 225, 772, -1,-32768,
- -32768,-32768,-32768,-32768,-32768, 297,-32768, 1445,-32768,-32768,
- 306, 1269, 335, 310,-32768, 310,-32768,-32768, 235, 235,
- -32768, 492,-32768, 772,-32768, 1269,-32768,-32768, 37,-32768,
- 327,-32768, 329,-32768,-32768,-32768, 323,-32768,-32768,-32768,
- -32768, 30, 112, 3,-32768,-32768, 3,-32768,-32768, 390,
- -32768, 386, 219,-32768,-32768, 193, 222, 116,-32768, 772,
- 1445,-32768, 25, 772,-32768, 25,-32768, 1445, 1269, 257,
- 97, 357, 359, 344,-32768,-32768, 345, 347, 1269, 380,
- 361, 367, 1203, 138, 408,-32768, 394, 372, 1035, 551,
- -32768, 413,-32768,-32768, 383, 978,-32768,-32768,-32768, 141,
- -32768, 882, 93,-32768,-32768,-32768,-32768,-32768,-32768, 2,
- -32768,-32768,-32768, 1445,-32768,-32768, 1269, 395, 1094, 1269,
- 1269, 430,-32768,-32768,-32768,-32768, 412, 414,-32768, 415,
- -32768,-32768, 610, 418,-32768,-32768,-32768,-32768, 691, 422,
- 112,-32768,-32768, 417,-32768, 750, 426, 1269, 467, 429,
- 431,-32768, 1094,-32768,-32768, 173, 1094,-32768, 1094,-32768,
- -32768,-32768,-32768,-32768, 447,-32768,-32768,-32768, 1094,-32768,
- 19,-32768,-32768, 1094,-32768, 454, 1269, 1094,-32768, 513,
- 468,-32768, 1094, 1269, 471,-32768, 474, 17, 469,-32768,
- -32768,-32768, 479,-32768, 1269, 513, 482, 513, 483, 1269,
- 485, 488,-32768,-32768,-32768, 489,-32768, 493,-32768,-32768,
- 1094,-32768, 545, 556,-32768
- };
-
- static const short yypgoto[] = {-32768,
- -32768,-32768,-32768, 554,-32768,-32768,-32768,-32768,-32768,-32768,
- -32768,-32768, -5,-32768, -35,-32768, 402, -31,-32768,-32768,
- -33, -104, 269, 18, -166, 6, 515, 10, -29, 398,
- 4, -120, 300, -36, -75, -65,-32768,-32768,-32768, -204,
- 237, -40, -54, 209, -11, -32,-32768,-32768,-32768,-32768,
- -185, 16,-32768, 387, 252, 486, 391, 92, -62, -8,
- -91, -144, 234,-32768, -171,-32768, -273, -109,-32768,-32768,
- -156,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
- -32768,-32768,-32768,-32768, -324, 133,-32768, 130, 358,-32768,
- -175,-32768,-32768,-32768, 362,-32768, 286,-32768
- };
-
-
- #define YYLAST 1515
-
-
- static const short yytable[] = { 73,
- 57, 186, 97, 29, 31, 33, 41, 19, 19, 263,
- 100, 20, 20, 262, 240, 281, 107, 274, 167, 171,
- 213, 192, 115, 48, 115, 323, 83, 121, -1, 124,
- 126, 121, 36, 129, 127, 101, 43, 47, 79, 187,
- 132, -2, 247, 117, 108, 117, 36, 54, 42, 466,
- 168, 450, 193, 177, 121, 79, 88, 79, 415, 381,
- 194, 416, 383, 332, 89, 420, 239, 26, 27, 107,
- 169, 467, 79, 451, 316, 24, 25, 122, 26, 27,
- 26, 27, 83, 312, 166, 212, 272, 129, 37, 129,
- 245, 160, 277, 34, 299, 36, 192, 38, 246, 168,
- 308, 218, 215, 216, 217, 108, 220, 221, 222, 223,
- 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
- 166, 238, 455, 271, 244, 28, 79, 247, 79, 382,
- 107, 269, 202, 205, 204, 206, 30, 316, 32, 249,
- 26, 27, 87, 36, 310, 476, 312, 168, 234, 235,
- 51, 325, 260, 386, 160, 158, 36, 92, 276, 35,
- 131, 283, 53, 283, 159, 371, 278, 240, 55, 88,
- 36, 310, 160, 372, 169, 115, 115, 89, 321, 410,
- 252, 56, 295, 322, 253, 311, 48, 84, 406, 315,
- 318, 85, 262, 108, 312, 412, 117, 117, 93, 265,
- 267, 188, 160, 407, 430, 189, 168, 94, 79, 79,
- 307, 430, 311, 377, 208, 107, 209, 134, 195, 370,
- 133, 312, 85, 325, 373, 299, 325, 36, 299, 160,
- 327, 406, 419, 164, 36, 92, 331, 58, 168, 121,
- 314, 317, 60, 56, 158, 61, 407, 252, 378, 173,
- 338, 253, 189, 159, 185, 328, 48, 295, 295, 36,
- 92, 160, 331, 62, 366, 199, 440, 104, 105, 37,
- 442, 198, 443, 9, 10, 11, 93, 379, 38, 212,
- 210, 85, 449, 67, 68, 94, 87, 452, 69, 282,
- 211, 456, 70, 71, 203, 294, 462, 207, 331, 283,
- 83, 93, 331, 88, 170, 214, 259, 384, 193, 270,
- 94, 89, 280, 392, 260, 86, 194, 397, -26, -26,
- -26, -26, 264, 273, 482, 252, -26, -26, -26, 253,
- 152, 153, 289, 154, 155, 156, 414, 290, 245, 300,
- 291, 87, -26, 157, 293, -121, 246, 320, 398, 296,
- 297, 417, 309, 298, 218, 421, 304, 319, 169, 335,
- 196, 169, 337, -22, -22, -22, -22, 339, 88, 340,
- -121, -22, -22, -22, -121, -26, 89, 331, 149, 150,
- 151, 367, 435, 368, 331, 369, 87, -22, 376, -30,
- -121, -31, 441, 5, 6, 7, 8, 387, 390, 374,
- 391, 9, 10, 11, 145, 146, 147, 148, 149, 150,
- 151, 218, 393, 88, 399, -121, 394, 13, 463, -121,
- -22, 89, 395, 103, 104, 105, 401, 402, 408, 471,
- 9, 10, 11, 178, 218, -87, -87, -87, -87, -87,
- -87, -87, 409, -87, -87, -87, -87, -87, 418, -87,
- -87, -87, -87, -87, -87, -87, -87, -87, -87, -87,
- -87, -87, 422, 5, 6, 7, 8, 424, 426, 425,
- -87, 9, 10, 11, 428, -87, -87, -87, 431, 432,
- 434, -87, -87, 436, 437, 438, -87, 13, -87, -87,
- -87, -87, 341, -87, 342, 343, 6, 7, 8, 60,
- 56, 445, 61, 9, 10, 11, 344, 454, 345, 346,
- 347, 348, 349, 350, 351, 352, 353, 354, 355, 13,
- 62, 457, 5, 461, 7, 165, 464, 465, 468, 63,
- 9, 10, 11, 469, 64, 65, 66, 473, 475, 477,
- 67, 68, 478, 479, 484, 69, 13, 356, 480, 70,
- 71, 178, 212, 342, 27, 485, 23, 237, 60, 56,
- 359, 61, 102, 248, 326, 344, 380, 345, 346, 347,
- 348, 349, 350, 351, 352, 353, 354, 355, 411, 62,
- 144, 145, 146, 147, 148, 149, 150, 151, 63, 279,
- 286, 385, 403, 64, 65, 66, 201, 474, 472, 67,
- 68, 0, 305, 303, 69, 375, 356, 405, 70, 71,
- 178, 212, 342, 27, 0, 0, 0, 60, 56, 0,
- 61, 0, 0, 0, 344, 0, 345, 346, 347, 348,
- 349, 350, 351, 352, 353, 354, 355, 0, 62, 0,
- 5, 44, 7, 45, 0, 0, 0, 63, 9, 10,
- 11, 0, 64, 65, 66, 0, 0, 0, 67, 68,
- 0, 0, 0, 69, 13, 356, -206, 70, 71, 128,
- 212, 58, 5, 0, 7, 59, 60, 56, 0, 61,
- 9, 10, 11, 147, 148, 149, 150, 151, 0, 0,
- 0, 329, 46, 58, 0, 0, 13, 62, 60, 56,
- 0, 61, 0, 0, 0, 0, 63, 0, 0, 0,
- 0, 64, 65, 66, 0, 0, 0, 67, 68, 62,
- 0, 0, 69, 0, 0, 0, 70, 71, 63, -75,
- 0, 0, 0, 64, 65, 66, 0, 0, 0, 67,
- 68, 0, 0, 0, 69, 0, 0, -168, 70, 71,
- 329, 330, 58, 0, 0, 0, 112, 60, 56, 5,
- 61, 7, 59, 0, 0, 0, 0, 9, 10, 11,
- 0, 0, 329, 0, 58, 0, 0, 0, 62, 60,
- 56, 0, 61, 13, 0, 0, 0, 63, 0, 0,
- 0, 0, 64, 65, 66, 0, 58, 0, 67, 68,
- 62, 60, 56, 69, 61, 0, 433, 70, 71, 63,
- 330, 113, 114, 0, 64, 65, 66, 0, 58, 0,
- 67, 68, 62, 60, 56, 69, 61, 0, 0, 70,
- 71, 63, 330, 0, 0, 0, 64, 65, 66, 0,
- 58, 0, 67, 68, 62, 60, 56, 69, 61, 0,
- 0, 70, 71, 63, 0, 0, 176, 0, 64, 65,
- 66, 0, 58, 0, 67, 68, 62, 60, 56, 69,
- 61, 0, 0, 70, 71, 63, 0, 0, 243, 0,
- 64, 65, 66, 0, 58, 0, 67, 68, 62, 60,
- 56, 69, 61, 0, 0, 70, 71, 63, 0, 0,
- 275, 0, 64, 65, 66, 0, 0, 0, 67, 68,
- 62, 0, 0, 69, 0, 0, 0, 70, 71, 63,
- 0, 0, 306, 0, 64, 65, 66, 0, 0, 0,
- 67, 68, 0, 0, 0, 69, 0, 0, 0, 70,
- 71, 0, 190, 0, 413, -18, -18, -18, -18, 5,
- 0, 7, 165, -18, -18, -18, 0, 9, 10, 11,
- 0, 0, 0, 0, 0, 0, 0, 0, 87, -18,
- 0, 178, -121, 13, 5, 6, 7, 8, 0, 0,
- 0, 0, 9, 10, 11, 36, 5, 44, 7, 45,
- 158, 0, 0, 0, 9, 10, 11, -121, 13, 159,
- 0, -121, -18, 0, 0, 0, 0, 160, 0, 137,
- 13, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 0, 0, 316, 0, 0,
- 0, -85, 0, 0, 0, 0, 312, 342, 343, 6,
- 7, 8, 60, 56, 160, 61, 9, 10, 11, 344,
- 0, 345, 346, 347, 348, 349, 350, 351, 352, 353,
- 354, 355, 13, 62, 0, 0, 0, 0, 0, 0,
- 0, 0, 63, 0, 0, 0, 0, 64, 65, 66,
- 0, 0, 0, 67, 68, 0, 0, 0, 69, 0,
- 356, 0, 70, 71, 0, 212, 342, 27, 0, 0,
- 0, 60, 56, 0, 61, 0, 0, 0, 344, 0,
- 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
- 355, 0, 62, 0, 58, 0, 0, 0, 0, 60,
- 56, 63, 61, 0, 0, 0, 64, 65, 66, 0,
- 0, 0, 67, 68, 0, 0, 0, 69, 0, 356,
- 62, 70, 71, 0, 212, 0, 0, 0, 0, 63,
- 0, 0, 0, 0, 64, 65, 66, 0, 0, 0,
- 67, 68, 0, 0, 0, 69, 0, 0, 0, 70,
- 71, 0, 294, 58, 5, 0, 7, 59, 60, 56,
- 0, 61, 9, 10, 11, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 58, 0, 0, 13, 62,
- 60, 56, 0, 61, 0, 0, 0, 0, 63, 0,
- 0, 0, 0, 64, 65, 66, 0, 58, 0, 67,
- 68, 62, 60, 56, 69, 61, 0, 0, 70, 71,
- 63, 0, 0, 0, 0, 64, 65, 66, 0, 58,
- 0, 67, 68, 62, 60, 56, 69, 61, 396, 0,
- 70, 71, 63, 0, 0, 0, 0, 64, 65, 66,
- 0, 58, 0, 67, 68, 62, 60, 56, 123, 61,
- 0, 0, 70, 71, 63, 0, 0, 0, 0, 64,
- 65, 66, 0, 0, 0, 67, 68, 62, 0, 0,
- 125, 0, 0, 0, 70, 71, 63, 0, 0, 0,
- 0, 64, 65, 66, 0, 0, 0, 67, 68, 0,
- 0, 0, 69, 0, 0, 112, 70, 71, 5, 112,
- 7, 59, 5, 0, 7, 59, 9, 10, 11, 0,
- 9, 10, 11, 0, 0, 0, 0, 0, 112, 0,
- 0, 5, 13, 7, 59, 0, 13, 0, 0, 9,
- 10, 11, 0, 0, 0, 4, 0, -91, 5, 6,
- 7, 8, 0, 0, 0, 13, 9, 10, 11, 0,
- 113, 119, 0, 0, 113, 287, 0, 0, 0, 0,
- 0, 12, 13, 0, 250, 0, 251, 5, 6, 7,
- 8, 0, 0, 113, 288, 9, 10, 11, 0, -91,
- 0, 301, 0, 0, 5, 6, 7, 8, -91, 0,
- 14, 13, 9, 10, 11, 5, 44, 7, 45, 0,
- 0, 0, 0, 9, 10, 11, 0, 0, 13, 143,
- 144, 145, 146, 147, 148, 149, 150, 151, -267, 13,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 0, 0, -267, 0, 0, 0, 0,
- 0, 0, 0, 0, 135, 136, 137, 266, 138, 139,
- 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
- 150, 151, 140, 141, 142, 143, 144, 145, 146, 147,
- 148, 149, 150, 151, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151
- };
-
- static const short yycheck[] = { 35,
- 34, 93, 43, 9, 10, 11, 18, 2, 3, 181,
- 47, 2, 3, 180, 159, 201, 49, 193, 81, 85,
- 130, 97, 52, 20, 54, 1, 38, 9, 0, 61,
- 62, 9, 3, 69, 66, 47, 19, 20, 35, 94,
- 72, 0, 163, 52, 50, 54, 3, 32, 56, 33,
- 7, 33, 54, 89, 9, 52, 54, 54, 57, 333,
- 62, 60, 336, 268, 62, 390, 158, 3, 4, 102,
- 82, 55, 69, 55, 45, 56, 57, 55, 3, 4,
- 3, 4, 94, 54, 81, 61, 191, 123, 45, 125,
- 54, 62, 197, 54, 239, 3, 172, 54, 62, 7,
- 55, 137, 134, 135, 136, 111, 138, 139, 140, 141,
- 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
- 117, 157, 447, 189, 160, 61, 123, 248, 125, 334,
- 163, 186, 115, 118, 117, 120, 61, 45, 61, 173,
- 3, 4, 27, 3, 4, 470, 54, 7, 154, 155,
- 61, 261, 56, 57, 62, 45, 3, 4, 194, 54,
- 69, 202, 61, 204, 54, 54, 198, 312, 61, 54,
- 3, 4, 62, 62, 186, 205, 206, 62, 55, 365,
- 175, 9, 214, 60, 175, 45, 183, 56, 360, 252,
- 253, 60, 359, 199, 54, 371, 205, 206, 45, 182,
- 183, 56, 62, 360, 409, 60, 7, 54, 205, 206,
- 246, 416, 45, 323, 123, 248, 125, 60, 56, 311,
- 55, 54, 60, 333, 316, 370, 336, 3, 373, 62,
- 267, 403, 389, 55, 3, 4, 268, 3, 7, 9,
- 252, 253, 8, 9, 45, 11, 403, 242, 56, 54,
- 282, 242, 60, 54, 31, 267, 253, 289, 290, 3,
- 4, 62, 294, 29, 296, 60, 423, 6, 7, 45,
- 427, 31, 429, 12, 13, 14, 45, 56, 54, 61,
- 55, 60, 439, 49, 50, 54, 27, 444, 54, 33,
- 55, 448, 58, 59, 56, 61, 453, 56, 330, 340,
- 312, 45, 334, 54, 55, 55, 63, 339, 54, 55,
- 54, 62, 57, 349, 56, 1, 62, 353, 4, 5,
- 6, 7, 56, 31, 481, 320, 12, 13, 14, 320,
- 49, 50, 55, 52, 53, 54, 372, 55, 54, 55,
- 57, 27, 28, 62, 55, 31, 62, 60, 354, 33,
- 55, 387, 55, 63, 390, 391, 63, 55, 370, 63,
- 1, 373, 57, 4, 5, 6, 7, 33, 54, 60,
- 56, 12, 13, 14, 60, 61, 62, 409, 45, 46,
- 47, 55, 418, 55, 416, 63, 27, 28, 3, 33,
- 31, 33, 426, 4, 5, 6, 7, 54, 54, 10,
- 54, 12, 13, 14, 41, 42, 43, 44, 45, 46,
- 47, 447, 33, 54, 7, 56, 56, 28, 454, 60,
- 61, 62, 56, 5, 6, 7, 33, 56, 16, 465,
- 12, 13, 14, 1, 470, 3, 4, 5, 6, 7,
- 8, 9, 60, 11, 12, 13, 14, 15, 54, 17,
- 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
- 28, 29, 33, 4, 5, 6, 7, 56, 54, 56,
- 38, 12, 13, 14, 57, 43, 44, 45, 57, 63,
- 55, 49, 50, 17, 56, 55, 54, 28, 56, 57,
- 58, 59, 1, 61, 3, 4, 5, 6, 7, 8,
- 9, 55, 11, 12, 13, 14, 15, 54, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 9, 4, 56, 6, 7, 56, 54, 60, 38,
- 12, 13, 14, 55, 43, 44, 45, 56, 56, 55,
- 49, 50, 55, 55, 0, 54, 28, 56, 56, 58,
- 59, 1, 61, 3, 4, 0, 3, 156, 8, 9,
- 292, 11, 48, 166, 265, 15, 330, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 370, 29,
- 40, 41, 42, 43, 44, 45, 46, 47, 38, 199,
- 204, 340, 359, 43, 44, 45, 111, 468, 466, 49,
- 50, -1, 245, 242, 54, 320, 56, 57, 58, 59,
- 1, 61, 3, 4, -1, -1, -1, 8, 9, -1,
- 11, -1, -1, -1, 15, -1, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, -1, 29, -1,
- 4, 5, 6, 7, -1, -1, -1, 38, 12, 13,
- 14, -1, 43, 44, 45, -1, -1, -1, 49, 50,
- -1, -1, -1, 54, 28, 56, 57, 58, 59, 1,
- 61, 3, 4, -1, 6, 7, 8, 9, -1, 11,
- 12, 13, 14, 43, 44, 45, 46, 47, -1, -1,
- -1, 1, 56, 3, -1, -1, 28, 29, 8, 9,
- -1, 11, -1, -1, -1, -1, 38, -1, -1, -1,
- -1, 43, 44, 45, -1, -1, -1, 49, 50, 29,
- -1, -1, 54, -1, -1, -1, 58, 59, 38, 61,
- -1, -1, -1, 43, 44, 45, -1, -1, -1, 49,
- 50, -1, -1, -1, 54, -1, -1, 57, 58, 59,
- 1, 61, 3, -1, -1, -1, 1, 8, 9, 4,
- 11, 6, 7, -1, -1, -1, -1, 12, 13, 14,
- -1, -1, 1, -1, 3, -1, -1, -1, 29, 8,
- 9, -1, 11, 28, -1, -1, -1, 38, -1, -1,
- -1, -1, 43, 44, 45, -1, 3, -1, 49, 50,
- 29, 8, 9, 54, 11, -1, 57, 58, 59, 38,
- 61, 56, 57, -1, 43, 44, 45, -1, 3, -1,
- 49, 50, 29, 8, 9, 54, 11, -1, -1, 58,
- 59, 38, 61, -1, -1, -1, 43, 44, 45, -1,
- 3, -1, 49, 50, 29, 8, 9, 54, 11, -1,
- -1, 58, 59, 38, -1, -1, 63, -1, 43, 44,
- 45, -1, 3, -1, 49, 50, 29, 8, 9, 54,
- 11, -1, -1, 58, 59, 38, -1, -1, 63, -1,
- 43, 44, 45, -1, 3, -1, 49, 50, 29, 8,
- 9, 54, 11, -1, -1, 58, 59, 38, -1, -1,
- 63, -1, 43, 44, 45, -1, -1, -1, 49, 50,
- 29, -1, -1, 54, -1, -1, -1, 58, 59, 38,
- -1, -1, 63, -1, 43, 44, 45, -1, -1, -1,
- 49, 50, -1, -1, -1, 54, -1, -1, -1, 58,
- 59, -1, 1, -1, 63, 4, 5, 6, 7, 4,
- -1, 6, 7, 12, 13, 14, -1, 12, 13, 14,
- -1, -1, -1, -1, -1, -1, -1, -1, 27, 28,
- -1, 1, 31, 28, 4, 5, 6, 7, -1, -1,
- -1, -1, 12, 13, 14, 3, 4, 5, 6, 7,
- 45, -1, -1, -1, 12, 13, 14, 56, 28, 54,
- -1, 60, 61, -1, -1, -1, -1, 62, -1, 32,
- 28, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, -1, -1, 45, -1, -1,
- -1, 61, -1, -1, -1, -1, 54, 3, 4, 5,
- 6, 7, 8, 9, 62, 11, 12, 13, 14, 15,
- -1, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, -1, -1, -1, -1, -1, -1,
- -1, -1, 38, -1, -1, -1, -1, 43, 44, 45,
- -1, -1, -1, 49, 50, -1, -1, -1, 54, -1,
- 56, -1, 58, 59, -1, 61, 3, 4, -1, -1,
- -1, 8, 9, -1, 11, -1, -1, -1, 15, -1,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, -1, 29, -1, 3, -1, -1, -1, -1, 8,
- 9, 38, 11, -1, -1, -1, 43, 44, 45, -1,
- -1, -1, 49, 50, -1, -1, -1, 54, -1, 56,
- 29, 58, 59, -1, 61, -1, -1, -1, -1, 38,
- -1, -1, -1, -1, 43, 44, 45, -1, -1, -1,
- 49, 50, -1, -1, -1, 54, -1, -1, -1, 58,
- 59, -1, 61, 3, 4, -1, 6, 7, 8, 9,
- -1, 11, 12, 13, 14, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 3, -1, -1, 28, 29,
- 8, 9, -1, 11, -1, -1, -1, -1, 38, -1,
- -1, -1, -1, 43, 44, 45, -1, 3, -1, 49,
- 50, 29, 8, 9, 54, 11, -1, -1, 58, 59,
- 38, -1, -1, -1, -1, 43, 44, 45, -1, 3,
- -1, 49, 50, 29, 8, 9, 54, 11, 56, -1,
- 58, 59, 38, -1, -1, -1, -1, 43, 44, 45,
- -1, 3, -1, 49, 50, 29, 8, 9, 54, 11,
- -1, -1, 58, 59, 38, -1, -1, -1, -1, 43,
- 44, 45, -1, -1, -1, 49, 50, 29, -1, -1,
- 54, -1, -1, -1, 58, 59, 38, -1, -1, -1,
- -1, 43, 44, 45, -1, -1, -1, 49, 50, -1,
- -1, -1, 54, -1, -1, 1, 58, 59, 4, 1,
- 6, 7, 4, -1, 6, 7, 12, 13, 14, -1,
- 12, 13, 14, -1, -1, -1, -1, -1, 1, -1,
- -1, 4, 28, 6, 7, -1, 28, -1, -1, 12,
- 13, 14, -1, -1, -1, 1, -1, 3, 4, 5,
- 6, 7, -1, -1, -1, 28, 12, 13, 14, -1,
- 56, 57, -1, -1, 56, 57, -1, -1, -1, -1,
- -1, 27, 28, -1, 1, -1, 3, 4, 5, 6,
- 7, -1, -1, 56, 57, 12, 13, 14, -1, 45,
- -1, 1, -1, -1, 4, 5, 6, 7, 54, -1,
- 56, 28, 12, 13, 14, 4, 5, 6, 7, -1,
- -1, -1, -1, 12, 13, 14, -1, -1, 28, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 55, 28,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, -1, -1, 55, -1, -1, -1, -1,
- -1, -1, -1, -1, 30, 31, 32, 56, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47
- };
- #define YYPURE 1
-
- #line 2 "bison.simple"
-
- /* Skeleton output parser for bison,
- copyright (C) 1984 Bob Corbett and Richard Stallman
-
- NO WARRANTY
-
- BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
- NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT
- WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
- RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"
- WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
- BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY
- AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
- DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
- CORRECTION.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
- STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
- WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE
- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
- OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
- USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
- DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR
- A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS
- PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
- DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
-
- GENERAL PUBLIC LICENSE TO COPY
-
- 1. You may copy and distribute verbatim copies of this source file
- as you receive it, in any medium, provided that you conspicuously and
- appropriately publish on each copy a valid copyright notice "Copyright
- (C) 1985 Free Software Foundation, Inc."; and include following the
- copyright notice a verbatim copy of the above disclaimer of warranty
- and of this License. You may charge a distribution fee for the
- physical act of transferring a copy.
-
- 2. You may modify your copy or copies of this source file or
- any portion of it, and copy and distribute such modifications under
- the terms of Paragraph 1 above, provided that you also do the following:
-
- a) cause the modified files to carry prominent notices stating
- that you changed the files and the date of any change; and
-
- b) cause the whole of any work that you distribute or publish,
- that in whole or in part contains or is a derivative of this
- program or any part thereof, to be licensed at no charge to all
- third parties on terms identical to those contained in this
- License Agreement (except that you may choose to grant more extensive
- warranty protection to some or all third parties, at your option).
-
- c) You may charge a distribution fee for the physical act of
- transferring a copy, and you may at your option offer warranty
- protection in exchange for a fee.
-
- Mere aggregation of another unrelated program with this program (or its
- derivative) on a volume of a storage or distribution medium does not bring
- the other program under the scope of these terms.
-
- 3. You may copy and distribute this program (or a portion or derivative
- of it, under Paragraph 2) in object code or executable form under the terms
- of Paragraphs 1 and 2 above provided that you also do one of the following:
-
- a) accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of
- Paragraphs 1 and 2 above; or,
-
- b) accompany it with a written offer, valid for at least three
- years, to give any third party free (except for a nominal
- shipping charge) a complete machine-readable copy of the
- corresponding source code, to be distributed under the terms of
- Paragraphs 1 and 2 above; or,
-
- c) accompany it with the information you received as to where the
- corresponding source code may be obtained. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form alone.)
-
- For an executable file, complete source code means all the source code for
- all modules it contains; but, as a special exception, it need not include
- source code for modules which are standard libraries that accompany the
- operating system on which the executable file runs.
-
- 4. You may not copy, sublicense, distribute or transfer this program
- except as expressly provided under this License Agreement. Any attempt
- otherwise to copy, sublicense, distribute or transfer this program is void and
- your rights to use the program under this License agreement shall be
- automatically terminated. However, parties who have received computer
- software programs from you with this License Agreement will not have
- their licenses terminated so long as such parties remain in full compliance.
-
- 5. If you wish to incorporate parts of this program into other free
- programs whose distribution conditions are different, write to the Free
- Software Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not yet
- worked out a simple rule that can be stated here, but we will often permit
- this. We will be guided by the two goals of preserving the free status of
- all derivatives of our free software and of promoting the sharing and reuse of
- software.
-
-
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding! */
-
- /* This is the parser code that is written into each bison parser
- when the %semantic_parser declaration is not specified in the grammar.
- It was written by Richard Stallman by simplifying the hairy parser
- used when %semantic_parser is specified. */
-
- /* Note: there must be only one dollar sign in this file.
- It is replaced by the list of actions, each action
- as one case of the switch. */
-
- #define yyerrok (yyerrstatus = 0)
- #define yyclearin (yychar = YYEMPTY)
- #define YYEMPTY -2
- #define YYEOF 0
- #define YYFAIL goto yyerrlab;
-
- #define YYTERROR 1
-
- #ifndef YYIMPURE
- #define YYLEX yylex()
- #endif
-
- #ifndef YYPURE
- #define YYLEX yylex(&yylval, &yylloc)
- #endif
-
- /* If nonreentrant, generate the variables here */
-
- #ifndef YYIMPURE
-
- int yychar; /* the lookahead symbol */
- YYSTYPE yylval; /* the semantic value of the */
- /* lookahead symbol */
-
- YYLTYPE yylloc; /* location data for the lookahead */
- /* symbol */
-
- int yynerr; /* number of parse errors so far */
-
- #ifdef YYDEBUG
- int yydebug = 0; /* nonzero means print parse trace */
- #endif
-
- #endif /* YYIMPURE */
-
-
- /* YYMAXDEPTH indicates the initial size of the parser's stacks */
-
- #ifndef YYMAXDEPTH
- #define YYMAXDEPTH 200
- #endif
-
- /* YYMAXLIMIT is the maximum size the stacks can grow to
- (effective only if the built-in stack extension method is used). */
-
- #ifndef YYMAXLIMIT
- #define YYMAXLIMIT 10000
- #endif
-
-
- #line 165 "bison.simple"
- int
- yyparse()
- {
- register int yystate;
- register int yyn;
- register short *yyssp;
- register YYSTYPE *yyvsp;
- YYLTYPE *yylsp;
- int yyerrstatus; /* number of tokens to shift before error messages enabled */
- int yychar1; /* lookahead token as an internal (translated) token number */
-
- short yyssa[YYMAXDEPTH]; /* the state stack */
- YYSTYPE yyvsa[YYMAXDEPTH]; /* the semantic value stack */
- YYLTYPE yylsa[YYMAXDEPTH]; /* the location stack */
-
- short *yyss = yyssa; /* refer to the stacks thru separate pointers */
- YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
- YYLTYPE *yyls = yylsa;
-
- int yymaxdepth = YYMAXDEPTH;
-
- #ifndef YYPURE
- int yychar;
- YYSTYPE yylval;
- YYLTYPE yylloc;
- #endif
-
- #ifdef YYDEBUG
- extern int yydebug;
- #endif
-
-
- YYSTYPE yyval; /* the variable used to return */
- /* semantic values from the action */
- /* routines */
-
- int yylen;
-
- #ifdef YYDEBUG
- if (yydebug)
- fprintf(stderr, "Starting parse\n");
- #endif
-
- yystate = 0;
- yyerrstatus = 0;
- yynerr = 0;
- yychar = YYEMPTY; /* Cause a token to be read. */
-
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack. */
-
- yyssp = yyss - 1;
- yyvsp = yyvs;
- yylsp = yyls;
-
- /* Push a new state, which is found in yystate . */
- /* In all cases, when you get here, the value and location stacks
- have just been pushed. so pushing a state here evens the stacks. */
- yynewstate:
-
- *++yyssp = yystate;
-
- if (yyssp >= yyss + yymaxdepth - 1)
- {
- /* Give user a chance to reallocate the stack */
- /* Use copies of these so that the &'s don't force the real ones into memory. */
- YYSTYPE *yyvs1 = yyvs;
- YYLTYPE *yyls1 = yyls;
- short *yyss1 = yyss;
-
- /* Get the current used size of the three stacks, in elements. */
- int size = yyssp - yyss + 1;
-
- #ifdef yyoverflow
- /* Each stack pointer address is followed by the size of
- the data in use in that stack, in bytes. */
- yyoverflow("parser stack overflow",
- &yyss1, size * sizeof (*yyssp),
- &yyvs1, size * sizeof (*yyvsp),
- &yyls1, size * sizeof (*yylsp),
- &yymaxdepth);
-
- yyss = yyss1; yyvs = yyvs1; yyls = yyls1;
- #else /* no yyoverflow */
- /* Extend the stack our own way. */
- if (yymaxdepth >= YYMAXLIMIT)
- yyerror("parser stack overflow");
- yymaxdepth *= 2;
- if (yymaxdepth > YYMAXLIMIT)
- yymaxdepth = YYMAXLIMIT;
- yyss = (short *) alloca (yymaxdepth * sizeof (*yyssp));
- bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
- yyvs = (YYSTYPE *) alloca (yymaxdepth * sizeof (*yyvsp));
- bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
- #ifdef YYLSP_NEEDED
- yyls = (YYLTYPE *) alloca (yymaxdepth * sizeof (*yylsp));
- bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
- #endif
- #endif /* no yyoverflow */
-
- yyssp = yyss + size - 1;
- yyvsp = yyvs + size - 1;
- #ifdef YYLSP_NEEDED
- yylsp = yyls + size - 1;
- #endif
-
- #ifdef YYDEBUG
- if (yydebug)
- fprintf(stderr, "Stack size increased to %d\n", yymaxdepth);
- #endif
-
- if (yyssp >= yyss + yymaxdepth - 1)
- YYERROR;
- }
-
- #ifdef YYDEBUG
- if (yydebug)
- fprintf(stderr, "Entering state %d\n", yystate);
- #endif
-
- /* Do appropriate processing given the current state. */
- /* Read a lookahead token if we need one and don't already have one. */
- yyresume:
-
- /* First try to decide what to do without reference to lookahead token. */
-
- yyn = yypact[yystate];
- if (yyn == YYFLAG)
- goto yydefault;
-
- /* Not known => get a lookahead token if don't already have one. */
-
- /* yychar is either YYEMPTY or YYEOF
- or a valid token in external form. */
-
- if (yychar == YYEMPTY)
- {
- #ifdef YYDEBUG
- if (yydebug)
- fprintf(stderr, "Reading a token: ");
- #endif
- yychar = YYLEX;
- }
-
- /* Convert token to internal form (in yychar1) for indexing tables with */
-
- if (yychar <= 0) /* This means end of input. */
- {
- yychar1 = 0;
- yychar = YYEOF; /* Don't call YYLEX any more */
-
- #ifdef YYDEBUG
- if (yydebug)
- fprintf(stderr, "Now at end of input.\n");
- #endif
- }
- else
- {
- yychar1 = YYTRANSLATE(yychar);
-
- #ifdef YYDEBUG
- if (yydebug)
- fprintf(stderr, "Next token is %d (%s)\n", yychar, yytname[yychar1]);
- #endif
- }
-
- yyn += yychar1;
- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
- goto yydefault;
-
- yyn = yytable[yyn];
-
- /* yyn is what to do for this token type in this state.
- Negative => reduce, -yyn is rule number.
- Positive => shift, yyn is new state.
- New state is final state => don't bother to shift,
- just return success.
- 0, or most negative number => error. */
-
- if (yyn < 0)
- {
- if (yyn == YYFLAG)
- goto yyerrlab;
- yyn = -yyn;
- goto yyreduce;
- }
- else if (yyn == 0)
- goto yyerrlab;
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
- /* Shift the lookahead token. */
-
- #ifdef YYDEBUG
- if (yydebug)
- fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
- #endif
-
- /* Discard the token being shifted unless it is eof. */
- if (yychar != YYEOF)
- yychar = YYEMPTY;
-
- *++yyvsp = yylval;
- #ifdef YYLSP_NEEDED
- *++yylsp = yylloc;
- #endif
-
- /* count tokens shifted since error; after three, turn off error status. */
- if (yyerrstatus) yyerrstatus--;
-
- yystate = yyn;
- goto yynewstate;
-
- /* Do the default action for the current state. */
- yydefault:
-
- yyn = yydefact[yystate];
- if (yyn == 0)
- goto yyerrlab;
-
- /* Do a reduction. yyn is the number of a rule to reduce with. */
- yyreduce:
- yylen = yyr2[yyn];
- yyval = yyvsp[1-yylen]; /* implement default value of the action */
-
- #ifdef YYDEBUG
- if (yydebug)
- {
- if (yylen == 1)
- fprintf (stderr, "Reducing 1 value via line %d, ",
- yyrline[yyn]);
- else
- fprintf (stderr, "Reducing %d values via line %d, ",
- yylen, yyrline[yyn]);
- }
- #endif
-
-
- switch (yyn) {
-
- case 3:
- #line 182 "parse.y"
- {yyval.ttype = NULL_TREE; ;
- break;}
- case 5:
- #line 183 "parse.y"
- {yyval.ttype = NULL_TREE; ;
- break;}
- case 9:
- #line 190 "parse.y"
- { if (pedantic)
- warning ("ANSI C forbids use of `asm' keyword");
- if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
- assemble_asm (yyvsp[-2].ttype); ;
- break;}
- case 10:
- #line 198 "parse.y"
- { if (pedantic)
- error ("ANSI C forbids data definition lacking type or storage class");
- else
- warning ("data definition lacks type or storage class"); ;
- break;}
- case 11:
- #line 203 "parse.y"
- {;
- break;}
- case 12:
- #line 205 "parse.y"
- {;
- break;}
- case 13:
- #line 207 "parse.y"
- { error ("empty declaration"); ;
- break;}
- case 14:
- #line 209 "parse.y"
- { shadow_tag (yyvsp[-1].ttype); ;
- break;}
- case 18:
- #line 217 "parse.y"
- { if (! start_function (yyvsp[-2].ttype, yyvsp[0].ttype))
- YYFAIL;
- reinit_parse_for_function (); ;
- break;}
- case 19:
- #line 221 "parse.y"
- { store_parm_decls (); ;
- break;}
- case 20:
- #line 223 "parse.y"
- { finish_function (); ;
- break;}
- case 21:
- #line 225 "parse.y"
- { ;
- break;}
- case 22:
- #line 227 "parse.y"
- { if (! start_function (yyvsp[-2].ttype, yyvsp[0].ttype))
- YYFAIL;
- reinit_parse_for_function (); ;
- break;}
- case 23:
- #line 231 "parse.y"
- { store_parm_decls (); ;
- break;}
- case 24:
- #line 233 "parse.y"
- { finish_function (); ;
- break;}
- case 25:
- #line 235 "parse.y"
- { ;
- break;}
- case 26:
- #line 237 "parse.y"
- { if (! start_function (0, yyvsp[0].ttype))
- YYFAIL;
- reinit_parse_for_function (); ;
- break;}
- case 27:
- #line 241 "parse.y"
- { store_parm_decls (); ;
- break;}
- case 28:
- #line 243 "parse.y"
- { finish_function (); ;
- break;}
- case 29:
- #line 245 "parse.y"
- { ;
- break;}
- case 32:
- #line 254 "parse.y"
- { yyval.code = ADDR_EXPR; ;
- break;}
- case 33:
- #line 256 "parse.y"
- { yyval.code = NEGATE_EXPR; ;
- break;}
- case 34:
- #line 258 "parse.y"
- { yyval.code = CONVERT_EXPR; ;
- break;}
- case 35:
- #line 260 "parse.y"
- { yyval.code = PREINCREMENT_EXPR; ;
- break;}
- case 36:
- #line 262 "parse.y"
- { yyval.code = PREDECREMENT_EXPR; ;
- break;}
- case 37:
- #line 264 "parse.y"
- { yyval.code = BIT_NOT_EXPR; ;
- break;}
- case 38:
- #line 266 "parse.y"
- { yyval.code = TRUTH_NOT_EXPR; ;
- break;}
- case 39:
- #line 270 "parse.y"
- { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
- break;}
- case 40:
- #line 275 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 42:
- #line 281 "parse.y"
- { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
- break;}
- case 43:
- #line 283 "parse.y"
- { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
- break;}
- case 45:
- #line 289 "parse.y"
- { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
- break;}
- case 46:
- #line 291 "parse.y"
- { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0); ;
- break;}
- case 47:
- #line 293 "parse.y"
- { tree type = groktypename (yyvsp[-2].ttype);
- yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ;
- break;}
- case 48:
- #line 296 "parse.y"
- { tree type = groktypename (yyvsp[-5].ttype);
- if (pedantic)
- warning ("ANSI C forbids constructor-expressions");
- yyval.ttype = digest_init (type, build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)), 0);
- if (TREE_CODE (type) == ARRAY_TYPE && TYPE_SIZE (type) == 0)
- {
- int failure = complete_array_type (type, yyval.ttype, 1);
- if (failure)
- abort ();
- }
- ;
- break;}
- case 49:
- #line 308 "parse.y"
- { if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
- && TREE_PACKED (TREE_OPERAND (yyvsp[0].ttype, 1)))
- error ("sizeof applied to a bit-field");
- yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
- break;}
- case 50:
- #line 313 "parse.y"
- { yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
- break;}
- case 51:
- #line 315 "parse.y"
- { if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
- && TREE_PACKED (TREE_OPERAND (yyvsp[0].ttype, 1)))
- error ("__alignof applied to a bit-field");
- yyval.ttype = c_alignof (TREE_TYPE (yyvsp[0].ttype)); ;
- break;}
- case 52:
- #line 320 "parse.y"
- { yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
- break;}
- case 53:
- #line 322 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 54:
- #line 324 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 55:
- #line 326 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 56:
- #line 328 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 57:
- #line 330 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 58:
- #line 332 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 59:
- #line 334 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 60:
- #line 336 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 61:
- #line 338 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 62:
- #line 340 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 63:
- #line 342 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 64:
- #line 344 "parse.y"
- { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 65:
- #line 346 "parse.y"
- { yyval.ttype = build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 66:
- #line 348 "parse.y"
- { yyval.ttype = build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 67:
- #line 350 "parse.y"
- { yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 68:
- #line 352 "parse.y"
- { yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype); ;
- break;}
- case 69:
- #line 354 "parse.y"
- { yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype); ;
- break;}
- case 70:
- #line 359 "parse.y"
- { yyval.ttype = lastiddecl;
- if (!yyval.ttype)
- {
- if (yychar == YYEMPTY)
- yychar = YYLEX;
- if (yychar == '(')
- yyval.ttype = implicitly_declare (yyvsp[0].ttype);
- else
- {
- if (IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) != error_mark_node)
- error ("undeclared variable `%s' (first use here)",
- IDENTIFIER_POINTER (yyvsp[0].ttype));
- yyval.ttype = error_mark_node;
- /* Prevent repeated error messages. */
- IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) = error_mark_node;
- }
- }
- if (TREE_CODE (yyval.ttype) == CONST_DECL)
- yyval.ttype = DECL_INITIAL (yyval.ttype);
- ;
- break;}
- case 72:
- #line 381 "parse.y"
- { yyval.ttype = combine_strings (yyvsp[0].ttype); ;
- break;}
- case 73:
- #line 383 "parse.y"
- { yyval.ttype = yyvsp[-1].ttype; ;
- break;}
- case 74:
- #line 385 "parse.y"
- { yyval.ttype = error_mark_node; ;
- break;}
- case 75:
- #line 387 "parse.y"
- { if (current_function_decl == 0)
- {
- error ("braced-group within expression allowed only inside a function");
- YYFAIL;
- }
- expand_start_stmt_expr (); ;
- break;}
- case 76:
- #line 394 "parse.y"
- { if (pedantic)
- warning ("ANSI C forbids braced-groups within expressions");
- yyval.ttype = get_last_expr ();
- expand_end_stmt_expr (); ;
- break;}
- case 77:
- #line 399 "parse.y"
- { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 78:
- #line 401 "parse.y"
- { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 79:
- #line 403 "parse.y"
- { yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 80:
- #line 405 "parse.y"
- { yyval.ttype = build_component_ref (build_indirect_ref (yyvsp[-2].ttype, "->"), yyvsp[0].ttype); ;
- break;}
- case 81:
- #line 407 "parse.y"
- { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
- break;}
- case 82:
- #line 409 "parse.y"
- { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
- break;}
- case 84:
- #line 416 "parse.y"
- { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 91:
- #line 434 "parse.y"
- { current_declspecs = yyvsp[0].ttype;
- yyval.itype = suspend_momentary (); ;
- break;}
- case 92:
- #line 440 "parse.y"
- { resume_momentary (yyvsp[-2].itype); ;
- break;}
- case 93:
- #line 442 "parse.y"
- { resume_momentary (yyvsp[-2].itype); ;
- break;}
- case 94:
- #line 444 "parse.y"
- { shadow_tag (yyvsp[-1].ttype); ;
- break;}
- case 95:
- #line 446 "parse.y"
- { warning ("empty declaration"); ;
- break;}
- case 96:
- #line 455 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 97:
- #line 457 "parse.y"
- { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
- break;}
- case 98:
- #line 461 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 99:
- #line 463 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 100:
- #line 465 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 101:
- #line 474 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 102:
- #line 476 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 103:
- #line 478 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 104:
- #line 480 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 105:
- #line 490 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 106:
- #line 492 "parse.y"
- { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
- break;}
- case 107:
- #line 496 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 108:
- #line 498 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 112:
- #line 509 "parse.y"
- { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype);
- if (pedantic)
- warning ("ANSI C forbids `typeof'"); ;
- break;}
- case 113:
- #line 513 "parse.y"
- { yyval.ttype = groktypename (yyvsp[-1].ttype);
- if (pedantic)
- warning ("ANSI C forbids `typeof'"); ;
- break;}
- case 121:
- #line 537 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 122:
- #line 539 "parse.y"
- { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
- yyval.ttype = yyvsp[-1].ttype;
- if (pedantic)
- warning ("ANSI C forbids use of `asm' keyword");
- ;
- break;}
- case 123:
- #line 548 "parse.y"
- { yyval.ttype = start_decl (yyvsp[-2].ttype, current_declspecs, 1); ;
- break;}
- case 124:
- #line 551 "parse.y"
- { finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-3].ttype); ;
- break;}
- case 125:
- #line 553 "parse.y"
- { tree d = start_decl (yyvsp[-1].ttype, current_declspecs, 0);
- finish_decl (d, NULL_TREE, yyvsp[0].ttype); ;
- break;}
- case 126:
- #line 559 "parse.y"
- { yyval.ttype = start_decl (yyvsp[-2].ttype, current_declspecs, 1); ;
- break;}
- case 127:
- #line 562 "parse.y"
- { finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-3].ttype); ;
- break;}
- case 128:
- #line 564 "parse.y"
- { tree d = start_decl (yyvsp[-1].ttype, current_declspecs, 0);
- finish_decl (d, NULL_TREE, yyvsp[0].ttype); ;
- break;}
- case 130:
- #line 571 "parse.y"
- { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype)); ;
- break;}
- case 131:
- #line 573 "parse.y"
- { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)); ;
- break;}
- case 132:
- #line 575 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 133:
- #line 582 "parse.y"
- { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
- break;}
- case 134:
- #line 584 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
- break;}
- case 137:
- #line 599 "parse.y"
- { yyval.ttype = yyvsp[-1].ttype; ;
- break;}
- case 138:
- #line 601 "parse.y"
- { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 139:
- #line 606 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 140:
- #line 608 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
- break;}
- case 141:
- #line 610 "parse.y"
- { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 143:
- #line 621 "parse.y"
- { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 144:
- #line 626 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 145:
- #line 628 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
- break;}
- case 146:
- #line 630 "parse.y"
- { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 148:
- #line 639 "parse.y"
- { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 149:
- #line 644 "parse.y"
- { yyval.ttype = yyvsp[-1].ttype; ;
- break;}
- case 150:
- #line 646 "parse.y"
- { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 151:
- #line 648 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 152:
- #line 650 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
- break;}
- case 154:
- #line 656 "parse.y"
- { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
- /* Start scope of tag before parsing components. */
- ;
- break;}
- case 155:
- #line 660 "parse.y"
- { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype);
- /* Really define the structure. */
- ;
- break;}
- case 156:
- #line 664 "parse.y"
- { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
- yyvsp[-1].ttype); ;
- break;}
- case 157:
- #line 667 "parse.y"
- { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
- break;}
- case 158:
- #line 669 "parse.y"
- { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
- break;}
- case 159:
- #line 671 "parse.y"
- { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
- break;}
- case 160:
- #line 673 "parse.y"
- { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
- yyvsp[-1].ttype); ;
- break;}
- case 161:
- #line 676 "parse.y"
- { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
- break;}
- case 162:
- #line 678 "parse.y"
- { yyvsp[0].itype = suspend_momentary ();
- yyval.ttype = start_enum (yyvsp[-1].ttype); ;
- break;}
- case 163:
- #line 681 "parse.y"
- { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
- resume_momentary (yyvsp[-4].itype); ;
- break;}
- case 164:
- #line 684 "parse.y"
- { yyvsp[0].itype = suspend_momentary ();
- yyval.ttype = start_enum (NULL_TREE); ;
- break;}
- case 165:
- #line 687 "parse.y"
- { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
- resume_momentary (yyvsp[-4].itype); ;
- break;}
- case 166:
- #line 690 "parse.y"
- { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
- break;}
- case 169:
- #line 699 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 170:
- #line 701 "parse.y"
- { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
- break;}
- case 171:
- #line 703 "parse.y"
- { if (pedantic)
- warning ("extra semicolon in struct or union specified"); ;
- break;}
- case 172:
- #line 718 "parse.y"
- { yyval.ttype = yyvsp[0].ttype;
- resume_momentary (yyvsp[-1].itype); ;
- break;}
- case 173:
- #line 721 "parse.y"
- { yyval.ttype = yyvsp[0].ttype;
- resume_momentary (yyvsp[-1].itype); ;
- break;}
- case 174:
- #line 724 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 175:
- #line 729 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 177:
- #line 732 "parse.y"
- { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 178:
- #line 737 "parse.y"
- { yyval.ttype = grokfield (input_filename, lineno, yyvsp[0].ttype, current_declspecs, NULL_TREE); ;
- break;}
- case 179:
- #line 739 "parse.y"
- { yyval.ttype = grokfield (input_filename, lineno, yyvsp[-2].ttype, current_declspecs, yyvsp[0].ttype); ;
- break;}
- case 180:
- #line 741 "parse.y"
- { yyval.ttype = grokfield (input_filename, lineno, NULL_TREE, current_declspecs, yyvsp[0].ttype); ;
- break;}
- case 182:
- #line 752 "parse.y"
- { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
- break;}
- case 183:
- #line 758 "parse.y"
- { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 184:
- #line 760 "parse.y"
- { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 185:
- #line 765 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 186:
- #line 767 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 187:
- #line 772 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 189:
- #line 778 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 190:
- #line 780 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 191:
- #line 785 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 192:
- #line 787 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
- break;}
- case 193:
- #line 792 "parse.y"
- { yyval.ttype = yyvsp[-1].ttype; ;
- break;}
- case 194:
- #line 795 "parse.y"
- { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 195:
- #line 797 "parse.y"
- { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 196:
- #line 799 "parse.y"
- { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 197:
- #line 801 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 198:
- #line 803 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
- break;}
- case 199:
- #line 805 "parse.y"
- { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
- break;}
- case 200:
- #line 807 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
- break;}
- case 201:
- #line 809 "parse.y"
- { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
- break;}
- case 208:
- #line 831 "parse.y"
- { pushlevel (0);
- clear_last_expr ();
- push_momentary ();
- expand_start_bindings (0); ;
- break;}
- case 212:
- #line 846 "parse.y"
- { expand_end_bindings (getdecls (), 1);
- poplevel (1, 1, 0);
- pop_momentary (); ;
- break;}
- case 213:
- #line 850 "parse.y"
- { expand_end_bindings (getdecls (), 0);
- poplevel (0, 0, 0);
- pop_momentary (); ;
- break;}
- case 214:
- #line 854 "parse.y"
- { expand_end_bindings (getdecls (), 0);
- poplevel (0, 0, 0);
- pop_momentary (); ;
- break;}
- case 215:
- #line 861 "parse.y"
- { emit_note (input_filename, lineno);
- expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0); ;
- break;}
- case 218:
- #line 869 "parse.y"
- { emit_note (input_filename, lineno);
- expand_expr_stmt (yyvsp[-1].ttype);
- clear_momentary (); ;
- break;}
- case 219:
- #line 873 "parse.y"
- { expand_start_else (); ;
- break;}
- case 220:
- #line 875 "parse.y"
- { expand_end_else (); ;
- break;}
- case 221:
- #line 877 "parse.y"
- { expand_end_cond (); ;
- break;}
- case 222:
- #line 879 "parse.y"
- { emit_note (input_filename, lineno);
- expand_start_loop (1); ;
- break;}
- case 223:
- #line 882 "parse.y"
- { emit_note (input_filename, lineno);
- expand_exit_loop_if_false (truthvalue_conversion (yyvsp[-1].ttype)); ;
- break;}
- case 224:
- #line 885 "parse.y"
- { expand_end_loop (); ;
- break;}
- case 225:
- #line 887 "parse.y"
- { emit_note (input_filename, lineno);
- expand_start_loop_continue_elsewhere (1); ;
- break;}
- case 226:
- #line 890 "parse.y"
- { expand_loop_continue_here (); ;
- break;}
- case 227:
- #line 892 "parse.y"
- { emit_note (input_filename, lineno);
- expand_exit_loop_if_false (truthvalue_conversion (yyvsp[-2].ttype));
- expand_end_loop ();
- clear_momentary (); ;
- break;}
- case 228:
- #line 898 "parse.y"
- { emit_note (input_filename, lineno);
- if (yyvsp[-1].ttype) expand_expr_stmt (yyvsp[-1].ttype);
- expand_start_loop_continue_elsewhere (1); ;
- break;}
- case 229:
- #line 902 "parse.y"
- { emit_note (input_filename, lineno);
- if (yyvsp[-1].ttype)
- expand_exit_loop_if_false (truthvalue_conversion (yyvsp[-1].ttype)); ;
- break;}
- case 230:
- #line 908 "parse.y"
- { push_momentary ();
- yyvsp[0].itype = lineno; ;
- break;}
- case 231:
- #line 911 "parse.y"
- { emit_note (input_filename, yyvsp[-2].itype);
- expand_loop_continue_here ();
- if (yyvsp[-3].ttype)
- expand_expr_stmt (yyvsp[-3].ttype);
- pop_momentary ();
- expand_end_loop (); ;
- break;}
- case 232:
- #line 918 "parse.y"
- { emit_note (input_filename, lineno);
- c_expand_start_case (yyvsp[-1].ttype);
- /* Don't let the tree nodes for $3 be discarded by
- clear_momentary during the parsing of the next stmt. */
- push_momentary (); ;
- break;}
- case 233:
- #line 924 "parse.y"
- { expand_end_case ();
- pop_momentary (); ;
- break;}
- case 234:
- #line 927 "parse.y"
- { register tree value = fold (yyvsp[-1].ttype);
- register tree label
- = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-
- if (TREE_CODE (value) != INTEGER_CST
- && value != error_mark_node)
- {
- error ("case label does not reduce to an integer constant");
- value = error_mark_node;
- }
- else
- /* Promote char or short to int. */
- value = default_conversion (value);
- if (value != error_mark_node)
- {
- int success = pushcase (value, label);
- if (success == 1)
- error ("case label not within a switch statement");
- else if (success == 2)
- error ("duplicate case value");
- else if (success == 3)
- warning ("case value out of range");
- }
- ;
- break;}
- case 236:
- #line 953 "parse.y"
- {
- register tree label
- = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
- int success = pushcase (NULL_TREE, label);
- if (success == 1)
- error ("default label not within a switch statement");
- else if (success == 2)
- error ("multiple default labels in one switch");
- ;
- break;}
- case 238:
- #line 964 "parse.y"
- { emit_note (input_filename, lineno);
- if ( ! expand_exit_something ())
- error ("break statement not within loop or switch"); ;
- break;}
- case 239:
- #line 968 "parse.y"
- { emit_note (input_filename, lineno);
- if (! expand_continue_loop ())
- error ("continue statement not within a loop"); ;
- break;}
- case 240:
- #line 972 "parse.y"
- { emit_note (input_filename, lineno);
- c_expand_return (NULL_TREE); ;
- break;}
- case 241:
- #line 975 "parse.y"
- { emit_note (input_filename, lineno);
- c_expand_return (yyvsp[-1].ttype); ;
- break;}
- case 242:
- #line 978 "parse.y"
- { if (pedantic)
- warning ("ANSI C forbids use of `asm' keyword");
- if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
- expand_asm (yyvsp[-2].ttype); ;
- break;}
- case 243:
- #line 984 "parse.y"
- { if (pedantic)
- warning ("ANSI C forbids use of `asm' keyword");
- if (TREE_CHAIN (yyvsp[-4].ttype)) yyvsp[-4].ttype = combine_strings (yyvsp[-4].ttype);
- c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
- yyvsp[-6].ttype == ridpointers[(int)RID_VOLATILE]); ;
- break;}
- case 244:
- #line 991 "parse.y"
- { if (pedantic)
- warning ("ANSI C forbids use of `asm' keyword");
- if (TREE_CHAIN (yyvsp[-6].ttype)) yyvsp[-6].ttype = combine_strings (yyvsp[-6].ttype);
- c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
- yyvsp[-8].ttype == ridpointers[(int)RID_VOLATILE]); ;
- break;}
- case 245:
- #line 997 "parse.y"
- { tree decl;
- emit_note (input_filename, lineno);
- decl = lookup_label (yyvsp[-1].ttype);
- expand_goto (decl); ;
- break;}
- case 246:
- #line 1002 "parse.y"
- { tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
- if (label)
- expand_label (label); ;
- break;}
- case 249:
- #line 1011 "parse.y"
- { emit_note (input_filename, lineno); ;
- break;}
- case 250:
- #line 1013 "parse.y"
- { emit_note (input_filename, lineno); ;
- break;}
- case 251:
- #line 1018 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 253:
- #line 1025 "parse.y"
- { yyval.ttype = NULL_TREE; ;
- break;}
- case 256:
- #line 1032 "parse.y"
- { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
- break;}
- case 257:
- #line 1037 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
- break;}
- case 258:
- #line 1043 "parse.y"
- { pushlevel (0); ;
- break;}
- case 259:
- #line 1045 "parse.y"
- { yyval.ttype = yyvsp[0].ttype; poplevel (0, 0, 0); ;
- break;}
- case 260:
- #line 1051 "parse.y"
- { pushlevel (0); ;
- break;}
- case 261:
- #line 1053 "parse.y"
- { yyval.ttype = yyvsp[0].ttype; poplevel (0, 0, 0); ;
- break;}
- case 263:
- #line 1059 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
- break;}
- case 264:
- #line 1061 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
- break;}
- case 266:
- #line 1067 "parse.y"
- { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
- break;}
- case 267:
- #line 1073 "parse.y"
- { yyval.ttype = get_parm_info (0); ;
- break;}
- case 268:
- #line 1075 "parse.y"
- { yyval.ttype = get_parm_info (1); ;
- break;}
- case 269:
- #line 1077 "parse.y"
- { yyval.ttype = get_parm_info (0); ;
- break;}
- case 270:
- #line 1082 "parse.y"
- { push_parm_decl (yyvsp[0].ttype); ;
- break;}
- case 271:
- #line 1084 "parse.y"
- { push_parm_decl (yyvsp[0].ttype); ;
- break;}
- case 272:
- #line 1091 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype) ; ;
- break;}
- case 273:
- #line 1093 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype) ; ;
- break;}
- case 274:
- #line 1095 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 275:
- #line 1097 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype) ; ;
- break;}
- case 276:
- #line 1099 "parse.y"
- { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
- break;}
- case 277:
- #line 1105 "parse.y"
- { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
- break;}
- case 278:
- #line 1107 "parse.y"
- { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
- break;}
- }
- /* the action file gets copied in in place of this dollarsign */
- #line 303 "bison.simple"
-
- yyvsp -= yylen;
- yyssp -= yylen;
- #ifdef YYLSP_NEEDED
- yylsp -= yylen;
- #endif
-
- #ifdef YYDEBUG
- if (yydebug)
- {
- short *ssp1 = yyss - 1;
- fprintf (stderr, "state stack now", yyssp-yyss);
- while (ssp1 != yyssp)
- fprintf (stderr, " %d", *++ssp1);
- fprintf (stderr, "\n");
- }
- #endif
-
- *++yyvsp = yyval;
-
- #ifdef YYLSP_NEEDED
- yylsp++;
- if (yylen == 0)
- {
- yylsp->first_line = yylloc.first_line;
- yylsp->first_column = yylloc.first_column;
- yylsp->last_line = (yylsp-1)->last_line;
- yylsp->last_column = (yylsp-1)->last_column;
- yylsp->text = 0;
- }
- else
- {
- yylsp->last_line = (yylsp+yylen-1)->last_line;
- yylsp->last_column = (yylsp+yylen-1)->last_column;
- }
- #endif
-
- /* Now "shift" the result of the reduction.
- Determine what state that goes to,
- based on the state we popped back to
- and the rule number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
- if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTBASE];
-
- goto yynewstate;
-
- yyerrlab: /* here on detecting error */
-
- if (! yyerrstatus)
- /* If not already recovering from an error, report this error. */
- {
- ++yynerr;
- yyerror("parse error");
- }
-
- if (yyerrstatus == 3)
- {
- /* if just tried and failed to reuse lookahead token after an error, discard it. */
-
- /* return failure if at end of input */
- if (yychar == YYEOF)
- YYERROR;
-
- #ifdef YYDEBUG
- if (yydebug)
- fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
- #endif
-
- yychar = YYEMPTY;
- }
-
- /* Else will try to reuse lookahead token
- after shifting the error token. */
-
- yyerrstatus = 3; /* Each real token shifted decrements this */
-
- goto yyerrhandle;
-
- yyerrdefault: /* current state does not do anything special for the error token. */
-
- #if 0
- /* This is wrong; only states that explicitly want error tokens
- should shift them. */
- yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
- if (yyn) goto yydefault;
- #endif
-
- yyerrpop: /* pop the current state because it cannot handle the error token */
-
- if (yyssp == yyss) YYERROR;
- yyvsp--;
- yystate = *--yyssp;
- #ifdef YYLSP_NEEDED
- yylsp--;
- #endif
-
- #ifdef YYDEBUG
- if (yydebug)
- {
- short *ssp1 = yyss - 1;
- fprintf (stderr, "Error: state stack now", yyssp-yyss);
- while (ssp1 != yyssp)
- fprintf (stderr, " %d", *++ssp1);
- fprintf (stderr, "\n");
- }
- #endif
-
- yyerrhandle:
-
- yyn = yypact[yystate];
- if (yyn == YYFLAG)
- goto yyerrdefault;
-
- yyn += YYTERROR;
- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
- goto yyerrdefault;
-
- yyn = yytable[yyn];
- if (yyn < 0)
- {
- if (yyn == YYFLAG)
- goto yyerrpop;
- yyn = -yyn;
- goto yyreduce;
- }
- else if (yyn == 0)
- goto yyerrpop;
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
- #ifdef YYDEBUG
- if (yydebug)
- fprintf(stderr, "Shifting error token, ");
- #endif
-
- *++yyvsp = yylval;
- #ifdef YYLSP_NEEDED
- *++yylsp = yylloc;
- #endif
-
- yystate = yyn;
- goto yynewstate;
- }
- #line 1109 "parse.y"
-
-
- /* Return something to represent absolute declarators containing a *.
- TARGET is the absolute declarator that the * contains.
- TYPE_QUALS is a list of modifiers such as const or volatile
- to apply to the pointer type, represented as identifiers.
-
- We return an INDIRECT_REF whose "contents" are TARGET
- and whose type is the modifier list. */
-
- static tree
- make_pointer_declarator (type_quals, target)
- tree type_quals, target;
- {
- return build (INDIRECT_REF, type_quals, target);
- }
-
- /* Given a chain of STRING_CST nodes,
- concatenate them into one STRING_CST
- and give it a suitable array-of-chars data type. */
-
- static tree
- combine_strings (strings)
- tree strings;
- {
- register tree value, t;
- register int length = 1;
- int wide_length = 0;
- int wide_flag = 0;
-
- if (TREE_CHAIN (strings))
- {
- /* More than one in the chain, so concatenate. */
- register char *p, *q;
-
- /* Don't include the \0 at the end of each substring,
- except for the last one.
- Count wide strings and ordinary strings separately. */
- for (t = strings; t; t = TREE_CHAIN (t))
- {
- if (TREE_TYPE (t) == int_array_type_node)
- {
- wide_length += (TREE_STRING_LENGTH (t) - 1);
- wide_flag = 1;
- }
- else
- length += (TREE_STRING_LENGTH (t) - 1);
- }
-
- /* If anything is wide, the non-wides will be converted,
- which makes them take more space. */
- if (wide_flag)
- length = length * UNITS_PER_WORD + wide_length;
-
- p = (char *) oballoc (length);
-
- /* Copy the individual strings into the new combined string.
- If the combined string is wide, convert the chars to ints
- for any individual strings that are not wide. */
-
- q = p;
- for (t = strings; t; t = TREE_CHAIN (t))
- {
- int len = TREE_STRING_LENGTH (t) - 1;
- if ((TREE_TYPE (t) == int_array_type_node) == wide_flag)
- {
- bcopy (TREE_STRING_POINTER (t), q, len);
- q += len;
- }
- else
- {
- int i;
- for (i = 0; i < len; i++)
- ((int *) q)[i] = TREE_STRING_POINTER (t)[i];
- q += len * UNITS_PER_WORD;
- }
- }
- *q = 0;
-
- value = make_node (STRING_CST);
- TREE_STRING_POINTER (value) = p;
- TREE_STRING_LENGTH (value) = length;
- TREE_LITERAL (value) = 1;
- }
- else
- {
- value = strings;
- length = TREE_STRING_LENGTH (value);
- if (TREE_TYPE (value) == int_array_type_node)
- wide_flag = 1;
- }
-
- TREE_TYPE (value)
- = build_array_type (wide_flag ? integer_type_node : char_type_node,
- make_index_type (build_int_2 (length - 1, 0)));
- TREE_LITERAL (value) = 1;
- TREE_STATIC (value) = 1;
- return value;
- }
-
- int lineno; /* current line number in file being read */
-
- FILE *finput; /* input file.
- Normally a pipe from the preprocessor. */
-
- /* lexical analyzer */
-
- static int maxtoken; /* Current nominal length of token buffer */
- static char *token_buffer; /* Pointer to token buffer.
- Actual allocated length is maxtoken + 2. */
-
- #define MAXRESERVED 9
-
- /* frw[I] is index in `reswords' of the first word whose length is I;
- frw[I+1] is one plus the index of the last word whose length is I.
- The length of frw must be MAXRESERVED + 2 so there is an element
- at MAXRESERVED+1 for the case I == MAXRESERVED. */
-
- static char frw[MAXRESERVED+2] =
- { 0, 0, 0, 2, 5, 13, 19, 29, 31, 35, 36 };
-
- /* Table of reserved words. */
-
- struct resword { char *name; short token; enum rid rid;};
-
- #define NORID RID_UNUSED
-
- static struct resword reswords[]
- = {{"if", IF, NORID},
- {"do", DO, NORID},
- {"int", TYPESPEC, RID_INT},
- {"for", FOR, NORID},
- {"asm", ASM, NORID},
- {"case", CASE, NORID},
- {"char", TYPESPEC, RID_CHAR},
- {"auto", SCSPEC, RID_AUTO},
- {"goto", GOTO, NORID},
- {"else", ELSE, NORID},
- {"long", TYPESPEC, RID_LONG},
- {"void", TYPESPEC, RID_VOID},
- {"enum", ENUM, NORID},
- {"float", TYPESPEC, RID_FLOAT},
- {"short", TYPESPEC, RID_SHORT},
- {"union", UNION, NORID},
- {"break", BREAK, NORID},
- {"while", WHILE, NORID},
- {"const", TYPE_QUAL, RID_CONST},
- {"double", TYPESPEC, RID_DOUBLE},
- {"static", SCSPEC, RID_STATIC},
- {"extern", SCSPEC, RID_EXTERN},
- {"struct", STRUCT, NORID},
- {"return", RETURN, NORID},
- {"sizeof", SIZEOF, NORID},
- {"typeof", TYPEOF, NORID},
- {"switch", SWITCH, NORID},
- {"signed", TYPESPEC, RID_SIGNED},
- {"inline", SCSPEC, RID_INLINE},
- {"typedef", SCSPEC, RID_TYPEDEF},
- {"default", DEFAULT, NORID},
- {"unsigned", TYPESPEC, RID_UNSIGNED},
- {"continue", CONTINUE, NORID},
- {"register", SCSPEC, RID_REGISTER},
- {"volatile", TYPE_QUAL, RID_VOLATILE},
- {"__alignof", ALIGNOF, NORID}};
-
- /* The elements of `ridpointers' are identifier nodes
- for the reserved type names and storage classes.
- It is indexed by a RID_... value. */
-
- tree ridpointers[(int) RID_MAX];
-
- int check_newline ();
-
- void
- init_lex ()
- {
- extern char *malloc ();
-
- /* Start it at 0, because check_newline is called at the very beginning
- and will increment it to 1. */
- lineno = 0;
-
- maxtoken = 40;
- token_buffer = malloc (maxtoken + 2);
- ridpointers[(int) RID_INT] = get_identifier ("int");
- ridpointers[(int) RID_CHAR] = get_identifier ("char");
- ridpointers[(int) RID_VOID] = get_identifier ("void");
- ridpointers[(int) RID_FLOAT] = get_identifier ("float");
- ridpointers[(int) RID_DOUBLE] = get_identifier ("double");
- ridpointers[(int) RID_SHORT] = get_identifier ("short");
- ridpointers[(int) RID_LONG] = get_identifier ("long");
- ridpointers[(int) RID_UNSIGNED] = get_identifier ("unsigned");
- ridpointers[(int) RID_SIGNED] = get_identifier ("signed");
- ridpointers[(int) RID_INLINE] = get_identifier ("inline");
- ridpointers[(int) RID_CONST] = get_identifier ("const");
- ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile");
- ridpointers[(int) RID_AUTO] = get_identifier ("auto");
- ridpointers[(int) RID_STATIC] = get_identifier ("static");
- ridpointers[(int) RID_EXTERN] = get_identifier ("extern");
- ridpointers[(int) RID_TYPEDEF] = get_identifier ("typedef");
- ridpointers[(int) RID_REGISTER] = get_identifier ("register");
- }
-
- static void
- reinit_parse_for_function ()
- {
- }
-
- /* If C is not whitespace, return C.
- Otherwise skip whitespace and return first nonwhite char read. */
-
- static int
- skip_white_space (c)
- register int c;
- {
- register int inside;
-
- for (;;)
- {
- switch (c)
- {
- case '/':
- c = getc (finput);
- if (c != '*')
- {
- ungetc (c, finput);
- return '/';
- }
-
- c = getc (finput);
-
- inside = 1;
- while (inside)
- {
- if (c == '*')
- {
- while (c == '*')
- c = getc (finput);
-
- if (c == '/')
- {
- inside = 0;
- c = getc (finput);
- }
- }
- else if (c == '\n')
- {
- lineno++;
- c = getc (finput);
- }
- else if (c == EOF)
- {
- error ("unterminated comment");
- break;
- }
- else
- c = getc (finput);
- }
-
- break;
-
- case '\n':
- c = check_newline ();
- break;
-
- case ' ':
- case '\t':
- case '\f':
- case '\r':
- case '\b':
- c = getc (finput);
- break;
-
- case '\\':
- c = getc (finput);
- if (c == '\n')
- lineno++;
- else
- error ("stray '\\' in program");
- c = getc (finput);
- break;
-
- default:
- return (c);
- }
- }
- }
-
-
-
- /* Make the token buffer longer, preserving the data in it.
- P should point to just beyond the last valid character in the old buffer.
- The value we return is a pointer to the new buffer
- at a place corresponding to P. */
-
- static char *
- extend_token_buffer (p)
- char *p;
- {
- int offset = p - token_buffer;
-
- maxtoken = maxtoken * 2 + 10;
- token_buffer = (char *) realloc (token_buffer, maxtoken + 2);
- if (token_buffer == 0)
- fatal ("virtual memory exceeded");
-
- return token_buffer + offset;
- }
-
- /* At the beginning of a line, increment the line number
- and handle a #line directive immediately following.
- Return first nonwhite char of first non-# line following. */
-
- int
- check_newline ()
- {
- register int c;
- register int token;
-
- while (1)
- {
- lineno++;
-
- /* Read first nonwhite char on the line. */
-
- c = getc (finput);
- while (c == ' ' || c == '\t')
- c = getc (finput);
-
- if (c != '#')
- {
- /* If not #, return it so caller will use it. */
- return c;
- }
-
- /* Read first nonwhite char after the `#'. */
-
- c = getc (finput);
- while (c == ' ' || c == '\t')
- c = getc (finput);
-
- /* If a letter follows, then if the word here is `line', skip
- it and ignore it; otherwise, ignore the line, with an error
- if the word isn't `pragma'. */
-
- if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
- {
- if (c == 'p')
- {
- if (getc (finput) == 'r'
- && getc (finput) == 'a'
- && getc (finput) == 'g'
- && getc (finput) == 'm'
- && getc (finput) == 'a'
- && ((c = getc (finput)) == ' ' || c == '\t'))
- goto noerror;
- }
-
- else if (c == 'l')
- {
- if (getc (finput) == 'i'
- && getc (finput) == 'n'
- && getc (finput) == 'e'
- && ((c = getc (finput)) == ' ' || c == '\t'))
- goto linenum;
- }
-
- error ("undefined or invalid # directive");
- noerror:
-
- while ((c = getc (finput)) && c != '\n');
-
- continue;
- }
-
- linenum:
- /* Here we have either `#line' or `# <nonletter>'.
- In either case, it should be a line number; a digit should follow. */
-
- while (c == ' ' || c == '\t')
- c = getc (finput);
-
- /* If the # is the only nonwhite char on the line,
- just ignore it. Check the new newline. */
- if (c == '\n')
- continue;
-
- /* Something follows the #; read a token. */
-
- ungetc (c, finput);
- token = yylex ();
-
- if (token == CONSTANT
- && TREE_CODE (yylval.ttype) == INTEGER_CST)
- {
- /* subtract one, because it is the following line that
- gets the specified number */
-
- int l = TREE_INT_CST_LOW (yylval.ttype) - 1;
-
- /* Is this the last nonwhite stuff on the line? */
- c = getc (finput);
- while (c == ' ' || c == '\t')
- c = getc (finput);
- if (c == '\n')
- {
- /* No more: store the line number and check following line. */
- lineno = l;
- continue;
- }
- ungetc (c, finput);
-
- /* More follows: it must be a string constant (filename). */
-
- token = yylex ();
- if (token != STRING || TREE_CODE (yylval.ttype) != STRING_CST)
- {
- error ("invalid #line");
- return getc (finput);
- }
-
- input_filename
- = (char *) permalloc (TREE_STRING_LENGTH (yylval.ttype) + 1);
- strcpy (input_filename, TREE_STRING_POINTER (yylval.ttype));
- lineno = l;
-
- if (main_input_filename == 0)
- main_input_filename = input_filename;
- }
- else
- error ("invalid #line");
-
- /* skip the rest of this line. */
- while ((c = getc (finput)) != '\n');
- }
- }
-
- #define isalnum(char) ((char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || (char >= '0' && char <= '9'))
- #define isdigit(char) (char >= '0' && char <= '9')
- #define ENDFILE -1 /* token that represents end-of-file */
-
-
- static int
- readescape ()
- {
- register int c = getc (finput);
- register int count, code;
-
- switch (c)
- {
- case 'x':
- code = 0;
- count = 0;
- while (1)
- {
- c = getc (finput);
- if (!(c >= 'a' && c <= 'f')
- && !(c >= 'A' && c <= 'F')
- && !(c >= '0' && c <= '9'))
- {
- ungetc (c, finput);
- break;
- }
- code *= 16;
- if (c >= 'a' && c <= 'f')
- code += c - 'a' + 10;
- if (c >= 'A' && c <= 'F')
- code += c - 'A' + 10;
- if (c >= '0' && c <= '9')
- code += c - '0';
- count++;
- }
- if (count == 0)
- error ("\\x used with no following hex digits");
- return code;
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7':
- code = 0;
- count = 0;
- while ((c <= '7') && (c >= '0') && (count++ < 3))
- {
- code = (code * 8) + (c - '0');
- c = getc (finput);
- }
- ungetc (c, finput);
- return code;
-
- case '\\': case '\'': case '"':
- return c;
-
- case '\n':
- lineno++;
- return -1;
-
- case 'n':
- return TARGET_NEWLINE;
-
- case 't':
- return TARGET_TAB;
-
- case 'r':
- return TARGET_CR;
-
- case 'f':
- return TARGET_FF;
-
- case 'b':
- return TARGET_BS;
-
- case 'a':
- return TARGET_BELL;
-
- case 'v':
- return TARGET_VT;
-
- case 'E':
- return 033;
-
- case '?':
- return c;
- }
- if (c >= 040 && c <= 0177)
- warning ("unknown escape sequence `\\%c'", c);
- else
- warning ("unknown escape sequence: `\\' followed by char code 0x%x", c);
- return c;
- }
-
- void
- yyerror (string)
- char *string;
- {
- char buf[200];
-
- strcpy (buf, string);
-
- /* We can't print string and character constants well
- because the token_buffer contains the result of processing escapes. */
- if (token_buffer[0] == 0)
- strcat (buf, " at end of input");
- else if (token_buffer[0] == '"')
- strcat (buf, " before string constant");
- else if (token_buffer[0] == '\'')
- strcat (buf, " before character constant");
- else
- strcat (buf, " before `%s'");
-
- error (buf, token_buffer);
- }
-
- static int nextchar = -1;
-
- static int
- yylex ()
- {
- register int c;
- register char *p;
- register int value;
- int wide_flag = 0;
-
- if (nextchar >= 0)
- c = nextchar, nextchar = -1;
- else
- c = getc (finput);
-
- /* Effectively do c = skip_white_space (c)
- but do it faster in the usual cases. */
- while (1)
- switch (c)
- {
- case ' ':
- case '\t':
- case '\f':
- case '\r':
- case '\b':
- c = getc (finput);
- break;
-
- case '\n':
- case '/':
- case '\\':
- c = skip_white_space (c);
- default:
- goto found_nonwhite;
- }
- found_nonwhite:
-
- token_buffer[0] = c;
- token_buffer[1] = 0;
-
- /* yylloc.first_line = lineno; */
-
- switch (c)
- {
- case EOF:
- token_buffer[0] = 0;
- value = ENDFILE;
- break;
-
- case '$':
- if (dollars_in_ident)
- goto letter;
- return '$';
-
- case 'L':
- /* Capital L may start a wide-string or wide-character constant. */
- {
- register int c = getc (finput);
- if (c == '\'')
- {
- wide_flag = 1;
- goto char_constant;
- }
- if (c == '"')
- {
- wide_flag = 1;
- goto string_constant;
- }
- ungetc (c, finput);
- }
-
- case 'A': case 'B': case 'C': case 'D': case 'E':
- case 'F': case 'G': case 'H': case 'I': case 'J':
- case 'K': case 'M': case 'N': case 'O':
- case 'P': case 'Q': case 'R': case 'S': case 'T':
- case 'U': case 'V': case 'W': case 'X': case 'Y':
- case 'Z':
- case 'a': case 'b': case 'c': case 'd': case 'e':
- case 'f': case 'g': case 'h': case 'i': case 'j':
- case 'k': case 'l': case 'm': case 'n': case 'o':
- case 'p': case 'q': case 'r': case 's': case 't':
- case 'u': case 'v': case 'w': case 'x': case 'y':
- case 'z':
- case '_':
- letter:
- p = token_buffer;
- while (isalnum (c) || c == '_' || c == '$')
- {
- if (p >= token_buffer + maxtoken)
- p = extend_token_buffer (p);
- if (c == '$' && ! dollars_in_ident)
- break;
-
- *p++ = c;
- c = getc (finput);
- }
-
- *p = 0;
- nextchar = c;
-
- value = IDENTIFIER;
- yylval.itype = 0;
-
- /* Try to recognize a keyword. */
-
- if (p - token_buffer <= MAXRESERVED)
- {
- register int lim = frw [p - token_buffer + 1];
- register int i = frw[p - token_buffer];
- register struct resword *p = &reswords[i];
-
- for (; i < lim; i++, p++)
- if (p->name[0] == token_buffer[0]
- && !strcmp (p->name, token_buffer))
- {
- if (p->rid)
- yylval.ttype = ridpointers[(int) p->rid];
- if ((! flag_no_asm
- || ((int) p->token != ASM
- && (int) p->token != TYPEOF
- && strcmp (p->name, "inline")))
- /* -ftraditional means don't recognize
- typeof, const, volatile, signed or inline. */
- && (! flag_traditional
- || ((int) p->token != TYPE_QUAL
- && (int) p->token != TYPEOF
- && strcmp (p->name, "signed")
- && strcmp (p->name, "inline"))))
- value = (int) p->token;
- break;
- }
- }
-
- /* If we did not find a keyword, look for an identifier
- (or a typename). */
-
- if (value == IDENTIFIER)
- {
- yylval.ttype = get_identifier (token_buffer);
- lastiddecl = lookup_name (yylval.ttype);
-
- if (lastiddecl != 0 && TREE_CODE (lastiddecl) == TYPE_DECL)
- value = TYPENAME;
- }
-
- break;
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case '.':
- {
- int base = 10;
- int count = 0;
- int largest_digit = 0;
- int numdigits = 0;
- /* for multi-precision arithmetic,
- we store only 8 live bits in each short,
- giving us 64 bits of reliable precision */
- short shorts[8];
- int floatflag = 0; /* Set 1 if we learn this is a floating constant */
-
- for (count = 0; count < 8; count++)
- shorts[count] = 0;
-
- p = token_buffer;
- *p++ = c;
-
- if (c == '0')
- {
- *p++ = (c = getc (finput));
- if ((c == 'x') || (c == 'X'))
- {
- base = 16;
- *p++ = (c = getc (finput));
- }
- else
- {
- base = 8;
- numdigits++;
- }
- }
-
- /* Read all the digits-and-decimal-points. */
-
- while (c == '.'
- || (isalnum (c) && (c != 'l') && (c != 'L')
- && (c != 'u') && (c != 'U')
- && (!floatflag || ((c != 'f') && (c != 'F')))))
- {
- if (c == '.')
- {
- if (base == 16)
- error ("floating constant may not be in radix 16");
- floatflag = 1;
- base = 10;
- *p++ = c = getc (finput);
- /* Accept '.' as the start of a floating-point number
- only when it is followed by a digit.
- Otherwise, unread the following non-digit
- and use the '.' as a structural token. */
- if (p == token_buffer + 2 && !isdigit (c))
- {
- if (c == '.')
- {
- c = getc (finput);
- if (c == '.')
- {
- *p++ = c;
- *p = 0;
- return ELLIPSIS;
- }
- error ("parse error at `..'");
- }
- ungetc (c, finput);
- token_buffer[1] = 0;
- value = '.';
- goto done;
- }
- }
- else
- {
- /* It is not a decimal point.
- It should be a digit (perhaps a hex digit). */
-
- if (isdigit (c))
- {
- c = c - '0';
- }
- else if (base <= 10)
- {
- if ((c&~040) == 'E')
- {
- base = 10;
- floatflag = 1;
- break; /* start of exponent */
- }
- error ("nondigits in number and not hexadecimal");
- c = 0;
- }
- else if (c >= 'a')
- {
- c = c - 'a' + 10;
- }
- else
- {
- c = c - 'A' + 10;
- }
- if (c >= largest_digit)
- largest_digit = c;
- numdigits++;
-
- for (count = 0; count < 8; count++)
- {
- (shorts[count] *= base);
- if (count)
- {
- shorts[count] += (shorts[count-1] >> 8);
- shorts[count-1] &= (1<<8)-1;
- }
- else shorts[0] += c;
- }
-
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = (c = getc (finput));
- }
- }
-
- if (numdigits == 0)
- error ("numeric constant with no digits");
-
- if (largest_digit >= base)
- error ("numeric constant contains digits beyond the radix");
-
- /* Remove terminating char from the token buffer and delimit the string */
- *--p = 0;
-
- if (floatflag)
- {
- tree type = double_type_node;
- char f_seen = 0;
- char l_seen = 0;
- double value;
-
- /* Read explicit exponent if any, and put it in tokenbuf. */
-
- if ((c == 'e') || (c == 'E'))
- {
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = c;
- c = getc (finput);
- if ((c == '+') || (c == '-'))
- {
- *p++ = c;
- c = getc (finput);
- }
- if (! isdigit (c))
- error ("floating constant exponent has no digits");
- while (isdigit (c))
- {
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = c;
- c = getc (finput);
- }
- }
-
- *p = 0;
- errno = 0;
- value = atof (token_buffer);
- #ifdef ERANGE
- if (errno == ERANGE)
- error ("floating point number exceeds range of `double'");
- #endif
-
- /* Read the suffixes to choose a data type. */
- while (1)
- {
- if (c == 'f' || c == 'F')
- {
- if (f_seen)
- error ("two `f's in floating constant");
- f_seen = 1;
- type = float_type_node;
- }
- else if (c == 'l' || c == 'L')
- {
- if (l_seen)
- error ("two `l's in floating constant");
- l_seen = 1;
- type = long_double_type_node;
- }
- else
- {
- if (isalnum (c))
- {
- error ("garbage at end of number");
- while (isalnum (c))
- {
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = c;
- c = getc (finput);
- }
- }
- break;
- }
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = c;
- c = getc (finput);
- }
-
- /* Create a node with determined type and value. */
- yylval.ttype = build_real (type, value);
-
- ungetc (c, finput);
- *p = 0;
- }
- else
- {
- tree type;
- int spec_unsigned = 0;
- int spec_long = 0;
-
- while (1)
- {
- if (c == 'u' || c == 'U')
- {
- if (spec_unsigned)
- error ("two `u's in integer constant");
- spec_unsigned = 1;
- }
- else if (c == 'l' || c == 'L')
- {
- if (spec_long)
- error ("two `l's in integer constant");
- spec_long = 1;
- }
- else
- {
- if (isalnum (c))
- {
- error ("garbage at end of number");
- while (isalnum (c))
- {
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = c;
- c = getc (finput);
- }
- }
- break;
- }
- if (p >= token_buffer + maxtoken - 3)
- p = extend_token_buffer (p);
- *p++ = c;
- c = getc (finput);
- }
-
- ungetc (c, finput);
-
- if (shorts[7] | shorts[6] | shorts[5] | shorts[4])
- warning ("integer constant out of range");
-
- /* This is simplified by the fact that our constant
- is always positive. */
- yylval.ttype
- = build_int_2 ((shorts[3]<<24) + (shorts[2]<<16) + (shorts[1]<<8) + shorts[0],
- 0);
-
- if (!spec_long && !spec_unsigned
- && int_fits_type_p (yylval.ttype, integer_type_node))
- type = integer_type_node;
-
- else if (!spec_long && base != 10
- && int_fits_type_p (yylval.ttype, unsigned_type_node))
- type = unsigned_type_node;
-
- else if (!spec_unsigned
- && int_fits_type_p (yylval.ttype, long_integer_type_node))
- type = long_integer_type_node;
-
- else
- {
- type = long_unsigned_type_node;
- if (! int_fits_type_p (yylval.ttype, long_unsigned_type_node))
- warning ("integer constant out of range");
- }
- TREE_TYPE (yylval.ttype) = type;
- }
-
- value = CONSTANT; break;
- }
-
- case '\'':
- char_constant:
- c = getc (finput);
- {
- register int code = 0;
-
- tryagain:
-
- if (c == '\\')
- {
- c = readescape ();
- if (c < 0)
- goto tryagain;
- }
- else if (c == '\n')
- {
- if (pedantic)
- warning ("ANSI C forbids newline in character constant");
- lineno++;
- }
-
- code = c;
- token_buffer[1] = c;
- token_buffer[2] = '\'';
- token_buffer[3] = 0;
-
- c = getc (finput);
- if (c != '\'')
- error ("malformatted character constant");
-
- /* If char type is signed, sign-extend the constant. */
- if (TREE_UNSIGNED (char_type_node)
- || ((code >> (BITS_PER_UNIT - 1)) & 1) == 0)
- yylval.ttype = build_int_2 (code & ((1 << BITS_PER_UNIT) - 1), 0);
- else
- yylval.ttype = build_int_2 (code | ((-1) << BITS_PER_UNIT), -1);
-
- TREE_TYPE (yylval.ttype) = integer_type_node;
- value = CONSTANT; break;
- }
-
- case '"':
- string_constant:
- {
- c = getc (finput);
- p = token_buffer + 1;
-
- while (c != '"')
- {
- if (c == '\\')
- {
- c = readescape ();
- if (c < 0)
- goto skipnewline;
- }
- else if (c == '\n')
- {
- if (pedantic)
- warning ("ANSI C forbids newline in string constant");
- lineno++;
- }
-
- if (p == token_buffer + maxtoken)
- p = extend_token_buffer (p);
- *p++ = c;
-
- skipnewline:
- c = getc (finput);
- }
-
- *p = 0;
-
- if (wide_flag)
- {
- /* If this is a L"..." wide-string, convert each char
- to an int, making a vector of ints. */
- int *widebuf = (int *) alloca (p - token_buffer);
- char *p1 = token_buffer + 1;
- for (; p1 == p; p1++)
- widebuf[p1 - token_buffer - 1] = *p1;
- yylval.ttype = build_string ((p - token_buffer) * sizeof (int),
- widebuf);
- TREE_TYPE (yylval.ttype) = int_array_type_node;
- }
- else
- {
- yylval.ttype = build_string (p - token_buffer, token_buffer + 1);
- TREE_TYPE (yylval.ttype) = char_array_type_node;
- }
-
- *p++ = '"';
- *p = 0;
-
- value = STRING; break;
- }
-
- case '+':
- case '-':
- case '&':
- case '|':
- case '<':
- case '>':
- case '*':
- case '/':
- case '%':
- case '^':
- case '!':
- case '=':
- {
- register int c1;
-
- combine:
-
- switch (c)
- {
- case '+':
- yylval.code = PLUS_EXPR; break;
- case '-':
- yylval.code = MINUS_EXPR; break;
- case '&':
- yylval.code = BIT_AND_EXPR; break;
- case '|':
- yylval.code = BIT_IOR_EXPR; break;
- case '*':
- yylval.code = MULT_EXPR; break;
- case '/':
- yylval.code = TRUNC_DIV_EXPR; break;
- case '%':
- yylval.code = TRUNC_MOD_EXPR; break;
- case '^':
- yylval.code = BIT_XOR_EXPR; break;
- case LSHIFT:
- yylval.code = LSHIFT_EXPR; break;
- case RSHIFT:
- yylval.code = RSHIFT_EXPR; break;
- case '<':
- yylval.code = LT_EXPR; break;
- case '>':
- yylval.code = GT_EXPR; break;
- }
-
- token_buffer[1] = c1 = getc (finput);
- token_buffer[2] = 0;
-
- if (c1 == '=')
- {
- switch (c)
- {
- case '<':
- value = ARITHCOMPARE; yylval.code = LE_EXPR; goto done;
- case '>':
- value = ARITHCOMPARE; yylval.code = GE_EXPR; goto done;
- case '!':
- value = EQCOMPARE; yylval.code = NE_EXPR; goto done;
- case '=':
- value = EQCOMPARE; yylval.code = EQ_EXPR; goto done;
- }
- value = ASSIGN; goto done;
- }
- else if (c == c1)
- switch (c)
- {
- case '+':
- value = PLUSPLUS; goto done;
- case '-':
- value = MINUSMINUS; goto done;
- case '&':
- value = ANDAND; goto done;
- case '|':
- value = OROR; goto done;
- case '<':
- c = LSHIFT;
- goto combine;
- case '>':
- c = RSHIFT;
- goto combine;
- }
- else if ((c == '-') && (c1 == '>'))
- { value = POINTSAT; goto done; }
- ungetc (c1, finput);
- token_buffer[1] = 0;
-
- if ((c == '<') || (c == '>'))
- value = ARITHCOMPARE;
- else value = c;
- goto done;
- }
-
- default:
- value = c;
- }
-
- done:
- /* yylloc.last_line = lineno; */
-
- return value;
- }
-