aboutsummaryrefslogtreecommitdiffstats
path: root/awkgram.c
diff options
context:
space:
mode:
Diffstat (limited to 'awkgram.c')
-rw-r--r--awkgram.c1385
1 files changed, 805 insertions, 580 deletions
diff --git a/awkgram.c b/awkgram.c
index ba2ed5e7..28759f6e 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -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;
+}
+