diff options
Diffstat (limited to 'awkgram.c')
-rw-r--r-- | awkgram.c | 1385 |
1 files changed, 805 insertions, 580 deletions
@@ -156,10 +156,14 @@ #include "awk.h" +#if defined(__STDC__) && __STDC__ < 1 /* VMS weirdness, maybe elsewhere */ +#define signed /**/ +#endif + #define CAN_FREE TRUE #define DONT_FREE FALSE -#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__ +#ifdef CAN_USE_STDARG_H static void yyerror(const char *m, ...) ATTRIBUTE_PRINTF_1; #else static void yyerror(); /* va_alist */ @@ -190,6 +194,9 @@ enum defref { FUNC_DEFINE, FUNC_USE }; static void func_use P((const char *name, enum defref how)); static void check_funcs P((void)); +static ssize_t read_one_line P((int fd, void *buffer, size_t count)); +static int one_line_close P((int fd)); + static int want_regexp; /* lexical scanning kludge */ static int can_return; /* parsing kludge */ static int begin_or_end_rule = FALSE; /* parsing kludge */ @@ -247,7 +254,7 @@ static char builtin_func[] = "@builtin"; #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 110 "awkgram.y" +#line 117 "awkgram.y" typedef union YYSTYPE { long lval; AWKNUM fval; @@ -256,8 +263,8 @@ typedef union YYSTYPE { char *sval; NODE *(*ptrval) P((void)); } YYSTYPE; -/* Line 190 of yacc.c. */ -#line 261 "y.tab.c" +/* Line 185 of yacc.c. */ +#line 268 "y.tab.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -269,7 +276,7 @@ typedef union YYSTYPE { /* Line 213 of yacc.c. */ -#line 273 "y.tab.c" +#line 280 "y.tab.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE @@ -369,16 +376,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 5 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1008 +#define YYLAST 1088 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 67 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 53 +#define YYNNTS 56 /* YYNRULES -- Number of rules. */ -#define YYNRULES 155 +#define YYNRULES 165 /* YYNRULES -- Number of states. */ -#define YYNSTATES 293 +#define YYNSTATES 308 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -439,11 +446,12 @@ static const unsigned short int yyprhs[] = 274, 275, 278, 279, 281, 283, 287, 289, 292, 296, 297, 299, 300, 302, 304, 308, 310, 313, 317, 321, 325, 329, 333, 337, 341, 345, 351, 353, 355, 357, - 360, 362, 364, 366, 368, 370, 373, 379, 381, 384, - 386, 390, 394, 398, 402, 406, 410, 414, 419, 422, - 425, 428, 432, 437, 442, 444, 449, 451, 454, 457, - 459, 461, 464, 467, 468, 470, 472, 477, 480, 483, - 486, 488, 489, 491, 493, 495 + 360, 362, 364, 366, 368, 370, 372, 375, 377, 381, + 385, 389, 393, 397, 401, 405, 408, 411, 417, 422, + 426, 430, 434, 438, 442, 446, 448, 451, 455, 460, + 465, 467, 472, 474, 477, 480, 482, 484, 487, 490, + 491, 493, 495, 500, 502, 506, 508, 510, 511, 514, + 517, 519, 520, 522, 524, 526 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -452,74 +460,78 @@ static const yysigned_char yyrhs[] = 68, 0, -1, 97, 69, 97, -1, -1, 69, 70, -1, 69, 1, -1, 71, 72, -1, 71, 81, -1, 75, 72, -1, -1, 104, -1, 104, 48, 104, -1, - 16, -1, 17, -1, 113, 80, 114, 116, 97, -1, + 16, -1, 17, -1, 116, 80, 117, 119, 97, -1, 4, -1, 3, -1, 74, -1, 42, -1, 43, -1, - -1, 34, 76, 73, 60, 99, 115, 97, -1, -1, + -1, 34, 76, 73, 60, 99, 118, 97, -1, -1, 79, 78, 5, -1, 54, -1, 45, -1, -1, 80, - 82, -1, 80, 1, -1, 96, -1, 117, 97, -1, - 117, 97, -1, 113, 80, 114, -1, 95, -1, 22, - 60, 104, 115, 97, 113, 87, 97, 114, -1, 25, - 60, 104, 115, 97, 82, -1, 26, 97, 82, 25, - 60, 104, 115, 97, -1, 27, 60, 4, 37, 4, - 115, 97, 82, -1, 27, 60, 86, 117, 97, 104, - 117, 97, 86, 115, 97, 82, -1, 27, 60, 86, - 117, 97, 117, 97, 86, 115, 97, 82, -1, 28, + 82, -1, 80, 1, -1, 96, -1, 120, 97, -1, + 120, 97, -1, 116, 80, 117, -1, 95, -1, 22, + 60, 104, 118, 97, 116, 87, 97, 117, -1, 25, + 60, 104, 118, 97, 82, -1, 26, 97, 82, 25, + 60, 104, 118, 97, -1, 27, 60, 4, 37, 4, + 118, 97, 82, -1, 27, 60, 86, 120, 97, 104, + 120, 97, 86, 118, 97, 82, -1, 27, 60, 86, + 120, 97, 120, 97, 86, 118, 97, 82, -1, 28, 81, -1, 29, 81, -1, 32, 81, -1, 36, 81, -1, 33, 101, 81, -1, -1, 20, 83, 101, 81, -1, 84, 81, -1, -1, 91, 85, 92, 93, -1, 21, 4, 62, 103, 63, -1, 21, 4, -1, 21, 60, 4, 61, -1, 104, -1, -1, 84, -1, 88, -1, -1, 88, 89, -1, 88, 1, -1, 23, 90, - 118, 97, 80, -1, 24, 118, 97, 80, -1, 7, + 121, 97, 80, -1, 24, 121, 97, 80, -1, 7, -1, 52, 7, -1, 51, 7, -1, 8, -1, 77, - -1, 30, -1, 31, -1, 102, -1, 60, 104, 119, - 103, 115, -1, -1, -1, 10, 94, 108, -1, 18, - 60, 104, 115, 97, 82, -1, 18, 60, 104, 115, + -1, 30, -1, 31, -1, 102, -1, 60, 104, 122, + 103, 118, -1, -1, -1, 10, 94, 108, -1, 18, + 60, 104, 118, 97, 82, -1, 18, 60, 104, 118, 97, 82, 19, 97, 82, -1, 44, -1, 96, 44, -1, -1, 96, -1, -1, 49, 109, -1, -1, 100, - -1, 4, -1, 100, 119, 4, -1, 1, -1, 100, - 1, -1, 100, 119, 1, -1, -1, 104, -1, -1, - 103, -1, 104, -1, 103, 119, 104, -1, 1, -1, - 103, 1, -1, 103, 1, 104, -1, 103, 119, 1, - -1, 112, 105, 104, -1, 104, 38, 104, -1, 104, + -1, 4, -1, 100, 122, 4, -1, 1, -1, 100, + 1, -1, 100, 122, 1, -1, -1, 104, -1, -1, + 103, -1, 104, -1, 103, 122, 104, -1, 1, -1, + 103, 1, -1, 103, 1, 104, -1, 103, 122, 1, + -1, 113, 105, 104, -1, 104, 38, 104, -1, 104, 39, 104, -1, 104, 14, 104, -1, 104, 37, 4, -1, 104, 107, 104, -1, 104, 46, 104, 47, 104, -1, 108, -1, 13, -1, 12, -1, 45, 13, -1, - 9, -1, 49, -1, 106, -1, 50, -1, 77, -1, - 56, 77, -1, 60, 103, 115, 37, 4, -1, 109, - -1, 108, 109, -1, 110, -1, 109, 58, 109, -1, - 109, 53, 109, -1, 109, 54, 109, -1, 109, 55, - 109, -1, 109, 51, 109, -1, 109, 52, 109, -1, - 35, 111, 98, -1, 109, 11, 35, 111, -1, 112, - 40, -1, 112, 41, -1, 56, 109, -1, 60, 104, - 115, -1, 42, 60, 102, 115, -1, 43, 60, 102, - 115, -1, 43, -1, 3, 60, 102, 115, -1, 112, - -1, 40, 112, -1, 41, 112, -1, 7, -1, 8, - -1, 52, 109, -1, 51, 109, -1, -1, 112, -1, - 4, -1, 4, 62, 103, 63, -1, 59, 110, -1, - 64, 97, -1, 65, 97, -1, 61, -1, -1, 117, - -1, 66, -1, 47, -1, 48, 97, -1 + 9, -1, 49, -1, 106, -1, 50, -1, 109, -1, + 110, -1, 108, 109, -1, 111, -1, 109, 58, 109, + -1, 109, 53, 109, -1, 109, 54, 109, -1, 109, + 55, 109, -1, 109, 51, 109, -1, 109, 52, 109, + -1, 35, 112, 98, -1, 113, 40, -1, 113, 41, + -1, 60, 103, 118, 37, 4, -1, 108, 11, 35, + 112, -1, 110, 58, 109, -1, 110, 53, 109, -1, + 110, 54, 109, -1, 110, 55, 109, -1, 110, 51, + 109, -1, 110, 52, 109, -1, 77, -1, 56, 109, + -1, 60, 104, 118, -1, 42, 60, 102, 118, -1, + 43, 60, 102, 118, -1, 43, -1, 3, 60, 102, + 118, -1, 113, -1, 40, 113, -1, 41, 113, -1, + 7, -1, 8, -1, 52, 109, -1, 51, 109, -1, + -1, 113, -1, 4, -1, 4, 62, 103, 63, -1, + 114, -1, 59, 111, 115, -1, 40, -1, 41, -1, + -1, 64, 97, -1, 65, 97, -1, 61, -1, -1, + 120, -1, 66, -1, 47, -1, 48, 97, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { - 0, 171, 171, 177, 179, 184, 196, 200, 215, 226, - 229, 233, 243, 248, 256, 261, 263, 265, 276, 277, - 282, 281, 305, 304, 330, 331, 336, 337, 355, 360, - 361, 365, 367, 369, 371, 373, 375, 377, 421, 425, - 430, 433, 436, 445, 465, 468, 467, 477, 489, 489, - 520, 522, 536, 551, 557, 558, 563, 616, 617, 634, - 639, 641, 646, 648, 653, 655, 657, 662, 663, 671, - 672, 678, 683, 683, 695, 700, 707, 708, 711, 713, - 718, 719, 725, 726, 731, 733, 735, 737, 739, 746, - 747, 753, 754, 759, 761, 767, 769, 771, 773, 778, - 797, 799, 801, 807, 809, 815, 817, 822, 824, 826, - 831, 833, 837, 838, 843, 845, 853, 855, 857, 862, - 864, 866, 868, 870, 872, 874, 876, 882, 887, 889, - 894, 896, 898, 901, 903, 911, 919, 920, 922, 924, - 926, 929, 937, 949, 950, 955, 957, 971, 982, 986, - 990, 993, 995, 999, 1003, 1006 + 0, 178, 178, 184, 186, 191, 203, 207, 222, 233, + 236, 240, 250, 259, 271, 276, 278, 280, 291, 292, + 297, 296, 320, 319, 345, 346, 351, 352, 370, 375, + 376, 380, 382, 384, 386, 388, 390, 392, 436, 440, + 445, 448, 451, 460, 484, 487, 486, 496, 508, 508, + 539, 541, 559, 581, 587, 588, 593, 646, 647, 664, + 669, 671, 676, 678, 683, 685, 687, 692, 693, 701, + 702, 708, 713, 713, 725, 730, 737, 738, 741, 743, + 748, 749, 755, 756, 761, 763, 765, 767, 769, 776, + 777, 783, 784, 789, 791, 797, 799, 801, 803, 808, + 827, 829, 831, 837, 843, 849, 851, 856, 858, 860, + 865, 867, 871, 872, 877, 879, 881, 886, 888, 890, + 892, 894, 896, 898, 900, 906, 908, 910, 923, 928, + 930, 932, 934, 936, 938, 943, 945, 947, 949, 952, + 954, 968, 976, 977, 979, 981, 983, 986, 994, 1006, + 1007, 1012, 1014, 1029, 1039, 1054, 1055, 1056, 1060, 1064, + 1068, 1071, 1073, 1077, 1081, 1084 }; #endif @@ -546,9 +558,10 @@ static const char *const yytname[] = "print_expression_list", "output_redir", "@5", "if_statement", "nls", "opt_nls", "input_redir", "opt_param_list", "param_list", "opt_exp", "opt_expression_list", "expression_list", "exp", "assign_operator", - "relop_or_less", "a_relop", "common_exp", "simp_exp", - "non_post_simp_exp", "opt_variable", "variable", "l_brace", "r_brace", - "r_paren", "opt_semi", "semi", "colon", "comma", 0 + "relop_or_less", "a_relop", "common_exp", "simp_exp", "simp_exp_nc", + "non_post_simp_exp", "opt_variable", "variable", "field_spec", + "opt_incdec", "l_brace", "r_brace", "r_paren", "opt_semi", "semi", + "colon", "comma", 0 }; #endif @@ -581,11 +594,12 @@ static const unsigned char yyr1[] = 98, 98, 99, 99, 100, 100, 100, 100, 100, 101, 101, 102, 102, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, - 106, 106, 107, 107, 108, 108, 108, 108, 108, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 111, 111, 112, 112, 112, 113, 114, - 115, 116, 116, 117, 118, 119 + 106, 106, 107, 107, 108, 108, 108, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, + 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, + 112, 113, 113, 113, 114, 115, 115, 115, 116, 117, + 118, 119, 119, 120, 121, 122 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -602,10 +616,11 @@ static const unsigned char yyr2[] = 0, 2, 0, 1, 1, 3, 1, 2, 3, 0, 1, 0, 1, 1, 3, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 1, 1, 1, 2, - 1, 1, 1, 1, 1, 2, 5, 1, 2, 1, - 3, 3, 3, 3, 3, 3, 3, 4, 2, 2, - 2, 3, 4, 4, 1, 4, 1, 2, 2, 1, - 1, 2, 2, 0, 1, 1, 4, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 2, 1, 3, 3, + 3, 3, 3, 3, 3, 2, 2, 5, 4, 3, + 3, 3, 3, 3, 3, 1, 2, 3, 4, 4, + 1, 4, 1, 2, 2, 1, 1, 2, 2, 0, + 1, 1, 4, 1, 3, 1, 1, 0, 2, 2, 1, 0, 1, 1, 1, 2 }; @@ -615,94 +630,96 @@ static const unsigned char yyr2[] = static const unsigned char yydefact[] = { 78, 76, 0, 79, 3, 1, 77, 0, 5, 0, - 145, 139, 140, 12, 13, 20, 143, 0, 0, 0, - 134, 25, 0, 0, 24, 0, 0, 0, 4, 0, - 0, 114, 22, 2, 10, 106, 117, 119, 136, 0, - 0, 0, 80, 144, 137, 138, 0, 0, 0, 0, - 142, 136, 141, 115, 130, 147, 136, 95, 0, 93, - 78, 153, 6, 7, 29, 26, 78, 8, 0, 110, + 151, 145, 146, 12, 13, 20, 149, 0, 0, 0, + 140, 25, 0, 0, 24, 0, 0, 0, 4, 0, + 0, 135, 22, 2, 10, 106, 114, 115, 117, 142, + 153, 0, 0, 0, 80, 150, 143, 144, 0, 0, + 148, 142, 147, 136, 0, 157, 142, 95, 0, 93, + 78, 163, 6, 7, 29, 26, 78, 8, 0, 110, 0, 0, 0, 0, 0, 0, 111, 113, 112, 0, - 118, 0, 0, 0, 0, 0, 0, 0, 108, 107, - 128, 129, 0, 0, 0, 0, 93, 0, 16, 15, - 18, 19, 0, 17, 0, 126, 0, 0, 0, 96, - 78, 150, 0, 0, 131, 148, 0, 30, 23, 102, - 103, 100, 101, 0, 11, 104, 143, 124, 125, 121, - 122, 123, 120, 109, 99, 135, 146, 0, 81, 132, - 133, 97, 155, 0, 98, 94, 28, 0, 45, 0, - 0, 0, 78, 0, 0, 0, 67, 68, 0, 89, - 0, 78, 27, 0, 48, 33, 53, 26, 151, 78, - 0, 127, 86, 84, 0, 0, 116, 0, 89, 51, - 0, 0, 0, 0, 54, 40, 41, 42, 0, 90, - 43, 149, 47, 0, 0, 78, 152, 31, 105, 78, - 87, 0, 0, 0, 0, 0, 0, 0, 0, 145, - 55, 0, 44, 0, 71, 69, 32, 14, 21, 88, - 85, 78, 46, 0, 52, 78, 78, 0, 0, 78, - 93, 72, 49, 0, 50, 0, 0, 0, 0, 0, - 0, 0, 74, 57, 35, 0, 78, 0, 78, 0, - 73, 78, 78, 0, 78, 0, 78, 54, 70, 0, - 0, 59, 0, 0, 58, 36, 37, 54, 0, 75, - 34, 62, 65, 0, 0, 66, 0, 154, 78, 0, - 78, 64, 63, 78, 26, 78, 0, 26, 0, 0, - 39, 0, 38 + 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 108, 107, 125, 126, 0, 0, + 0, 0, 93, 0, 16, 15, 18, 19, 0, 17, + 0, 124, 0, 0, 0, 155, 156, 154, 96, 78, + 160, 0, 0, 137, 158, 0, 30, 23, 102, 103, + 100, 101, 0, 11, 104, 149, 122, 123, 119, 120, + 121, 118, 133, 134, 130, 131, 132, 129, 109, 99, + 141, 152, 0, 81, 138, 139, 97, 165, 0, 98, + 94, 28, 0, 45, 0, 0, 0, 78, 0, 0, + 0, 67, 68, 0, 89, 0, 78, 27, 0, 48, + 33, 53, 26, 161, 78, 0, 128, 86, 84, 0, + 0, 127, 0, 89, 51, 0, 0, 0, 0, 54, + 40, 41, 42, 0, 90, 43, 159, 47, 0, 0, + 78, 162, 31, 105, 78, 87, 0, 0, 0, 0, + 0, 0, 0, 0, 151, 55, 0, 44, 0, 71, + 69, 32, 14, 21, 88, 85, 78, 46, 0, 52, + 78, 78, 0, 0, 78, 93, 72, 49, 0, 50, + 0, 0, 0, 0, 0, 0, 0, 74, 57, 35, + 0, 78, 0, 78, 0, 73, 78, 78, 0, 78, + 0, 78, 54, 70, 0, 0, 59, 0, 0, 58, + 36, 37, 54, 0, 75, 34, 62, 65, 0, 0, + 66, 0, 164, 78, 0, 78, 64, 63, 78, 26, + 78, 0, 26, 0, 0, 39, 0, 38 }; /* YYDEFGOTO[NTERM-NUM]. */ static const short int yydefgoto[] = { - -1, 2, 7, 28, 29, 62, 102, 103, 30, 41, - 31, 68, 32, 116, 63, 162, 178, 163, 193, 211, - 252, 253, 264, 276, 164, 214, 232, 241, 165, 3, - 4, 105, 174, 175, 188, 94, 95, 166, 93, 78, - 79, 35, 36, 37, 42, 38, 167, 168, 114, 195, - 169, 278, 113 + -1, 2, 7, 28, 29, 62, 108, 109, 30, 43, + 31, 68, 32, 125, 63, 177, 193, 178, 208, 226, + 267, 268, 279, 291, 179, 229, 247, 256, 180, 3, + 4, 111, 189, 190, 203, 100, 101, 181, 99, 78, + 79, 35, 36, 37, 38, 44, 39, 40, 117, 182, + 183, 123, 210, 184, 293, 122 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -236 +#define YYPACT_NINF -221 static const short int yypact[] = { - -15, -236, 31, -3, -236, -236, -236, 292, -236, -8, - -2, -236, -236, -236, -236, -236, 26, 26, 26, 4, - 6, -236, 934, 934, -236, 876, 262, 717, -236, -16, - 3, -236, -236, -236, 769, 934, 480, -236, 554, 656, - 717, 33, 49, -236, -236, -236, 656, 656, 934, 905, - 41, -1, 41, -236, 41, -236, -236, -236, 117, 695, - -15, -236, -236, -236, -3, -236, -15, -236, 101, -236, - 905, 103, 905, 905, 905, 905, -236, -236, -236, 905, - 480, 74, 934, 934, 934, 934, 934, 934, -236, -236, - -236, -236, 100, 905, 54, 17, 958, 32, -236, -236, - -236, -236, 56, -236, 934, -236, 54, 54, 695, 905, - -15, -236, 86, 739, -236, -236, 454, -236, -236, 133, - -236, 184, 166, 823, 958, 7, 26, 136, 136, 41, - 41, 41, 41, -236, 958, -236, -236, 43, 538, -236, - -236, 958, -236, 121, -236, 958, -236, 68, -236, 2, - 69, 70, -15, 71, 61, 61, -236, -236, 61, 905, - 61, -15, -236, 61, -236, -236, 958, -236, 73, -15, - 905, -236, -236, -236, 54, 123, -236, 905, 905, 81, - 131, 905, 905, 580, 793, -236, -236, -236, 61, 958, - -236, -236, -236, 520, 454, -15, -236, -236, 958, -15, - -236, 45, 695, 61, 717, 83, 695, 695, 130, -11, - -236, 73, -236, 717, 147, -236, -236, -236, -236, -236, - -236, -15, -236, 34, -236, -15, -15, 108, 169, -15, - 508, -236, -236, 580, -236, 3, 580, 905, 54, 634, - 717, 905, 155, -236, -236, 695, -15, 502, -15, 117, - 934, -15, -15, 19, -15, 580, -15, 847, -236, 580, - 111, -236, 201, 132, -236, -236, -236, 847, 54, -236, - -236, -236, -236, 178, 179, -236, 132, -236, -15, 54, - -15, -236, -236, -15, -236, -15, 580, -236, 346, 580, - -236, 400, -236 + -32, -221, 35, -3, -221, -221, -221, 343, -221, -13, + -4, -221, -221, -221, -221, -221, 32, 32, 32, -6, + -5, -221, 974, 974, -221, 974, 1028, 768, -221, -26, + 2, -221, -221, -221, 820, 952, 392, 446, -221, 125, + -221, 707, 768, 185, 11, -221, -221, -221, 707, 707, + 3, -8, 3, 3, 974, 76, -221, -221, 42, 148, + -32, -221, -221, -221, -3, -221, -32, -221, 87, -221, + 974, 93, 974, 974, 974, 974, -221, -221, -221, 974, + 69, 392, 974, 974, 974, 974, 974, 974, 974, 974, + 974, 974, 974, 974, -221, -221, -221, -221, 97, 974, + 50, 41, 746, 36, -221, -221, -221, -221, 46, -221, + 974, -221, 50, 50, 148, -221, -221, -221, 974, -32, + -221, 81, 790, -221, -221, 505, -221, -221, 14, -221, + 540, 317, 874, 746, 7, 32, 70, 70, 3, 3, + 3, 3, 70, 70, 3, 3, 3, 3, -221, 746, + -221, -221, 20, 392, -221, -221, 746, -221, 115, -221, + 746, -221, 80, -221, 27, 82, 84, -32, 89, -18, + -18, -221, -221, -18, 974, -18, -32, -221, -18, -221, + -221, 746, -221, 67, -32, 974, -221, -221, -221, 50, + 48, -221, 974, 974, 79, 150, 974, 974, 631, 844, + -221, -221, -221, -18, 746, -221, -221, -221, 571, 505, + -32, -221, -221, 746, -32, -221, 26, 148, -18, 768, + 98, 148, 148, 133, -12, -221, 67, -221, 768, 151, + -221, -221, -221, -221, -221, -221, -32, -221, 45, -221, + -32, -32, 111, 172, -32, 546, -221, -221, 631, -221, + 2, 631, 974, 50, 685, 768, 974, 162, -221, -221, + 148, -32, 325, -32, 42, 952, -32, -32, 21, -32, + 631, -32, 898, -221, 631, 117, -221, 194, 137, -221, + -221, -221, 898, 50, -221, -221, -221, -221, 183, 186, + -221, 137, -221, -32, 50, -32, -221, -221, -32, -221, + -32, 631, -221, 397, 631, -221, 451, -221 }; /* YYPGOTO[NTERM-NUM]. */ static const short int yypgoto[] = { - -236, -236, -236, -236, -236, 165, -236, -236, -236, -236, - -24, -236, -236, -150, 152, -178, -236, -165, -236, -235, - -236, -236, -236, -236, -236, -236, -236, -236, -236, -22, - -7, -236, -236, -236, 21, -32, -17, 47, -236, -236, - -236, -41, 66, 175, 76, -14, -5, -181, 52, -236, - 9, -71, -130 + -221, -221, -221, -221, -221, 169, -221, -221, -221, -221, + -85, -221, -221, -173, -39, -169, -221, -184, -221, -220, + -221, -221, -221, -221, -221, -221, -221, -221, -221, 5, + -7, -221, -221, -221, 13, -35, -23, 73, -221, -221, + -221, -56, 128, -221, 178, 90, -15, -221, -221, -24, + -192, 55, -221, 127, -69, -151 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -712,212 +729,228 @@ static const short int yypgoto[] = #define YYTABLE_NINF -93 static const short int yytable[] = { - 33, 53, 43, 44, 45, 208, 179, 64, 51, 51, - 58, 51, 56, 216, 106, 107, -93, 194, 109, 210, - 261, 51, 268, 97, 65, 65, 228, -92, 1, 1, - 10, 5, 279, 109, 51, 109, 98, 99, 66, 90, - 91, 6, 262, 263, 172, 201, 219, 173, 60, 220, - 61, 40, 39, 115, 34, 242, -93, -93, 244, 117, - 40, -92, 180, -56, 46, 110, 47, 60, 51, 51, - 51, 51, 51, 51, 59, 100, 101, 266, -92, 270, - 110, 269, 110, -92, -56, 26, 96, 96, 50, 52, - 51, 54, 210, 96, 96, 136, 108, 234, 104, 87, - 240, 80, 210, 142, -82, 1, 118, 120, 290, 126, - 112, 292, 43, 133, 54, 111, 137, 119, 109, 121, - 122, 123, 124, 143, 200, 176, 125, 61, 177, 181, - 182, 184, 64, 64, 288, 205, 64, 291, 64, 61, - 134, 64, 69, 204, 224, 183, 135, -93, 127, 128, - 129, 130, 131, 132, 191, 227, 141, 231, 139, 140, - 145, 215, 197, 66, 66, 110, 64, 66, 237, 66, - 138, 110, 66, 238, 251, 69, 161, 196, 111, 277, - 70, 64, 76, 77, -83, 281, 282, 223, 217, 84, - 85, 86, 218, 69, 87, 67, 58, 66, 70, 203, - 250, 55, 171, 71, 72, 283, 189, 0, 271, 272, - 0, 0, 66, 0, 233, 76, 77, 198, 235, 236, - 229, 71, 239, 249, 202, 189, 199, 51, 206, 207, - 243, 0, 0, 76, 77, 0, 51, 0, 275, 255, - 96, 257, 0, 0, 259, 260, 21, 265, 248, 267, - 0, 96, 273, 274, 221, 24, 256, 0, 225, 226, - 230, 0, 0, 0, 0, 9, 10, 0, 0, 11, - 12, 284, 0, 286, 0, 0, 287, 0, 289, 0, - 0, 0, 0, 0, 245, 0, 247, 96, 0, 0, - 246, 0, -78, 8, 0, 9, 10, 254, 0, 11, - 12, 258, 17, 18, 19, 20, 185, 186, 13, 14, - 187, 0, 190, 22, 23, 192, 80, 0, 48, 0, - 280, 26, 49, 0, 0, 0, 15, 16, 0, 0, - 0, 285, 17, 18, 19, 20, 1, 21, 0, 0, - 212, 0, 0, 22, 23, 0, 24, 146, 25, 9, - 10, 26, 27, 11, 12, 222, -9, 0, -9, 0, - 0, 0, 0, 0, 147, 0, 148, 149, 150, -61, - -61, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 0, 16, 160, 0, 0, 0, 17, 18, 19, 20, - -61, 21, 0, 0, 0, 0, 0, 22, 23, 0, - 24, 146, 25, 9, 10, 26, 27, 11, 12, 0, - 60, -61, 61, 0, 0, 0, 0, 0, 147, 0, - 148, 149, 150, -60, -60, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 0, 16, 160, 0, 0, 0, - 17, 18, 19, 20, -60, 21, 0, 0, 0, 0, - 0, 22, 23, 0, 24, 146, 25, 9, 10, 26, - 27, 11, 12, 0, 60, -60, 61, 0, 0, 0, - 0, 0, 147, 0, 148, 149, 150, 0, 0, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 0, 16, - 160, 81, 0, 0, 17, 18, 19, 20, 0, 21, - 0, 0, 0, 0, 0, 22, 23, 0, 24, 0, - 25, 69, 0, 26, 27, 0, 70, 69, 60, 161, - 61, 57, 70, 9, 10, 0, 0, 11, 12, 0, - -91, 82, 83, 84, 85, 86, 0, 0, 87, 71, - 72, 73, 0, 0, 0, 71, 72, 73, 74, -93, - 0, 76, 77, 0, 74, 16, 110, 76, 77, 0, - 17, 18, 19, 20, -91, 21, 88, 89, 61, 111, - 0, 22, 23, 0, 24, 0, 25, 0, 0, 26, - 213, -91, 0, 9, 10, 0, -91, 11, 12, 82, - 83, 84, 85, 86, 90, 91, 87, 0, 147, 92, - 148, 149, 150, 0, 0, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 0, 16, 160, 0, 0, 0, - 17, 18, 19, 20, 0, 21, 0, 0, 0, 0, - 0, 22, 23, 0, 24, 0, 25, 9, 10, 26, - 27, 11, 12, 0, 60, 0, 61, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 57, 0, 9, - 10, 0, 0, 11, 12, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 17, 18, 19, 20, 0, 21, - 0, 0, 0, 0, 0, 22, 23, 0, 24, 0, - 25, 16, 0, 26, 27, 0, 17, 18, 19, 20, - 61, 21, 0, 0, 69, 0, 0, 22, 23, 70, - 24, 0, 25, 0, 0, 26, 27, -91, 57, 0, + 33, 45, 46, 47, 58, 65, 65, 51, 51, 209, + 51, 56, 1, 112, 113, 225, -93, 231, 1, 103, + 51, 187, 276, 69, 188, 243, 1, 234, -93, 223, + 235, 194, 96, 97, 64, 5, 10, 118, 60, 216, + 61, 6, 118, 118, 277, 278, 118, 41, 61, 215, + 42, -92, 283, 124, 48, 49, -93, -93, 42, 126, + 110, 87, 294, 76, 77, -56, 60, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 257, + 34, -82, 259, 285, 119, -92, -56, 195, 225, 119, + 119, 26, 127, 119, 255, 51, 119, 129, 225, 151, + 59, 281, -92, 120, 135, 284, 152, -92, 249, -83, + 148, 120, 157, 121, 102, 102, 115, 116, 158, 191, + 45, 102, 102, 84, 85, 86, 303, 114, 87, 306, + 200, 201, 305, 61, 202, 307, 205, 94, 95, 207, + 192, 219, 196, 128, 197, 130, 131, 132, 133, 199, + 50, 52, 134, 53, 220, 150, 66, 69, 242, 239, + 198, 246, 70, 81, 227, 96, 97, 154, 155, 206, + 98, 252, 149, 230, 64, 64, 253, 212, 64, 237, + 64, 266, 176, 64, 292, 71, 72, 73, 104, 105, + 296, 156, 290, 297, 74, 160, 238, 76, 77, 67, + 265, 286, 287, 232, 55, 58, 218, 233, 64, 120, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 298, 64, 0, 186, 258, 106, 107, 248, + 0, 0, 264, 250, 251, 0, 0, 254, 153, 21, + 0, 51, 0, 0, 214, 288, 289, 204, 24, 0, + 51, 0, 0, 0, 270, 0, 272, 0, 213, 274, + 275, 0, 280, 0, 282, 217, 204, 0, 0, 221, + 222, 0, 236, 0, 0, 0, 240, 241, 0, 0, + 0, 102, 0, 0, 0, 0, 299, 0, 301, 0, + 0, 302, 102, 304, 0, 0, 66, 66, 0, 0, + 66, 245, 66, 0, 0, 66, 0, 0, 261, 0, + 211, 0, 0, 0, 0, 269, 0, 0, 0, 273, + 0, 0, 0, 0, 0, 260, 69, 262, 102, 0, + 66, 70, 0, 0, 69, 0, 0, 0, 295, 70, + 0, 0, 0, -78, 8, 66, 9, 10, 0, 300, + 11, 12, 0, 244, 71, 72, 0, 0, 0, 13, + 14, 0, 71, 72, 73, 0, 76, 77, 0, 0, + 0, 74, 0, 0, 76, 77, 0, 15, 16, 0, + 0, 263, 0, 17, 18, 19, 20, 1, 21, 271, + 0, 61, 0, 81, 22, 23, 0, 24, 161, 25, + 9, 10, 26, 27, 11, 12, 0, -9, 0, -9, + 0, 0, 0, 0, 0, 162, 0, 163, 164, 165, + -61, -61, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 0, 16, 175, 0, 0, 0, 17, 18, 19, + 20, -61, 21, 82, 83, 84, 85, 86, 22, 23, + 87, 24, 161, 25, 9, 10, 26, 27, 11, 12, + 0, 60, -61, 61, 0, 0, 0, 0, 0, 162, + 0, 163, 164, 165, -60, -60, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 0, 16, 175, 0, 0, + 0, 17, 18, 19, 20, -60, 21, 88, 89, 90, + 91, 92, 22, 23, 93, 24, 161, 25, 9, 10, + 26, 27, 11, 12, 0, 60, -60, 61, 0, 0, + 0, 0, 0, 162, 0, 163, 164, 165, 0, 0, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 0, + 16, 175, 0, 0, 0, 17, 18, 19, 20, 69, + 21, 0, 0, 0, 70, 69, 22, 23, 0, 24, + 70, 25, 0, 0, 26, 27, 0, 0, 0, 60, + 176, 61, 57, 0, 9, 10, 0, 71, 11, 12, + 0, -91, 0, 71, 72, 73, 0, 0, 0, 76, + 77, 0, 74, 0, 119, 76, 77, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 120, 0, 0, + 0, 17, 18, 19, 20, -91, 21, 0, 0, 0, + 0, 0, 22, 23, 0, 24, 0, 25, 0, 0, + 26, 228, -91, 0, 9, 10, 0, -91, 11, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, + 0, 163, 164, 165, 0, 0, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 0, 16, 175, 0, 0, + 0, 17, 18, 19, 20, 0, 21, 0, 0, 0, + 0, 0, 22, 23, 0, 24, 0, 25, 9, 10, + 26, 27, 11, 12, 0, 60, 0, 61, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 9, 10, 0, 0, 11, 12, 0, 0, 0, 0, - 0, 0, 71, 72, 73, 0, 0, 0, 0, 0, - 144, 74, 9, 10, 76, 77, 11, 12, 0, 0, - 0, 0, 16, 0, 0, 0, 111, 17, 18, 19, - 20, 0, 21, 0, 0, 0, 0, 0, 22, 23, - 0, 24, 0, 25, 16, 0, 26, 27, 69, 17, - 18, 19, 20, 70, 21, 0, 0, 0, 0, 0, - 22, 23, 0, 24, 0, 25, 9, 209, 26, 27, - 11, 12, 0, 0, 0, 0, 71, 72, 73, 0, - 0, 0, 0, 0, 149, 74, 0, 75, 76, 77, - 0, 0, 0, 156, 157, 0, 0, 0, 16, 0, - 0, 0, 69, 17, 18, 19, 20, 70, 21, 0, - 0, 0, 0, 0, 22, 23, 0, 24, 0, 25, - 9, 10, 26, 27, 11, 12, 0, 0, 0, 0, - 71, 72, 73, 0, 0, 0, 0, 0, 149, 74, - 170, 0, 76, 77, 0, 0, 0, 156, 157, 9, - 10, 0, 16, 11, 12, 0, 0, 17, 18, 19, - 20, 0, 21, 0, 0, 0, 0, 0, 22, 23, - 0, 24, 0, 25, 0, 0, 26, 27, 9, 10, - 0, 16, 11, 12, 0, 0, 17, 18, 19, 20, - 0, 21, 0, 0, 0, 0, 0, 22, 23, 0, - 24, 0, 48, 0, 0, 26, 49, 9, 10, 0, - 16, 11, 12, 0, 0, 17, 18, 19, 20, 0, + 16, 0, 0, 0, 0, 17, 18, 19, 20, 0, 21, 0, 0, 0, 0, 0, 22, 23, 0, 24, - 0, 25, 0, 0, 26, 27, 0, 69, 0, 16, - 0, 0, 70, 0, 17, 18, 19, 20, 0, 0, - 0, 0, 0, 0, 0, 22, 23, 0, 0, 0, - 48, 0, 0, 26, 49, 71, 72, 73, 0, 0, - 0, 0, 0, 0, 74, 0, 0, 76, 77 + 0, 25, 16, 0, 26, 27, 0, 17, 18, 19, + 20, 61, 21, 0, 0, 69, 0, 0, 22, 23, + 70, 24, 0, 25, 0, 0, 26, 27, -91, 57, + 0, 9, 10, 0, 0, 11, 12, 0, 0, 0, + 0, 0, 0, 71, 72, 73, 0, 0, 0, 0, + 0, 159, 74, 9, 10, 76, 77, 11, 12, 0, + 0, 0, 0, 16, 0, 0, 0, 0, 17, 18, + 19, 20, 0, 21, 0, 0, 0, 0, 0, 22, + 23, 0, 24, 0, 25, 16, 0, 26, 27, 69, + 17, 18, 19, 20, 70, 21, 0, 0, 0, 0, + 0, 22, 23, 0, 24, 0, 25, 9, 224, 26, + 27, 11, 12, 0, 0, 0, 0, 71, 72, 73, + 0, 0, 0, 0, 0, 164, 74, 0, 75, 76, + 77, 0, 0, 0, 171, 172, 0, 0, 0, 16, + 0, 0, 0, 69, 17, 18, 19, 20, 70, 21, + 0, 0, 0, 0, 0, 22, 23, 0, 24, 0, + 25, 9, 10, 26, 27, 11, 12, 0, 0, 0, + 0, 71, 72, 73, 0, 0, 0, 0, 0, 164, + 74, 185, 0, 76, 77, 0, 0, 0, 171, 172, + 0, 0, 0, 16, 0, 0, 0, 0, 17, 18, + 19, 20, 0, 21, 0, 0, 0, 0, 0, 22, + 23, 0, 24, 0, 25, 9, 10, 26, 27, 11, + 12, 0, 0, 80, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 10, 0, + 0, 11, 12, 0, 0, 0, 0, 16, 0, 0, + 0, 0, 17, 18, 19, 20, 0, 21, 0, 0, + 0, 0, 0, 22, 23, 0, 24, 0, 25, 16, + 0, 26, 27, 0, 17, 18, 19, 20, 0, 21, + 0, 0, 0, 0, 0, 22, 23, 0, 24, 0, + 25, 9, 10, 26, 27, 11, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, + 19, 20, 0, 21, 0, 0, 0, 0, 0, 22, + 23, 0, 24, 0, 25, 0, 0, 26, 54 }; static const short int yycheck[] = { - 7, 25, 16, 17, 18, 183, 4, 29, 22, 23, - 27, 25, 26, 194, 46, 47, 9, 167, 1, 184, - 1, 35, 257, 40, 29, 30, 37, 10, 44, 44, - 4, 0, 267, 1, 48, 1, 3, 4, 29, 40, - 41, 44, 23, 24, 1, 175, 1, 4, 64, 4, - 66, 62, 60, 60, 7, 233, 49, 50, 236, 66, - 62, 44, 60, 44, 60, 48, 60, 64, 82, 83, - 84, 85, 86, 87, 27, 42, 43, 255, 61, 260, - 48, 259, 48, 66, 65, 59, 39, 40, 22, 23, - 104, 25, 257, 46, 47, 63, 49, 63, 49, 58, - 230, 35, 267, 110, 61, 44, 5, 4, 286, 35, - 58, 289, 126, 13, 48, 61, 60, 70, 1, 72, - 73, 74, 75, 37, 1, 4, 79, 66, 60, 60, - 60, 60, 154, 155, 284, 4, 158, 287, 160, 66, - 93, 163, 9, 62, 61, 152, 94, 14, 82, 83, - 84, 85, 86, 87, 161, 25, 109, 10, 106, 107, - 113, 193, 169, 154, 155, 48, 188, 158, 60, 160, - 104, 48, 163, 4, 19, 9, 65, 168, 61, 47, - 14, 203, 49, 50, 61, 7, 7, 204, 195, 53, - 54, 55, 199, 9, 58, 30, 213, 188, 14, 178, - 241, 26, 126, 37, 38, 276, 159, -1, 7, 8, - -1, -1, 203, -1, 221, 49, 50, 170, 225, 226, - 211, 37, 229, 240, 177, 178, 174, 241, 181, 182, - 235, -1, -1, 49, 50, -1, 250, -1, 262, 246, - 193, 248, -1, -1, 251, 252, 45, 254, 239, 256, - -1, 204, 51, 52, 202, 54, 247, -1, 206, 207, - 213, -1, -1, -1, -1, 3, 4, -1, -1, 7, - 8, 278, -1, 280, -1, -1, 283, -1, 285, -1, - -1, -1, -1, -1, 237, -1, 239, 240, -1, -1, - 238, -1, 0, 1, -1, 3, 4, 245, -1, 7, - 8, 249, 40, 41, 42, 43, 154, 155, 16, 17, - 158, -1, 160, 51, 52, 163, 250, -1, 56, -1, - 268, 59, 60, -1, -1, -1, 34, 35, -1, -1, - -1, 279, 40, 41, 42, 43, 44, 45, -1, -1, - 188, -1, -1, 51, 52, -1, 54, 1, 56, 3, - 4, 59, 60, 7, 8, 203, 64, -1, 66, -1, - -1, -1, -1, -1, 18, -1, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - -1, 35, 36, -1, -1, -1, 40, 41, 42, 43, - 44, 45, -1, -1, -1, -1, -1, 51, 52, -1, - 54, 1, 56, 3, 4, 59, 60, 7, 8, -1, - 64, 65, 66, -1, -1, -1, -1, -1, 18, -1, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, -1, 35, 36, -1, -1, -1, - 40, 41, 42, 43, 44, 45, -1, -1, -1, -1, - -1, 51, 52, -1, 54, 1, 56, 3, 4, 59, - 60, 7, 8, -1, 64, 65, 66, -1, -1, -1, - -1, -1, 18, -1, 20, 21, 22, -1, -1, 25, - 26, 27, 28, 29, 30, 31, 32, 33, -1, 35, - 36, 11, -1, -1, 40, 41, 42, 43, -1, 45, - -1, -1, -1, -1, -1, 51, 52, -1, 54, -1, - 56, 9, -1, 59, 60, -1, 14, 9, 64, 65, - 66, 1, 14, 3, 4, -1, -1, 7, 8, -1, - 10, 51, 52, 53, 54, 55, -1, -1, 58, 37, - 38, 39, -1, -1, -1, 37, 38, 39, 46, 11, - -1, 49, 50, -1, 46, 35, 48, 49, 50, -1, - 40, 41, 42, 43, 44, 45, 12, 13, 66, 61, - -1, 51, 52, -1, 54, -1, 56, -1, -1, 59, - 60, 61, -1, 3, 4, -1, 66, 7, 8, 51, - 52, 53, 54, 55, 40, 41, 58, -1, 18, 45, - 20, 21, 22, -1, -1, 25, 26, 27, 28, 29, - 30, 31, 32, 33, -1, 35, 36, -1, -1, -1, - 40, 41, 42, 43, -1, 45, -1, -1, -1, -1, - -1, 51, 52, -1, 54, -1, 56, 3, 4, 59, - 60, 7, 8, -1, 64, -1, 66, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1, -1, 3, - 4, -1, -1, 7, 8, -1, -1, -1, -1, 35, - -1, -1, -1, -1, 40, 41, 42, 43, -1, 45, - -1, -1, -1, -1, -1, 51, 52, -1, 54, -1, - 56, 35, -1, 59, 60, -1, 40, 41, 42, 43, - 66, 45, -1, -1, 9, -1, -1, 51, 52, 14, - 54, -1, 56, -1, -1, 59, 60, 61, 1, -1, + 7, 16, 17, 18, 27, 29, 30, 22, 23, 182, + 25, 26, 44, 48, 49, 199, 9, 209, 44, 42, + 35, 1, 1, 9, 4, 37, 44, 1, 14, 198, + 4, 4, 40, 41, 29, 0, 4, 1, 64, 190, + 66, 44, 1, 1, 23, 24, 1, 60, 66, 1, + 62, 10, 272, 60, 60, 60, 49, 50, 62, 66, + 49, 58, 282, 49, 50, 44, 64, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 248, + 7, 61, 251, 275, 48, 44, 65, 60, 272, 48, + 48, 59, 5, 48, 245, 110, 48, 4, 282, 63, + 27, 270, 61, 61, 35, 274, 60, 66, 63, 61, + 13, 61, 119, 58, 41, 42, 40, 41, 37, 4, + 135, 48, 49, 53, 54, 55, 299, 54, 58, 302, + 169, 170, 301, 66, 173, 304, 175, 12, 13, 178, + 60, 62, 60, 70, 60, 72, 73, 74, 75, 60, + 22, 23, 79, 25, 4, 100, 29, 9, 25, 61, + 167, 10, 14, 35, 203, 40, 41, 112, 113, 176, + 45, 60, 99, 208, 169, 170, 4, 184, 173, 218, + 175, 19, 65, 178, 47, 37, 38, 39, 3, 4, + 7, 118, 277, 7, 46, 122, 219, 49, 50, 30, + 256, 7, 8, 210, 26, 228, 193, 214, 203, 61, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 291, 218, -1, 135, 250, 42, 43, 236, + -1, -1, 255, 240, 241, -1, -1, 244, 110, 45, + -1, 256, -1, -1, 189, 51, 52, 174, 54, -1, + 265, -1, -1, -1, 261, -1, 263, -1, 185, 266, + 267, -1, 269, -1, 271, 192, 193, -1, -1, 196, + 197, -1, 217, -1, -1, -1, 221, 222, -1, -1, + -1, 208, -1, -1, -1, -1, 293, -1, 295, -1, + -1, 298, 219, 300, -1, -1, 169, 170, -1, -1, + 173, 228, 175, -1, -1, 178, -1, -1, 253, -1, + 183, -1, -1, -1, -1, 260, -1, -1, -1, 264, + -1, -1, -1, -1, -1, 252, 9, 254, 255, -1, + 203, 14, -1, -1, 9, -1, -1, -1, 283, 14, + -1, -1, -1, 0, 1, 218, 3, 4, -1, 294, + 7, 8, -1, 226, 37, 38, -1, -1, -1, 16, + 17, -1, 37, 38, 39, -1, 49, 50, -1, -1, + -1, 46, -1, -1, 49, 50, -1, 34, 35, -1, + -1, 254, -1, 40, 41, 42, 43, 44, 45, 262, + -1, 66, -1, 265, 51, 52, -1, 54, 1, 56, + 3, 4, 59, 60, 7, 8, -1, 64, -1, 66, + -1, -1, -1, -1, -1, 18, -1, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, -1, 35, 36, -1, -1, -1, 40, 41, 42, + 43, 44, 45, 51, 52, 53, 54, 55, 51, 52, + 58, 54, 1, 56, 3, 4, 59, 60, 7, 8, + -1, 64, 65, 66, -1, -1, -1, -1, -1, 18, + -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, -1, 35, 36, -1, -1, + -1, 40, 41, 42, 43, 44, 45, 51, 52, 53, + 54, 55, 51, 52, 58, 54, 1, 56, 3, 4, + 59, 60, 7, 8, -1, 64, 65, 66, -1, -1, + -1, -1, -1, 18, -1, 20, 21, 22, -1, -1, + 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, + 35, 36, -1, -1, -1, 40, 41, 42, 43, 9, + 45, -1, -1, -1, 14, 9, 51, 52, -1, 54, + 14, 56, -1, -1, 59, 60, -1, -1, -1, 64, + 65, 66, 1, -1, 3, 4, -1, 37, 7, 8, + -1, 10, -1, 37, 38, 39, -1, -1, -1, 49, + 50, -1, 46, -1, 48, 49, 50, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 35, 61, -1, -1, + -1, 40, 41, 42, 43, 44, 45, -1, -1, -1, + -1, -1, 51, 52, -1, 54, -1, 56, -1, -1, + 59, 60, 61, -1, 3, 4, -1, 66, 7, 8, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 18, + -1, 20, 21, 22, -1, -1, 25, 26, 27, 28, + 29, 30, 31, 32, 33, -1, 35, 36, -1, -1, + -1, 40, 41, 42, 43, -1, 45, -1, -1, -1, + -1, -1, 51, 52, -1, 54, -1, 56, 3, 4, + 59, 60, 7, 8, -1, 64, -1, 66, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 3, 4, -1, -1, 7, 8, -1, -1, -1, -1, - -1, -1, 37, 38, 39, -1, -1, -1, -1, -1, - 1, 46, 3, 4, 49, 50, 7, 8, -1, -1, - -1, -1, 35, -1, -1, -1, 61, 40, 41, 42, - 43, -1, 45, -1, -1, -1, -1, -1, 51, 52, - -1, 54, -1, 56, 35, -1, 59, 60, 9, 40, - 41, 42, 43, 14, 45, -1, -1, -1, -1, -1, - 51, 52, -1, 54, -1, 56, 3, 4, 59, 60, - 7, 8, -1, -1, -1, -1, 37, 38, 39, -1, - -1, -1, -1, -1, 21, 46, -1, 48, 49, 50, - -1, -1, -1, 30, 31, -1, -1, -1, 35, -1, - -1, -1, 9, 40, 41, 42, 43, 14, 45, -1, - -1, -1, -1, -1, 51, 52, -1, 54, -1, 56, - 3, 4, 59, 60, 7, 8, -1, -1, -1, -1, - 37, 38, 39, -1, -1, -1, -1, -1, 21, 46, - 47, -1, 49, 50, -1, -1, -1, 30, 31, 3, - 4, -1, 35, 7, 8, -1, -1, 40, 41, 42, - 43, -1, 45, -1, -1, -1, -1, -1, 51, 52, - -1, 54, -1, 56, -1, -1, 59, 60, 3, 4, - -1, 35, 7, 8, -1, -1, 40, 41, 42, 43, - -1, 45, -1, -1, -1, -1, -1, 51, 52, -1, - 54, -1, 56, -1, -1, 59, 60, 3, 4, -1, - 35, 7, 8, -1, -1, 40, 41, 42, 43, -1, + 35, -1, -1, -1, -1, 40, 41, 42, 43, -1, 45, -1, -1, -1, -1, -1, 51, 52, -1, 54, - -1, 56, -1, -1, 59, 60, -1, 9, -1, 35, - -1, -1, 14, -1, 40, 41, 42, 43, -1, -1, - -1, -1, -1, -1, -1, 51, 52, -1, -1, -1, - 56, -1, -1, 59, 60, 37, 38, 39, -1, -1, - -1, -1, -1, -1, 46, -1, -1, 49, 50 + -1, 56, 35, -1, 59, 60, -1, 40, 41, 42, + 43, 66, 45, -1, -1, 9, -1, -1, 51, 52, + 14, 54, -1, 56, -1, -1, 59, 60, 61, 1, + -1, 3, 4, -1, -1, 7, 8, -1, -1, -1, + -1, -1, -1, 37, 38, 39, -1, -1, -1, -1, + -1, 1, 46, 3, 4, 49, 50, 7, 8, -1, + -1, -1, -1, 35, -1, -1, -1, -1, 40, 41, + 42, 43, -1, 45, -1, -1, -1, -1, -1, 51, + 52, -1, 54, -1, 56, 35, -1, 59, 60, 9, + 40, 41, 42, 43, 14, 45, -1, -1, -1, -1, + -1, 51, 52, -1, 54, -1, 56, 3, 4, 59, + 60, 7, 8, -1, -1, -1, -1, 37, 38, 39, + -1, -1, -1, -1, -1, 21, 46, -1, 48, 49, + 50, -1, -1, -1, 30, 31, -1, -1, -1, 35, + -1, -1, -1, 9, 40, 41, 42, 43, 14, 45, + -1, -1, -1, -1, -1, 51, 52, -1, 54, -1, + 56, 3, 4, 59, 60, 7, 8, -1, -1, -1, + -1, 37, 38, 39, -1, -1, -1, -1, -1, 21, + 46, 47, -1, 49, 50, -1, -1, -1, 30, 31, + -1, -1, -1, 35, -1, -1, -1, -1, 40, 41, + 42, 43, -1, 45, -1, -1, -1, -1, -1, 51, + 52, -1, 54, -1, 56, 3, 4, 59, 60, 7, + 8, -1, -1, 11, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3, 4, -1, + -1, 7, 8, -1, -1, -1, -1, 35, -1, -1, + -1, -1, 40, 41, 42, 43, -1, 45, -1, -1, + -1, -1, -1, 51, 52, -1, 54, -1, 56, 35, + -1, 59, 60, -1, 40, 41, 42, 43, -1, 45, + -1, -1, -1, -1, -1, 51, 52, -1, 54, -1, + 56, 3, 4, 59, 60, 7, 8, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 40, 41, + 42, 43, -1, 45, -1, -1, -1, -1, -1, 51, + 52, -1, 54, -1, 56, -1, -1, 59, 60 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -927,33 +960,34 @@ static const unsigned char yystos[] = 0, 44, 68, 96, 97, 0, 44, 69, 1, 3, 4, 7, 8, 16, 17, 34, 35, 40, 41, 42, 43, 45, 51, 52, 54, 56, 59, 60, 70, 71, - 75, 77, 79, 97, 104, 108, 109, 110, 112, 60, - 62, 76, 111, 112, 112, 112, 60, 60, 56, 60, - 109, 112, 109, 77, 109, 110, 112, 1, 103, 104, - 64, 66, 72, 81, 96, 113, 117, 72, 78, 9, + 75, 77, 79, 97, 104, 108, 109, 110, 111, 113, + 114, 60, 62, 76, 112, 113, 113, 113, 60, 60, + 109, 113, 109, 109, 60, 111, 113, 1, 103, 104, + 64, 66, 72, 81, 96, 116, 120, 72, 78, 9, 14, 37, 38, 39, 46, 48, 49, 50, 106, 107, - 109, 11, 51, 52, 53, 54, 55, 58, 12, 13, - 40, 41, 45, 105, 102, 103, 104, 103, 3, 4, - 42, 43, 73, 74, 49, 98, 102, 102, 104, 1, - 48, 61, 115, 119, 115, 97, 80, 97, 5, 104, - 4, 104, 104, 104, 104, 104, 35, 109, 109, 109, - 109, 109, 109, 13, 104, 115, 63, 60, 109, 115, - 115, 104, 97, 37, 1, 104, 1, 18, 20, 21, - 22, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 36, 65, 82, 84, 91, 95, 104, 113, 114, 117, - 47, 111, 1, 4, 99, 100, 4, 60, 83, 4, - 60, 60, 60, 97, 60, 81, 81, 81, 101, 104, - 81, 97, 81, 85, 80, 116, 117, 97, 104, 115, - 1, 119, 104, 101, 62, 4, 104, 104, 82, 4, - 84, 86, 81, 60, 92, 102, 114, 97, 97, 1, - 4, 115, 81, 103, 61, 115, 115, 25, 37, 117, - 104, 10, 93, 97, 63, 97, 97, 60, 4, 97, - 119, 94, 82, 113, 82, 104, 115, 104, 117, 103, - 108, 19, 87, 88, 115, 97, 117, 97, 115, 97, - 97, 1, 23, 24, 89, 97, 82, 97, 86, 82, - 114, 7, 8, 51, 52, 77, 90, 47, 118, 86, - 115, 7, 7, 118, 97, 115, 97, 97, 80, 97, - 82, 80, 82 + 11, 109, 51, 52, 53, 54, 55, 58, 51, 52, + 53, 54, 55, 58, 12, 13, 40, 41, 45, 105, + 102, 103, 104, 103, 3, 4, 42, 43, 73, 74, + 49, 98, 102, 102, 104, 40, 41, 115, 1, 48, + 61, 118, 122, 118, 97, 80, 97, 5, 104, 4, + 104, 104, 104, 104, 104, 35, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 13, 104, + 118, 63, 60, 109, 118, 118, 104, 97, 37, 1, + 104, 1, 18, 20, 21, 22, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 36, 65, 82, 84, 91, + 95, 104, 116, 117, 120, 47, 112, 1, 4, 99, + 100, 4, 60, 83, 4, 60, 60, 60, 97, 60, + 81, 81, 81, 101, 104, 81, 97, 81, 85, 80, + 119, 120, 97, 104, 118, 1, 122, 104, 101, 62, + 4, 104, 104, 82, 4, 84, 86, 81, 60, 92, + 102, 117, 97, 97, 1, 4, 118, 81, 103, 61, + 118, 118, 25, 37, 120, 104, 10, 93, 97, 63, + 97, 97, 60, 4, 97, 122, 94, 82, 116, 82, + 104, 118, 104, 120, 103, 108, 19, 87, 88, 118, + 97, 120, 97, 118, 97, 97, 1, 23, 24, 89, + 97, 82, 97, 86, 82, 117, 7, 8, 51, 52, + 77, 90, 47, 121, 86, 118, 7, 7, 121, 97, + 118, 97, 97, 80, 97, 82, 80, 82 }; #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) @@ -1594,14 +1628,14 @@ yyreduce: switch (yyn) { case 2: -#line 172 "awkgram.y" +#line 179 "awkgram.y" { check_funcs(); } break; case 4: -#line 180 "awkgram.y" +#line 187 "awkgram.y" { begin_or_end_rule = parsing_end_rule = FALSE; yyerrok; @@ -1609,7 +1643,7 @@ yyreduce: break; case 5: -#line 185 "awkgram.y" +#line 192 "awkgram.y" { begin_or_end_rule = parsing_end_rule = FALSE; /* @@ -1621,14 +1655,14 @@ yyreduce: break; case 6: -#line 197 "awkgram.y" +#line 204 "awkgram.y" { (yyvsp[-1].nodeval)->rnode = (yyvsp[0].nodeval); } break; case 7: -#line 201 "awkgram.y" +#line 208 "awkgram.y" { if ((yyvsp[-1].nodeval)->lnode != NULL) { /* pattern rule with non-empty pattern */ @@ -1646,7 +1680,7 @@ yyreduce: break; case 8: -#line 216 "awkgram.y" +#line 223 "awkgram.y" { can_return = FALSE; if ((yyvsp[-1].nodeval)) @@ -1656,21 +1690,21 @@ yyreduce: break; case 9: -#line 226 "awkgram.y" +#line 233 "awkgram.y" { (yyval.nodeval) = append_pattern(&expression_value, (NODE *) NULL); } break; case 10: -#line 230 "awkgram.y" +#line 237 "awkgram.y" { (yyval.nodeval) = append_pattern(&expression_value, (yyvsp[0].nodeval)); } break; case 11: -#line 234 "awkgram.y" +#line 241 "awkgram.y" { NODE *r; @@ -1683,38 +1717,46 @@ yyreduce: break; case 12: -#line 244 "awkgram.y" +#line 251 "awkgram.y" { + static int begin_seen = 0; + if (do_lint_old && ++begin_seen == 2) + warning(_("old awk does not support multiple `BEGIN' or `END' rules")); + begin_or_end_rule = TRUE; (yyval.nodeval) = append_pattern(&begin_block, (NODE *) NULL); } break; case 13: -#line 249 "awkgram.y" +#line 260 "awkgram.y" { + static int end_seen = 0; + if (do_lint_old && ++end_seen == 2) + warning(_("old awk does not support multiple `BEGIN' or `END' rules")); + begin_or_end_rule = parsing_end_rule = TRUE; (yyval.nodeval) = append_pattern(&end_block, (NODE *) NULL); } break; case 14: -#line 257 "awkgram.y" +#line 272 "awkgram.y" { (yyval.nodeval) = (yyvsp[-3].nodeval); } break; case 15: -#line 262 "awkgram.y" +#line 277 "awkgram.y" { (yyval.sval) = (yyvsp[0].sval); } break; case 16: -#line 264 "awkgram.y" +#line 279 "awkgram.y" { (yyval.sval) = (yyvsp[0].sval); } break; case 17: -#line 266 "awkgram.y" +#line 281 "awkgram.y" { yyerror(_("`%s' is a built-in function, it cannot be redefined"), tokstart); @@ -1725,14 +1767,14 @@ yyreduce: break; case 20: -#line 282 "awkgram.y" +#line 297 "awkgram.y" { param_counter = 0; } break; case 21: -#line 286 "awkgram.y" +#line 301 "awkgram.y" { NODE *t; @@ -1747,12 +1789,12 @@ yyreduce: break; case 22: -#line 305 "awkgram.y" +#line 320 "awkgram.y" { ++want_regexp; } break; case 23: -#line 307 "awkgram.y" +#line 322 "awkgram.y" { NODE *n; size_t len = strlen((yyvsp[0].sval)); @@ -1776,12 +1818,12 @@ yyreduce: break; case 26: -#line 336 "awkgram.y" +#line 351 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 27: -#line 338 "awkgram.y" +#line 353 "awkgram.y" { if ((yyvsp[0].nodeval) == NULL) (yyval.nodeval) = (yyvsp[-1].nodeval); @@ -1802,42 +1844,42 @@ yyreduce: break; case 28: -#line 356 "awkgram.y" +#line 371 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 31: -#line 366 "awkgram.y" +#line 381 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 32: -#line 368 "awkgram.y" +#line 383 "awkgram.y" { (yyval.nodeval) = (yyvsp[-1].nodeval); } break; case 33: -#line 370 "awkgram.y" +#line 385 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; case 34: -#line 372 "awkgram.y" +#line 387 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-6].nodeval), Node_K_switch, (yyvsp[-2].nodeval)); } break; case 35: -#line 374 "awkgram.y" +#line 389 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-3].nodeval), Node_K_while, (yyvsp[0].nodeval)); } break; case 36: -#line 376 "awkgram.y" +#line 391 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_K_do, (yyvsp[-5].nodeval)); } break; case 37: -#line 378 "awkgram.y" +#line 393 "awkgram.y" { /* * Efficiency hack. Recognize the special case of @@ -1884,14 +1926,14 @@ yyreduce: break; case 38: -#line 422 "awkgram.y" +#line 437 "awkgram.y" { (yyval.nodeval) = node((yyvsp[0].nodeval), Node_K_for, (NODE *) make_for_loop((yyvsp[-9].nodeval), (yyvsp[-6].nodeval), (yyvsp[-3].nodeval))); } break; case 39: -#line 426 "awkgram.y" +#line 441 "awkgram.y" { (yyval.nodeval) = node((yyvsp[0].nodeval), Node_K_for, (NODE *) make_for_loop((yyvsp[-8].nodeval), (NODE *) NULL, (yyvsp[-3].nodeval))); @@ -1899,17 +1941,17 @@ yyreduce: break; case 40: -#line 432 "awkgram.y" +#line 447 "awkgram.y" { (yyval.nodeval) = node((NODE *) NULL, Node_K_break, (NODE *) NULL); } break; case 41: -#line 435 "awkgram.y" +#line 450 "awkgram.y" { (yyval.nodeval) = node((NODE *) NULL, Node_K_continue, (NODE *) NULL); } break; case 42: -#line 437 "awkgram.y" +#line 452 "awkgram.y" { NODETYPE type; if (begin_or_end_rule) @@ -1921,8 +1963,10 @@ yyreduce: break; case 43: -#line 446 "awkgram.y" +#line 461 "awkgram.y" { + static short warned = FALSE; + if (do_traditional) { /* * can't use yyerror, since may have overshot @@ -1931,8 +1975,10 @@ yyreduce: errcount++; error(_("`nextfile' is a gawk extension")); } - if (do_lint) + if (do_lint && ! warned) { + warned = TRUE; lintwarn(_("`nextfile' is a gawk extension")); + } if (begin_or_end_rule) { /* same thing */ errcount++; @@ -1944,12 +1990,12 @@ yyreduce: break; case 44: -#line 466 "awkgram.y" +#line 485 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-1].nodeval), Node_K_exit, (NODE *) NULL); } break; case 45: -#line 468 "awkgram.y" +#line 487 "awkgram.y" { if (! can_return) yyerror(_("`return' used outside function context")); @@ -1957,7 +2003,7 @@ yyreduce: break; case 46: -#line 473 "awkgram.y" +#line 492 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-1].nodeval) == NULL ? Nnull_string : (yyvsp[-1].nodeval), Node_K_return, (NODE *) NULL); @@ -1965,12 +2011,12 @@ yyreduce: break; case 48: -#line 489 "awkgram.y" +#line 508 "awkgram.y" { in_print = TRUE; in_parens = 0; } break; case 49: -#line 490 "awkgram.y" +#line 509 "awkgram.y" { /* * Optimization: plain `print' has no expression list, so $3 is null. @@ -1986,7 +2032,7 @@ yyreduce: && (yyvsp[-1].nodeval)->lnode->lnode->type == Node_val && (yyvsp[-1].nodeval)->lnode->lnode->numbr == 0.0)) ) { - static int warned = FALSE; + static short warned = FALSE; (yyval.nodeval) = node(NULL, Node_K_print_rec, (yyvsp[0].nodeval)); @@ -2004,15 +2050,19 @@ yyreduce: break; case 50: -#line 521 "awkgram.y" +#line 540 "awkgram.y" { (yyval.nodeval) = node(variable((yyvsp[-3].sval), CAN_FREE, Node_var_array), Node_K_delete, (yyvsp[-1].nodeval)); } break; case 51: -#line 523 "awkgram.y" +#line 542 "awkgram.y" { - if (do_lint) + static short warned = FALSE; + + if (do_lint && ! warned) { + warned = TRUE; lintwarn(_("`delete array' is a gawk extension")); + } if (do_traditional) { /* * can't use yyerror, since may have overshot @@ -2026,11 +2076,18 @@ yyreduce: break; case 52: -#line 537 "awkgram.y" +#line 560 "awkgram.y" { - /* this is for tawk compatibility. maybe the warnings should always be done. */ - if (do_lint) + /* + * this is for tawk compatibility. maybe the warnings + * should always be done. + */ + static short warned = FALSE; + + if (do_lint && ! warned) { + warned = TRUE; lintwarn(_("`delete(array)' is a non-portable tawk extension")); + } if (do_traditional) { /* * can't use yyerror, since may have overshot @@ -2044,22 +2101,22 @@ yyreduce: break; case 53: -#line 552 "awkgram.y" +#line 582 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; case 54: -#line 557 "awkgram.y" +#line 587 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 55: -#line 559 "awkgram.y" +#line 589 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; case 56: -#line 564 "awkgram.y" +#line 594 "awkgram.y" { if ((yyvsp[0].nodeval) == NULL) { (yyval.nodeval) = NULL; @@ -2111,12 +2168,12 @@ yyreduce: break; case 57: -#line 616 "awkgram.y" +#line 646 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 58: -#line 618 "awkgram.y" +#line 648 "awkgram.y" { if ((yyvsp[0].nodeval) == NULL) (yyval.nodeval) = (yyvsp[-1].nodeval); @@ -2136,27 +2193,27 @@ yyreduce: break; case 59: -#line 635 "awkgram.y" +#line 665 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 60: -#line 640 "awkgram.y" +#line 670 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-3].nodeval), Node_K_case, (yyvsp[0].nodeval)); } break; case 61: -#line 642 "awkgram.y" +#line 672 "awkgram.y" { (yyval.nodeval) = node((NODE *) NULL, Node_K_default, (yyvsp[0].nodeval)); } break; case 62: -#line 647 "awkgram.y" +#line 677 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; case 63: -#line 649 "awkgram.y" +#line 679 "awkgram.y" { (yyvsp[0].nodeval)->numbr = -(force_number((yyvsp[0].nodeval))); (yyval.nodeval) = (yyvsp[0].nodeval); @@ -2164,27 +2221,27 @@ yyreduce: break; case 64: -#line 654 "awkgram.y" +#line 684 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; case 65: -#line 656 "awkgram.y" +#line 686 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; case 66: -#line 658 "awkgram.y" +#line 688 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; case 70: -#line 673 "awkgram.y" +#line 703 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-3].nodeval), Node_expression_list, (yyvsp[-1].nodeval)); } break; case 71: -#line 678 "awkgram.y" +#line 708 "awkgram.y" { in_print = FALSE; in_parens = 0; @@ -2193,12 +2250,12 @@ yyreduce: break; case 72: -#line 683 "awkgram.y" +#line 713 "awkgram.y" { in_print = FALSE; in_parens = 0; } break; case 73: -#line 684 "awkgram.y" +#line 714 "awkgram.y" { (yyval.nodeval) = node((yyvsp[0].nodeval), (yyvsp[-2].nodetypeval), (NODE *) NULL); if ((yyvsp[-2].nodetypeval) == Node_redirect_twoway @@ -2210,7 +2267,7 @@ yyreduce: break; case 74: -#line 696 "awkgram.y" +#line 726 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-3].nodeval), Node_K_if, node((yyvsp[0].nodeval), Node_if_branches, (NODE *) NULL)); @@ -2218,83 +2275,83 @@ yyreduce: break; case 75: -#line 702 "awkgram.y" +#line 732 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-6].nodeval), Node_K_if, node((yyvsp[-3].nodeval), Node_if_branches, (yyvsp[0].nodeval))); } break; case 80: -#line 718 "awkgram.y" +#line 748 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 81: -#line 720 "awkgram.y" +#line 750 "awkgram.y" { (yyval.nodeval) = node((yyvsp[0].nodeval), Node_redirect_input, (NODE *) NULL); } break; case 82: -#line 725 "awkgram.y" +#line 755 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 83: -#line 727 "awkgram.y" +#line 757 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; case 84: -#line 732 "awkgram.y" +#line 762 "awkgram.y" { (yyval.nodeval) = make_param((yyvsp[0].sval)); } break; case 85: -#line 734 "awkgram.y" +#line 764 "awkgram.y" { (yyval.nodeval) = append_right((yyvsp[-2].nodeval), make_param((yyvsp[0].sval))); yyerrok; } break; case 86: -#line 736 "awkgram.y" +#line 766 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 87: -#line 738 "awkgram.y" +#line 768 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 88: -#line 740 "awkgram.y" +#line 770 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 89: -#line 746 "awkgram.y" +#line 776 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 90: -#line 748 "awkgram.y" +#line 778 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; case 91: -#line 753 "awkgram.y" +#line 783 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 92: -#line 755 "awkgram.y" +#line 785 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; case 93: -#line 760 "awkgram.y" +#line 790 "awkgram.y" { (yyval.nodeval) = node((yyvsp[0].nodeval), Node_expression_list, (NODE *) NULL); } break; case 94: -#line 762 "awkgram.y" +#line 792 "awkgram.y" { (yyval.nodeval) = append_right((yyvsp[-2].nodeval), node((yyvsp[0].nodeval), Node_expression_list, (NODE *) NULL)); @@ -2303,27 +2360,27 @@ yyreduce: break; case 95: -#line 768 "awkgram.y" +#line 798 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 96: -#line 770 "awkgram.y" +#line 800 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 97: -#line 772 "awkgram.y" +#line 802 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 98: -#line 774 "awkgram.y" +#line 804 "awkgram.y" { (yyval.nodeval) = NULL; } break; case 99: -#line 779 "awkgram.y" +#line 809 "awkgram.y" { if (do_lint && (yyvsp[0].nodeval)->type == Node_regex) lintwarn(_("regular expression on right of assignment")); @@ -2345,17 +2402,17 @@ yyreduce: break; case 100: -#line 798 "awkgram.y" +#line 828 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_and, (yyvsp[0].nodeval)); } break; case 101: -#line 800 "awkgram.y" +#line 830 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_or, (yyvsp[0].nodeval)); } break; case 102: -#line 802 "awkgram.y" +#line 832 "awkgram.y" { if ((yyvsp[-2].nodeval)->type == Node_regex) warning(_("regular expression on left of `~' or `!~' operator")); @@ -2364,12 +2421,16 @@ yyreduce: break; case 103: -#line 808 "awkgram.y" - { (yyval.nodeval) = node(variable((yyvsp[0].sval), CAN_FREE, Node_var_array), Node_in_array, (yyvsp[-2].nodeval)); } +#line 838 "awkgram.y" + { + if (do_lint_old) + warning(_("old awk does not support the keyword `in' except after `for'")); + (yyval.nodeval) = node(variable((yyvsp[0].sval), CAN_FREE, Node_var_array), Node_in_array, (yyvsp[-2].nodeval)); + } break; case 104: -#line 810 "awkgram.y" +#line 844 "awkgram.y" { if (do_lint && (yyvsp[0].nodeval)->type == Node_regex) lintwarn(_("regular expression on right of comparison")); @@ -2378,108 +2439,92 @@ yyreduce: break; case 105: -#line 816 "awkgram.y" +#line 850 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-4].nodeval), Node_cond_exp, node((yyvsp[-2].nodeval), Node_if_branches, (yyvsp[0].nodeval)));} break; case 106: -#line 818 "awkgram.y" +#line 852 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; case 107: -#line 823 "awkgram.y" +#line 857 "awkgram.y" { (yyval.nodetypeval) = (yyvsp[0].nodetypeval); } break; case 108: -#line 825 "awkgram.y" +#line 859 "awkgram.y" { (yyval.nodetypeval) = (yyvsp[0].nodetypeval); } break; case 109: -#line 827 "awkgram.y" +#line 861 "awkgram.y" { (yyval.nodetypeval) = Node_assign_quotient; } break; case 110: -#line 832 "awkgram.y" +#line 866 "awkgram.y" { (yyval.nodetypeval) = (yyvsp[0].nodetypeval); } break; case 111: -#line 834 "awkgram.y" +#line 868 "awkgram.y" { (yyval.nodetypeval) = Node_less; } break; case 113: -#line 839 "awkgram.y" +#line 873 "awkgram.y" { (yyval.nodetypeval) = Node_greater; } break; case 114: -#line 844 "awkgram.y" +#line 878 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; case 115: -#line 846 "awkgram.y" - { - (yyval.nodeval) = node(node(make_number(0.0), - Node_field_spec, - (NODE *) NULL), - Node_nomatch, - (yyvsp[0].nodeval)); - } - break; - - case 116: -#line 854 "awkgram.y" - { (yyval.nodeval) = node(variable((yyvsp[0].sval), CAN_FREE, Node_var_array), Node_in_array, (yyvsp[-3].nodeval)); } - break; - - case 117: -#line 856 "awkgram.y" +#line 880 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; - case 118: -#line 858 "awkgram.y" + case 116: +#line 882 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-1].nodeval), Node_concat, (yyvsp[0].nodeval)); } break; - case 120: -#line 865 "awkgram.y" + case 118: +#line 889 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_exp, (yyvsp[0].nodeval)); } break; - case 121: -#line 867 "awkgram.y" + case 119: +#line 891 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_times, (yyvsp[0].nodeval)); } break; - case 122: -#line 869 "awkgram.y" + case 120: +#line 893 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_quotient, (yyvsp[0].nodeval)); } break; - case 123: -#line 871 "awkgram.y" + case 121: +#line 895 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_mod, (yyvsp[0].nodeval)); } break; - case 124: -#line 873 "awkgram.y" + case 122: +#line 897 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_plus, (yyvsp[0].nodeval)); } break; - case 125: -#line 875 "awkgram.y" + case 123: +#line 899 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_minus, (yyvsp[0].nodeval)); } break; - case 126: -#line 877 "awkgram.y" + case 124: +#line 901 "awkgram.y" { if (do_lint && parsing_end_rule && (yyvsp[0].nodeval) == NULL) lintwarn(_("non-redirected `getline' undefined inside END action")); @@ -2487,57 +2532,109 @@ yyreduce: } break; + case 125: +#line 907 "awkgram.y" + { (yyval.nodeval) = node((yyvsp[-1].nodeval), Node_postincrement, (NODE *) NULL); } + break; + + case 126: +#line 909 "awkgram.y" + { (yyval.nodeval) = node((yyvsp[-1].nodeval), Node_postdecrement, (NODE *) NULL); } + break; + case 127: -#line 883 "awkgram.y" +#line 911 "awkgram.y" { - (yyval.nodeval) = node((yyvsp[0].nodeval), Node_K_getline, - node((yyvsp[-3].nodeval), (yyvsp[-2].nodetypeval), (NODE *) NULL)); + if (do_lint_old) { + warning(_("old awk does not support the keyword `in' except after `for'")); + warning(_("old awk does not support multidimensional arrays")); + } + (yyval.nodeval) = node(variable((yyvsp[0].sval), CAN_FREE, Node_var_array), Node_in_array, (yyvsp[-3].nodeval)); } break; case 128: -#line 888 "awkgram.y" - { (yyval.nodeval) = node((yyvsp[-1].nodeval), Node_postincrement, (NODE *) NULL); } +#line 924 "awkgram.y" + { + (yyval.nodeval) = node((yyvsp[0].nodeval), Node_K_getline, + node((yyvsp[-3].nodeval), (yyvsp[-2].nodetypeval), (NODE *) NULL)); + } break; case 129: -#line 890 "awkgram.y" - { (yyval.nodeval) = node((yyvsp[-1].nodeval), Node_postdecrement, (NODE *) NULL); } +#line 929 "awkgram.y" + { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_exp, (yyvsp[0].nodeval)); } break; case 130: -#line 895 "awkgram.y" - { (yyval.nodeval) = node((yyvsp[0].nodeval), Node_not, (NODE *) NULL); } +#line 931 "awkgram.y" + { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_times, (yyvsp[0].nodeval)); } break; case 131: -#line 897 "awkgram.y" - { (yyval.nodeval) = (yyvsp[-1].nodeval); } +#line 933 "awkgram.y" + { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_quotient, (yyvsp[0].nodeval)); } break; case 132: -#line 900 "awkgram.y" - { (yyval.nodeval) = snode((yyvsp[-1].nodeval), Node_builtin, (int) (yyvsp[-3].lval)); } +#line 935 "awkgram.y" + { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_mod, (yyvsp[0].nodeval)); } break; case 133: -#line 902 "awkgram.y" - { (yyval.nodeval) = snode((yyvsp[-1].nodeval), Node_builtin, (int) (yyvsp[-3].lval)); } +#line 937 "awkgram.y" + { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_plus, (yyvsp[0].nodeval)); } break; case 134: -#line 904 "awkgram.y" +#line 939 "awkgram.y" + { (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_minus, (yyvsp[0].nodeval)); } + break; + + case 135: +#line 944 "awkgram.y" + { (yyval.nodeval) = (yyvsp[0].nodeval); } + break; + + case 136: +#line 946 "awkgram.y" + { (yyval.nodeval) = node((yyvsp[0].nodeval), Node_not, (NODE *) NULL); } + break; + + case 137: +#line 948 "awkgram.y" + { (yyval.nodeval) = (yyvsp[-1].nodeval); } + break; + + case 138: +#line 951 "awkgram.y" + { (yyval.nodeval) = snode((yyvsp[-1].nodeval), Node_builtin, (int) (yyvsp[-3].lval)); } + break; + + case 139: +#line 953 "awkgram.y" + { (yyval.nodeval) = snode((yyvsp[-1].nodeval), Node_builtin, (int) (yyvsp[-3].lval)); } + break; + + case 140: +#line 955 "awkgram.y" { - if (do_lint) + static short warned1 = FALSE, warned2 = FALSE; + + if (do_lint && ! warned1) { + warned1 = TRUE; lintwarn(_("call of `length' without parentheses is not portable")); + } (yyval.nodeval) = snode((NODE *) NULL, Node_builtin, (int) (yyvsp[0].lval)); - if (do_posix) + if (do_posix && ! warned2) { + warned2 = TRUE; warning(_("call of `length' without parentheses is deprecated by POSIX")); + } } break; - case 135: -#line 912 "awkgram.y" + case 141: +#line 969 "awkgram.y" { (yyval.nodeval) = node((yyvsp[-1].nodeval), Node_func_call, make_string((yyvsp[-3].sval), strlen((yyvsp[-3].sval)))); (yyval.nodeval)->funcbody = NULL; @@ -2547,28 +2644,28 @@ yyreduce: } break; - case 137: -#line 921 "awkgram.y" + case 143: +#line 978 "awkgram.y" { (yyval.nodeval) = node((yyvsp[0].nodeval), Node_preincrement, (NODE *) NULL); } break; - case 138: -#line 923 "awkgram.y" + case 144: +#line 980 "awkgram.y" { (yyval.nodeval) = node((yyvsp[0].nodeval), Node_predecrement, (NODE *) NULL); } break; - case 139: -#line 925 "awkgram.y" + case 145: +#line 982 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; - case 140: -#line 927 "awkgram.y" + case 146: +#line 984 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; - case 141: -#line 930 "awkgram.y" + case 147: +#line 987 "awkgram.y" { if ((yyvsp[0].nodeval)->type == Node_val && ((yyvsp[0].nodeval)->flags & (STRCUR|STRING)) == 0) { (yyvsp[0].nodeval)->numbr = -(force_number((yyvsp[0].nodeval))); @@ -2578,8 +2675,8 @@ yyreduce: } break; - case 142: -#line 938 "awkgram.y" + case 148: +#line 995 "awkgram.y" { /* * was: $$ = $2 @@ -2589,29 +2686,30 @@ yyreduce: } break; - case 143: -#line 949 "awkgram.y" + case 149: +#line 1006 "awkgram.y" { (yyval.nodeval) = NULL; } break; - case 144: -#line 951 "awkgram.y" + case 150: +#line 1008 "awkgram.y" { (yyval.nodeval) = (yyvsp[0].nodeval); } break; - case 145: -#line 956 "awkgram.y" + case 151: +#line 1013 "awkgram.y" { (yyval.nodeval) = variable((yyvsp[0].sval), CAN_FREE, Node_var_new); } break; - case 146: -#line 958 "awkgram.y" + case 152: +#line 1015 "awkgram.y" { NODE *n; - if ((n = lookup((yyvsp[-3].sval))) != NULL && ! isarray(n)) + if ((n = lookup((yyvsp[-3].sval))) != NULL && ! isarray(n)) { yyerror(_("use of non-array as array")); - else if ((yyvsp[-1].nodeval) == NULL) { + (yyval.nodeval) = node(variable((yyvsp[-3].sval), CAN_FREE, Node_var_array), Node_subscript, (yyvsp[-1].nodeval)); + } else if ((yyvsp[-1].nodeval) == NULL) { fatal(_("invalid subscript expression")); } else if ((yyvsp[-1].nodeval)->rnode == NULL) { (yyval.nodeval) = node(variable((yyvsp[-3].sval), CAN_FREE, Node_var_array), Node_subscript, (yyvsp[-1].nodeval)->lnode); @@ -2621,33 +2719,63 @@ yyreduce: } break; - case 147: -#line 972 "awkgram.y" - { (yyval.nodeval) = node((yyvsp[0].nodeval), Node_field_spec, (NODE *) NULL); } + case 153: +#line 1029 "awkgram.y" + { (yyval.nodeval) = (yyvsp[0].nodeval); } break; - case 149: -#line 986 "awkgram.y" + case 154: +#line 1040 "awkgram.y" + { + NODE *n = node((yyvsp[-1].nodeval), Node_field_spec, (NODE *) NULL); + if ((yyvsp[0].sval) != NULL) { + if ((yyvsp[0].sval)[0] == '+') + (yyval.nodeval) = node(n, Node_postincrement, (NODE *) NULL); + else + (yyval.nodeval) = node(n, Node_postdecrement, (NODE *) NULL); + } else { + (yyval.nodeval) = n; + } + } + break; + + case 155: +#line 1054 "awkgram.y" + { (yyval.sval) = "+"; } + break; + + case 156: +#line 1055 "awkgram.y" + { (yyval.sval) = "-"; } + break; + + case 157: +#line 1056 "awkgram.y" + { (yyval.sval) = NULL; } + break; + + case 159: +#line 1064 "awkgram.y" { yyerrok; } break; - case 150: -#line 990 "awkgram.y" + case 160: +#line 1068 "awkgram.y" { yyerrok; } break; - case 153: -#line 999 "awkgram.y" + case 163: +#line 1077 "awkgram.y" { yyerrok; } break; - case 154: -#line 1003 "awkgram.y" + case 164: +#line 1081 "awkgram.y" { yyerrok; } break; - case 155: -#line 1006 "awkgram.y" + case 165: +#line 1084 "awkgram.y" { yyerrok; } break; @@ -2655,7 +2783,7 @@ yyreduce: } /* Line 1037 of yacc.c. */ -#line 2661 "y.tab.c" +#line 2789 "y.tab.c" yyvsp -= yylen; yyssp -= yylen; @@ -2883,7 +3011,7 @@ yyreturn: } -#line 1009 "awkgram.y" +#line 1087 "awkgram.y" struct token { @@ -2966,7 +3094,7 @@ static const struct token tokentab[] = { #if defined(GAWKDEBUG) || defined(ARRAYDEBUG) /* || ... */ {"stopme", Node_builtin, LEX_BUILTIN, GAWKX|A(0), stopme}, #endif -{"strftime", Node_builtin, LEX_BUILTIN, GAWKX|A(0)|A(1)|A(2), do_strftime}, +{"strftime", Node_builtin, LEX_BUILTIN, GAWKX|A(0)|A(1)|A(2)|A(3), do_strftime}, {"strtonum", Node_builtin, LEX_BUILTIN, GAWKX|A(1), do_strtonum}, {"sub", Node_builtin, LEX_BUILTIN, NOT_OLD|A(2)|A(3), do_sub}, {"substr", Node_builtin, LEX_BUILTIN, A(2)|A(3), do_substr}, @@ -3022,7 +3150,7 @@ getfname(register NODE *(*fptr)(NODE *)) */ static void -#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__ +#ifdef CAN_USE_STDARG_H yyerror(const char *m, ...) #else /* VARARGS0 */ @@ -3077,7 +3205,7 @@ static void *bp = save; -#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__ +#ifdef CAN_USE_STDARG_H va_start(args, m); if (mesg == NULL) mesg = m; @@ -3118,6 +3246,14 @@ get_src_buf() static size_t buflen = 0; static int fd; + /* + * No argument prototype on readfunc on purpose, + * avoids problems with some ancient systems where + * the types of arguments to read() aren't up to date. + */ + static ssize_t (*readfunc)() = 0; + static int (*closefunc)P((int fd)) = NULL; + int n; register char *scan; int newfile; @@ -3126,6 +3262,19 @@ get_src_buf() int l; char *readloc; + if (readfunc == NULL) { + char *cp = getenv("AWKREADFUNC"); + + /* If necessary, one day, test value for different functions. */ + if (cp == NULL) { + readfunc = read; + closefunc = close; + } else { + readfunc = read_one_line; + closefunc = one_line_close; + } + } + again: newfile = FALSE; if (nextfile > numfiles) @@ -3138,7 +3287,7 @@ again: * gawk '' /path/name * Sigh. */ - static int warned = FALSE; + static short warned = FALSE; if (do_lint && ! warned) { warned = TRUE; @@ -3150,6 +3299,7 @@ again: if (srcfiles[nextfile].val[l-1] == '\n') { /* has terminating newline, can use it directly */ sourceline = 1; + source = NULL; lexptr = lexptr_begin = srcfiles[nextfile].val; /* fall through to pointer adjustment and return, below */ } else { @@ -3171,6 +3321,8 @@ again: buf[++l] = '\0'; /* set vars and return */ + sourceline = 0; + source = NULL; lexptr = lexptr_begin = buf; } lexend = lexptr + l; @@ -3244,12 +3396,33 @@ again: } } - if (scan <= buf) { + /* + * This condition can be read as follows: IF + * 1. The beginning of the line is at the beginning of the + * buffer (no newline was found: scan <= buf) + * AND: + * 2. The start of valid lexical data is into the buffer + * (lexptr_begin > buf) + * OR: + * 3. We have scanned past the end of the last data read + * (lexptr == lexend) + * AND: + * 4. There's no room left in the buffer + * (lexptr_offset >= buflen - 2) + * + * If all that's true, grow the buffer to add more to + * the current line. + */ + + if (scan <= buf + && (lexptr_begin > buf + || (lexptr == lexend + && lexptr_offset >= buflen - 2))) { /* have to grow the buffer */ buflen *= 2; erealloc(buf, char *, buflen, "get_src_buf"); - } else { - /* shift things down */ + } else if (scan > buf) { + /* Line starts in middle of the buffer, shift things down. */ memmove(buf, scan, lexend - scan); /* * make offsets relative to start of line, @@ -3270,13 +3443,13 @@ again: } /* add more data to buffer */ - n = read(fd, readloc, readcount); + n = (*readfunc)(fd, readloc, readcount); if (n == -1) fatal(_("can't read sourcefile `%s' (%s)"), source, strerror(errno)); if (n == 0) { if (newfile) { - static int warned = FALSE; + static short warned = FALSE; if (do_lint && ! warned) { warned = TRUE; @@ -3284,7 +3457,7 @@ again: } } if (fd != fileno(stdin)) /* safety */ - close(fd); + (*closefunc)(fd); samefile = FALSE; nextfile++; goto again; @@ -3463,7 +3636,8 @@ yylex(void) int mid; static int did_newline = FALSE; char *tokkey; - static int lasttok = 0, eof_warned = FALSE; + static int lasttok = 0; + static short eof_warned = FALSE; int inhex = FALSE; int intlstr = FALSE; @@ -3635,9 +3809,13 @@ retry: while ((c = nextc()) == ' ' || c == '\t' || c == '\r') continue; if (c == '#') { - if (do_lint) + static short warned = FALSE; + + if (do_lint && ! warned) { + warned = TRUE; lintwarn( _("use of `\\ #...' line continuation is not portable")); + } while ((c = nextc()) != '\n') if (c == EOF) break; @@ -4277,7 +4455,8 @@ snode(NODE *subn, NODETYPE op, int idx) r->subnode = subn; if (r->builtin == do_sprintf) { count_args(r); - r->lnode->printf_count = r->printf_count; /* hack */ + if (r->lnode != NULL) /* r->lnode set from subn. guard against syntax errors & check it's valid */ + r->lnode->printf_count = r->printf_count; /* hack */ } return r; } @@ -4397,7 +4576,7 @@ install(char *name, NODE *value) var_count++; len = strlen(name); - bucket = hash(name, len, (unsigned long) HASHSIZE); + bucket = hash(name, len, (unsigned long) HASHSIZE, NULL); getnode(hp); hp->type = Node_hashnode; hp->hnext = variables[bucket]; @@ -4418,7 +4597,7 @@ lookup(const char *name) register size_t len; len = strlen(name); - for (bucket = variables[hash(name, len, (unsigned long) HASHSIZE)]; + for (bucket = variables[hash(name, len, (unsigned long) HASHSIZE, NULL)]; bucket != NULL; bucket = bucket->hnext) if (bucket->hlength == len && STREQN(bucket->hname, name, len)) return bucket->hvalue; @@ -4799,7 +4978,7 @@ pop_var(NODE *np, int freeit) name = np->param; len = strlen(name); - save = &(variables[hash(name, len, (unsigned long) HASHSIZE)]); + save = &(variables[hash(name, len, (unsigned long) HASHSIZE, NULL)]); for (bucket = *save; bucket != NULL; bucket = bucket->hnext) { if (len == bucket->hlength && STREQN(bucket->hname, name, len)) { var_count--; @@ -4860,7 +5039,7 @@ func_use(const char *name, enum defref how) int ind; len = strlen(name); - ind = hash(name, len, HASHSIZE); + ind = hash(name, len, HASHSIZE, NULL); for (fp = ftable[ind]; fp != NULL; fp = fp->next) { if (strcmp(fp->name, name) == 0) { @@ -5250,4 +5429,50 @@ check_special(const char *name) return -1; } +/* + * This provides a private version of functions that act like VMS's + * variable-length record filesystem, where there was a bug on + * certain source files. + */ + +static FILE *fp = NULL; + +/* read_one_line --- return one input line at a time. mainly for debugging. */ + +static ssize_t +read_one_line(int fd, void *buffer, size_t count) +{ + char buf[BUFSIZ]; + + /* Minor potential memory leak here. Too bad. */ + if (fp == NULL) { + fp = fdopen(fd, "r"); + if (fp == NULL) { + fprintf(stderr, "ugh. fdopen: %s\n", strerror(errno)); + exit(1); + } + } + + if (fgets(buf, sizeof buf, fp) == NULL) + return 0; + + memcpy(buffer, buf, strlen(buf)); + return strlen(buf); +} + +/* one_line_close --- close the open file being read with read_one_line() */ + +static int +one_line_close(int fd) +{ + int ret; + + if (fp == NULL || fd != fileno(fp)) + fatal("debugging read/close screwed up!"); + + ret = fclose(fp); + fp = NULL; + return ret; +} + |