From 6cc7d587a710606d3fe52222707739c7cc1b8651 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 16 Jul 2010 13:22:00 +0300 Subject: Move to gawk-3.1.3. --- awkgram.c | 1536 +++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 882 insertions(+), 654 deletions(-) (limited to 'awkgram.c') diff --git a/awkgram.c b/awkgram.c index d11b4a54..29464ef0 100644 --- a/awkgram.c +++ b/awkgram.c @@ -72,28 +72,31 @@ LEX_ELSE = 274, LEX_RETURN = 275, LEX_DELETE = 276, - LEX_WHILE = 277, - LEX_DO = 278, - LEX_FOR = 279, - LEX_BREAK = 280, - LEX_CONTINUE = 281, - LEX_PRINT = 282, - LEX_PRINTF = 283, - LEX_NEXT = 284, - LEX_EXIT = 285, - LEX_FUNCTION = 286, - LEX_GETLINE = 287, - LEX_NEXTFILE = 288, - LEX_IN = 289, - LEX_AND = 290, - LEX_OR = 291, - INCREMENT = 292, - DECREMENT = 293, - LEX_BUILTIN = 294, - LEX_LENGTH = 295, - NEWLINE = 296, - SLASH_BEFORE_EQUAL = 297, - UNARY = 298 + LEX_SWITCH = 277, + LEX_CASE = 278, + LEX_DEFAULT = 279, + LEX_WHILE = 280, + LEX_DO = 281, + LEX_FOR = 282, + LEX_BREAK = 283, + LEX_CONTINUE = 284, + LEX_PRINT = 285, + LEX_PRINTF = 286, + LEX_NEXT = 287, + LEX_EXIT = 288, + LEX_FUNCTION = 289, + LEX_GETLINE = 290, + LEX_NEXTFILE = 291, + LEX_IN = 292, + LEX_AND = 293, + LEX_OR = 294, + INCREMENT = 295, + DECREMENT = 296, + LEX_BUILTIN = 297, + LEX_LENGTH = 298, + NEWLINE = 299, + SLASH_BEFORE_EQUAL = 300, + UNARY = 301 }; #endif #define FUNC_CALL 258 @@ -115,28 +118,31 @@ #define LEX_ELSE 274 #define LEX_RETURN 275 #define LEX_DELETE 276 -#define LEX_WHILE 277 -#define LEX_DO 278 -#define LEX_FOR 279 -#define LEX_BREAK 280 -#define LEX_CONTINUE 281 -#define LEX_PRINT 282 -#define LEX_PRINTF 283 -#define LEX_NEXT 284 -#define LEX_EXIT 285 -#define LEX_FUNCTION 286 -#define LEX_GETLINE 287 -#define LEX_NEXTFILE 288 -#define LEX_IN 289 -#define LEX_AND 290 -#define LEX_OR 291 -#define INCREMENT 292 -#define DECREMENT 293 -#define LEX_BUILTIN 294 -#define LEX_LENGTH 295 -#define NEWLINE 296 -#define SLASH_BEFORE_EQUAL 297 -#define UNARY 298 +#define LEX_SWITCH 277 +#define LEX_CASE 278 +#define LEX_DEFAULT 279 +#define LEX_WHILE 280 +#define LEX_DO 281 +#define LEX_FOR 282 +#define LEX_BREAK 283 +#define LEX_CONTINUE 284 +#define LEX_PRINT 285 +#define LEX_PRINTF 286 +#define LEX_NEXT 287 +#define LEX_EXIT 288 +#define LEX_FUNCTION 289 +#define LEX_GETLINE 290 +#define LEX_NEXTFILE 291 +#define LEX_IN 292 +#define LEX_AND 293 +#define LEX_OR 294 +#define INCREMENT 295 +#define DECREMENT 296 +#define LEX_BUILTIN 297 +#define LEX_LENGTH 298 +#define NEWLINE 299 +#define SLASH_BEFORE_EQUAL 300 +#define UNARY 301 @@ -178,6 +184,7 @@ static int isassignable P((NODE *n)); static void dumpintlstr P((const char *str, size_t len)); static void dumpintlstr2 P((const char *str1, size_t len1, const char *str2, size_t len2)); static void count_args P((NODE *n)); +static int isarray P((NODE *n)); enum defref { FUNC_DEFINE, FUNC_USE }; static void func_use P((const char *name, enum defref how)); @@ -240,7 +247,7 @@ static char builtin_func[] = "@builtin"; #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 109 "awkgram.y" +#line 110 "awkgram.y" typedef union YYSTYPE { long lval; AWKNUM fval; @@ -250,7 +257,7 @@ typedef union YYSTYPE { NODE *(*ptrval) P((void)); } YYSTYPE; /* Line 191 of yacc.c. */ -#line 253 "y.tab.c" +#line 260 "y.tab.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -262,7 +269,7 @@ typedef union YYSTYPE { /* Line 214 of yacc.c. */ -#line 265 "y.tab.c" +#line 272 "y.tab.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE @@ -363,20 +370,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 5 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 878 +#define YYLAST 1008 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 64 +#define YYNTOKENS 67 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 48 +#define YYNNTS 53 /* YYNRULES -- Number of rules. */ -#define YYNRULES 142 +#define YYNRULES 155 /* YYNRULES -- Number of states. */ -#define YYNSTATES 264 +#define YYNSTATES 293 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 298 +#define YYMAXUTOK 301 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -387,16 +394,16 @@ static const unsigned char yytranslate[] = 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 53, 2, 2, 56, 52, 2, 2, - 57, 58, 50, 48, 45, 49, 2, 51, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 44, 63, - 46, 2, 47, 43, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 56, 2, 2, 59, 55, 2, 2, + 60, 61, 53, 51, 48, 52, 2, 54, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 47, 66, + 49, 2, 50, 46, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 59, 2, 60, 55, 2, 2, 2, 2, 2, + 2, 62, 2, 63, 58, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 61, 2, 62, 2, 2, 2, 2, + 2, 2, 2, 64, 2, 65, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -413,7 +420,8 @@ static const unsigned char yytranslate[] = 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 54 + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 57 }; #if YYDEBUG @@ -424,89 +432,95 @@ static const unsigned short yyprhs[] = 0, 0, 3, 7, 8, 11, 14, 17, 20, 23, 24, 26, 30, 32, 34, 40, 42, 44, 46, 48, 50, 51, 59, 60, 64, 66, 68, 69, 72, 75, - 77, 80, 83, 87, 89, 96, 105, 114, 127, 139, - 142, 145, 148, 151, 155, 156, 161, 164, 165, 170, - 176, 179, 184, 186, 187, 189, 191, 193, 195, 201, - 202, 203, 207, 214, 224, 226, 229, 230, 232, 233, - 236, 237, 239, 241, 245, 247, 250, 254, 255, 257, - 258, 260, 262, 266, 268, 271, 275, 279, 283, 287, - 291, 295, 299, 303, 309, 311, 313, 315, 318, 320, - 322, 324, 326, 328, 331, 337, 339, 342, 344, 348, - 352, 356, 360, 364, 368, 372, 377, 380, 383, 386, - 390, 395, 400, 402, 407, 409, 412, 415, 417, 419, - 422, 425, 426, 428, 430, 435, 438, 441, 444, 446, - 447, 449, 451 + 77, 80, 83, 87, 89, 99, 106, 115, 124, 137, + 149, 152, 155, 158, 161, 165, 166, 171, 174, 175, + 180, 186, 189, 194, 196, 197, 199, 201, 202, 205, + 208, 214, 219, 221, 224, 227, 229, 231, 233, 235, + 237, 243, 244, 245, 249, 256, 266, 268, 271, 272, + 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 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yysigned_char yyrhs[] = { - 65, 0, -1, 90, 66, 90, -1, -1, 66, 67, - -1, 66, 1, -1, 68, 69, -1, 68, 78, -1, - 72, 69, -1, -1, 97, -1, 97, 45, 97, -1, - 16, -1, 17, -1, 106, 77, 107, 109, 90, -1, - 4, -1, 3, -1, 71, -1, 39, -1, 40, -1, - -1, 31, 73, 70, 57, 92, 108, 90, -1, -1, - 76, 75, 5, -1, 51, -1, 42, -1, -1, 77, - 79, -1, 77, 1, -1, 89, -1, 110, 90, -1, - 110, 90, -1, 106, 77, 107, -1, 88, -1, 22, - 57, 97, 108, 90, 79, -1, 23, 90, 79, 22, - 57, 97, 108, 90, -1, 24, 57, 4, 34, 4, - 108, 90, 79, -1, 24, 57, 83, 110, 90, 97, - 110, 90, 83, 108, 90, 79, -1, 24, 57, 83, - 110, 90, 110, 90, 83, 108, 90, 79, -1, 25, - 78, -1, 26, 78, -1, 29, 78, -1, 33, 78, - -1, 30, 94, 78, -1, -1, 20, 80, 94, 78, - -1, 81, 78, -1, -1, 84, 82, 85, 86, -1, - 21, 4, 59, 96, 60, -1, 21, 4, -1, 21, - 57, 4, 58, -1, 97, -1, -1, 81, -1, 27, - -1, 28, -1, 95, -1, 57, 97, 111, 96, 108, - -1, -1, -1, 10, 87, 101, -1, 18, 57, 97, - 108, 90, 79, -1, 18, 57, 97, 108, 90, 79, - 19, 90, 79, -1, 41, -1, 89, 41, -1, -1, - 89, -1, -1, 46, 102, -1, -1, 93, -1, 4, - -1, 93, 111, 4, -1, 1, -1, 93, 1, -1, - 93, 111, 1, -1, -1, 97, -1, -1, 96, -1, - 97, -1, 96, 111, 97, -1, 1, -1, 96, 1, - -1, 96, 1, 97, -1, 96, 111, 1, -1, 105, - 98, 97, -1, 97, 35, 97, -1, 97, 36, 97, - -1, 97, 14, 97, -1, 97, 34, 4, -1, 97, - 100, 97, -1, 97, 43, 97, 44, 97, -1, 101, - -1, 13, -1, 12, -1, 42, 13, -1, 9, -1, - 46, -1, 99, -1, 47, -1, 74, -1, 53, 74, - -1, 57, 96, 108, 34, 4, -1, 102, -1, 101, - 102, -1, 103, -1, 102, 55, 102, -1, 102, 50, - 102, -1, 102, 51, 102, -1, 102, 52, 102, -1, - 102, 48, 102, -1, 102, 49, 102, -1, 32, 104, - 91, -1, 102, 11, 32, 104, -1, 105, 37, -1, - 105, 38, -1, 53, 102, -1, 57, 97, 108, -1, - 39, 57, 95, 108, -1, 40, 57, 95, 108, -1, - 40, -1, 3, 57, 95, 108, -1, 105, -1, 37, - 105, -1, 38, 105, -1, 7, -1, 8, -1, 49, - 102, -1, 48, 102, -1, -1, 105, -1, 4, -1, - 4, 59, 96, 60, -1, 56, 103, -1, 61, 90, - -1, 62, 90, -1, 58, -1, -1, 110, -1, 63, - -1, 45, 90, -1 + 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, + 4, -1, 3, -1, 74, -1, 42, -1, 43, -1, + -1, 34, 76, 73, 60, 99, 115, 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, + 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, + -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, + 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, + 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 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short yyrline[] = { - 0, 170, 170, 176, 178, 183, 196, 200, 215, 226, + 0, 171, 171, 177, 179, 184, 196, 200, 215, 226, 229, 233, 243, 248, 256, 261, 263, 265, 276, 277, 282, 281, 305, 304, 327, 328, 333, 334, 352, 357, - 358, 362, 364, 366, 368, 370, 372, 412, 416, 421, - 424, 427, 436, 456, 459, 458, 465, 477, 477, 508, - 510, 524, 539, 545, 546, 551, 552, 560, 561, 567, - 572, 572, 583, 588, 595, 596, 599, 601, 606, 607, - 613, 614, 619, 621, 623, 625, 627, 634, 635, 641, - 642, 647, 649, 655, 657, 659, 661, 666, 672, 674, - 676, 682, 684, 690, 692, 697, 699, 701, 706, 708, - 712, 713, 718, 720, 728, 730, 732, 737, 739, 741, - 743, 745, 747, 749, 751, 757, 762, 764, 769, 771, - 773, 776, 778, 786, 794, 795, 797, 799, 801, 804, - 812, 824, 825, 830, 832, 842, 847, 851, 855, 858, - 860, 864, 867 + 358, 362, 364, 366, 368, 370, 372, 374, 416, 420, + 425, 428, 431, 440, 460, 463, 462, 469, 481, 481, + 512, 514, 528, 543, 549, 550, 555, 608, 609, 626, + 631, 633, 638, 640, 645, 647, 649, 654, 655, 663, + 664, 670, 675, 675, 686, 691, 698, 699, 702, 704, + 709, 710, 716, 717, 722, 724, 726, 728, 730, 737, + 738, 744, 745, 750, 752, 758, 760, 762, 764, 769, + 775, 777, 779, 785, 787, 793, 795, 800, 802, 804, + 809, 811, 815, 816, 821, 823, 831, 833, 835, 840, + 842, 844, 846, 848, 850, 852, 854, 860, 865, 867, + 872, 874, 876, 879, 881, 889, 897, 898, 900, 902, + 904, 907, 915, 927, 928, 933, 935, 949, 954, 958, + 962, 965, 967, 971, 975, 978 }; #endif @@ -518,22 +532,24 @@ static const char *const yytname[] = "$end", "error", "$undefined", "FUNC_CALL", "NAME", "REGEXP", "ERROR", "YNUMBER", "YSTRING", "RELOP", "IO_OUT", "IO_IN", "ASSIGNOP", "ASSIGN", "MATCHOP", "CONCAT_OP", "LEX_BEGIN", "LEX_END", "LEX_IF", "LEX_ELSE", - "LEX_RETURN", "LEX_DELETE", "LEX_WHILE", "LEX_DO", "LEX_FOR", - "LEX_BREAK", "LEX_CONTINUE", "LEX_PRINT", "LEX_PRINTF", "LEX_NEXT", - "LEX_EXIT", "LEX_FUNCTION", "LEX_GETLINE", "LEX_NEXTFILE", "LEX_IN", - "LEX_AND", "LEX_OR", "INCREMENT", "DECREMENT", "LEX_BUILTIN", - "LEX_LENGTH", "NEWLINE", "SLASH_BEFORE_EQUAL", "'?'", "':'", "','", - "'<'", "'>'", "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "UNARY", "'^'", - "'$'", "'('", "')'", "'['", "']'", "'{'", "'}'", "';'", "$accept", - "start", "program", "rule", "pattern", "action", "func_name", - "lex_builtin", "function_prologue", "@1", "regexp", "@2", "a_slash", - "statements", "statement_term", "statement", "@3", "simple_stmt", "@4", - "opt_simple_stmt", "print", "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", "comma", 0 + "LEX_RETURN", "LEX_DELETE", "LEX_SWITCH", "LEX_CASE", "LEX_DEFAULT", + "LEX_WHILE", "LEX_DO", "LEX_FOR", "LEX_BREAK", "LEX_CONTINUE", + "LEX_PRINT", "LEX_PRINTF", "LEX_NEXT", "LEX_EXIT", "LEX_FUNCTION", + "LEX_GETLINE", "LEX_NEXTFILE", "LEX_IN", "LEX_AND", "LEX_OR", + "INCREMENT", "DECREMENT", "LEX_BUILTIN", "LEX_LENGTH", "NEWLINE", + "SLASH_BEFORE_EQUAL", "'?'", "':'", "','", "'<'", "'>'", "'+'", "'-'", + "'*'", "'/'", "'%'", "'!'", "UNARY", "'^'", "'$'", "'('", "')'", "'['", + "']'", "'{'", "'}'", "';'", "$accept", "start", "program", "rule", + "pattern", "action", "func_name", "lex_builtin", "function_prologue", + "@1", "regexp", "@2", "a_slash", "statements", "statement_term", + "statement", "@3", "simple_stmt", "@4", "opt_simple_stmt", + "switch_body", "case_statements", "case_statement", "case_value", + "print", "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 }; #endif @@ -546,30 +562,31 @@ static const unsigned short yytoknum[] = 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 63, 58, 44, 60, 62, 43, 45, - 42, 47, 37, 33, 298, 94, 36, 40, 41, 91, - 93, 123, 125, 59 + 295, 296, 297, 298, 299, 300, 63, 58, 44, 60, + 62, 43, 45, 42, 47, 37, 33, 301, 94, 36, + 40, 41, 91, 93, 123, 125, 59 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const unsigned char yyr1[] = { - 0, 64, 65, 66, 66, 66, 67, 67, 67, 68, - 68, 68, 68, 68, 69, 70, 70, 70, 71, 71, - 73, 72, 75, 74, 76, 76, 77, 77, 77, 78, - 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 80, 79, 79, 82, 81, 81, - 81, 81, 81, 83, 83, 84, 84, 85, 85, 86, - 87, 86, 88, 88, 89, 89, 90, 90, 91, 91, - 92, 92, 93, 93, 93, 93, 93, 94, 94, 95, - 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, - 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, - 100, 100, 101, 101, 101, 101, 101, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, - 103, 104, 104, 105, 105, 105, 106, 107, 108, 109, - 109, 110, 111 + 0, 67, 68, 69, 69, 69, 70, 70, 70, 71, + 71, 71, 71, 71, 72, 73, 73, 73, 74, 74, + 76, 75, 78, 77, 79, 79, 80, 80, 80, 81, + 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 83, 82, 82, 85, 84, + 84, 84, 84, 84, 86, 86, 87, 88, 88, 88, + 89, 89, 90, 90, 90, 90, 90, 91, 91, 92, + 92, 93, 94, 93, 95, 95, 96, 96, 97, 97, + 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 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -578,18 +595,19 @@ static const unsigned char yyr2[] = 0, 2, 3, 0, 2, 2, 2, 2, 2, 0, 1, 3, 1, 1, 5, 1, 1, 1, 1, 1, 0, 7, 0, 3, 1, 1, 0, 2, 2, 1, - 2, 2, 3, 1, 6, 8, 8, 12, 11, 2, - 2, 2, 2, 3, 0, 4, 2, 0, 4, 5, - 2, 4, 1, 0, 1, 1, 1, 1, 5, 0, - 0, 3, 6, 9, 1, 2, 0, 1, 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, 0, - 1, 1, 2 + 2, 2, 3, 1, 9, 6, 8, 8, 12, 11, + 2, 2, 2, 2, 3, 0, 4, 2, 0, 4, + 5, 2, 4, 1, 0, 1, 1, 0, 2, 2, + 5, 4, 1, 2, 2, 1, 1, 1, 1, 1, + 5, 0, 0, 3, 6, 9, 1, 2, 0, 1, + 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, 0, 1, 1, 1, 2 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -597,309 +615,346 @@ static const unsigned char yyr2[] = means the default is an error. */ static const unsigned char yydefact[] = { - 66, 64, 0, 67, 3, 1, 65, 0, 5, 0, - 133, 127, 128, 12, 13, 20, 131, 0, 0, 0, - 122, 25, 0, 0, 24, 0, 0, 0, 4, 0, - 0, 102, 22, 2, 10, 94, 105, 107, 124, 0, - 0, 0, 68, 132, 125, 126, 0, 0, 0, 0, - 130, 124, 129, 103, 118, 135, 124, 83, 0, 81, - 66, 141, 6, 7, 29, 26, 66, 8, 0, 98, - 0, 0, 0, 0, 0, 0, 99, 101, 100, 0, - 106, 0, 0, 0, 0, 0, 0, 0, 96, 95, - 116, 117, 0, 0, 0, 0, 81, 0, 16, 15, - 18, 19, 0, 17, 0, 114, 0, 0, 0, 84, - 66, 138, 0, 0, 119, 136, 0, 30, 23, 90, - 91, 88, 89, 0, 11, 92, 131, 112, 113, 109, - 110, 111, 108, 97, 87, 123, 134, 0, 69, 120, - 121, 85, 142, 0, 86, 82, 28, 0, 44, 0, - 0, 66, 0, 0, 0, 55, 56, 0, 77, 0, - 66, 27, 0, 47, 33, 52, 26, 139, 66, 0, - 115, 74, 72, 0, 0, 104, 0, 77, 50, 0, - 0, 0, 53, 39, 40, 41, 0, 78, 42, 137, - 46, 0, 0, 66, 140, 31, 93, 66, 75, 0, - 0, 0, 0, 0, 0, 0, 133, 54, 0, 43, - 0, 59, 57, 32, 14, 21, 76, 73, 66, 45, - 0, 51, 66, 0, 0, 66, 81, 60, 48, 0, - 49, 0, 0, 0, 0, 0, 0, 62, 34, 0, - 66, 0, 66, 0, 61, 66, 66, 0, 66, 53, - 58, 0, 35, 36, 53, 0, 63, 0, 66, 66, - 0, 0, 38, 37 + 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, + 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 }; /* YYDEFGOTO[NTERM-NUM]. */ static const short yydefgoto[] = { -1, 2, 7, 28, 29, 62, 102, 103, 30, 41, - 31, 68, 32, 116, 63, 161, 177, 162, 191, 208, - 163, 211, 228, 236, 164, 3, 4, 105, 173, 174, - 186, 94, 95, 165, 93, 78, 79, 35, 36, 37, - 42, 38, 166, 167, 114, 193, 168, 113 + 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 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -238 +#define YYPACT_NINF -236 static const short yypact[] = { - -26, -238, 1, -19, -238, -238, -238, 262, -238, -33, - -32, -238, -238, -238, -238, -238, 0, 0, 0, -23, - -13, -238, 783, 783, -238, 710, 821, 564, -238, -31, - -24, -238, -238, -238, 737, 783, 145, -238, 369, 506, - 564, 144, -15, -238, -238, -238, 506, 506, 783, 761, - -14, 55, -14, -238, -14, -238, -238, -238, 7, 613, - -26, -238, -238, -238, -19, -238, -26, -238, 41, -238, - 761, 47, 761, 761, 761, 761, -238, -238, -238, 761, - 145, 53, 783, 783, 783, 783, 783, 783, -238, -238, - -238, -238, 75, 761, 36, 37, 465, 19, -238, -238, - -238, -238, 33, -238, 783, -238, 36, 36, 613, 761, - -26, -238, 65, 586, -238, -238, 313, -238, -238, 82, - -238, 155, 358, 664, 465, 225, 0, 116, 116, -14, - -14, -14, -14, -238, 465, -238, -238, 25, 237, -238, - -238, 465, -238, 100, -238, 465, -238, 49, -238, 17, - 50, -26, 51, -30, -30, -238, -238, -30, 761, -30, - -26, -238, -30, -238, -238, 465, -238, 68, -26, 761, - -238, -238, -238, 36, 39, -238, 761, 761, 54, 129, - 761, 433, 637, -238, -238, -238, -30, 465, -238, -238, - -238, 376, 313, -26, -238, -238, 465, -26, -238, 15, - 613, -30, 564, 76, 613, 117, -20, -238, 68, -238, - 564, 135, -238, -238, -238, -238, -238, -238, -26, -238, - 27, -238, -26, 92, 146, -26, 354, -238, -238, 433, - -238, 433, 761, 36, 484, 564, 761, 133, -238, 613, - -26, 210, -26, 7, 783, -26, -26, 433, -26, 688, - -238, 433, -238, -238, 688, 36, -238, 36, -26, -26, - 433, 433, -238, -238 + -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 }; /* YYPGOTO[NTERM-NUM]. */ static const short yypgoto[] = { - -238, -238, -238, -238, -238, 125, -238, -238, -238, -238, - 132, -238, -238, -3, 63, -69, -238, -173, -238, -237, - -238, -238, -238, -238, -238, -16, -7, -238, -238, -238, - -2, -40, -22, -4, -238, -238, -238, -57, 38, 173, - 77, 32, 72, 13, 4, -238, -27, -149 + -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 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -81 +#define YYTABLE_NINF -93 static const short yytable[] = { - 33, 5, 66, 34, 10, 58, 106, 107, 109, 207, - 1, 1, 255, 64, 224, 1, 216, 257, 97, 217, - 109, 178, 6, 59, 39, 199, 171, 40, 109, 172, - 60, 104, 61, 61, 46, 96, 96, 60, 109, 40, - 198, 87, 96, 96, 47, 108, 118, -80, 43, 44, - 45, 120, 110, 115, 51, 51, 26, 51, 56, 117, - 50, 52, 112, 54, 110, 111, 119, 51, 121, 122, - 123, 124, 110, 80, 179, 125, 207, 235, -80, 136, - 51, 207, 110, -70, 110, 126, 54, 230, 133, 134, - 137, 69, 90, 91, 111, -80, -81, -71, 135, 143, - -80, 65, 65, 142, 175, 141, 176, 180, 182, 145, - 139, 140, 205, 202, 51, 51, 51, 51, 51, 51, - 127, 128, 129, 130, 131, 132, 66, 66, 76, 77, - 66, 61, 66, 203, 221, 66, 51, 64, 64, 223, - 194, 64, 138, 64, 181, 227, 64, 98, 99, 232, - 233, 212, 245, 189, 187, 67, 81, 53, 43, 66, - 237, 195, 238, 192, 69, 196, 84, 85, 86, 70, - 64, 87, 200, 187, 66, 201, 204, 197, 253, 244, - 220, 225, 256, 100, 101, 64, 214, 96, 58, 71, - 215, 262, 263, 82, 83, 84, 85, 86, 96, 55, - 87, 76, 77, 170, 218, 213, 226, 242, 222, 0, - 0, 229, 0, 243, 248, 231, 183, 184, 234, 69, - 185, 0, 188, 0, 70, 190, 0, 0, 239, 0, - 241, 96, 0, 247, -81, 249, 0, 240, 251, 252, - 0, 254, 0, 246, 71, 72, 73, 250, -81, 209, - 0, 260, 261, 74, 0, 0, 76, 77, 0, 258, - 0, 259, -66, 8, 219, 9, 10, 0, 51, 11, - 12, -81, -81, 61, 0, 0, 51, 0, 13, 14, - 0, 0, 80, 0, 0, 82, 83, 84, 85, 86, - 0, 0, 87, 15, 16, 0, 0, 0, 0, 17, - 18, 19, 20, 1, 21, 0, 0, 0, 0, 0, - 22, 23, 0, 24, 146, 25, 9, 10, 26, 27, - 11, 12, 0, -9, 0, -9, 0, 0, 0, 0, - 0, 147, 0, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 0, 16, 159, 0, 0, 0, + 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, 69, 24, 0, 25, 69, 70, 26, - 27, 0, 70, 0, 60, 160, 61, 57, 0, 9, - 10, 88, 89, 11, 12, 0, -79, 0, 71, 72, - 73, 0, 71, 72, 0, 0, 0, 74, 0, 110, - 76, 77, 0, 0, 76, 77, 90, 91, 16, 0, - 0, 92, 111, 17, 18, 19, 20, -79, 21, 0, - 0, 0, 0, 0, 22, 23, 0, 24, 0, 25, - 0, 0, 26, 210, -79, 0, 9, 10, 0, -79, - 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 147, 0, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 0, 16, 159, 0, 0, 0, - 17, 18, 19, 20, 69, 21, 0, 0, 0, 70, 0, 22, 23, 0, 24, 0, 25, 9, 10, 26, - 27, 11, 12, 0, 60, 0, 61, 0, 0, 71, - 72, 73, 0, 0, 0, 0, 0, 57, 74, 9, - 10, 76, 77, 11, 12, 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, 0, 0, 0, 22, 23, 0, 24, 0, 25, - 0, 0, 26, 27, -79, 57, 0, 9, 10, 0, - 0, 11, 12, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 144, 0, 9, - 10, 0, 0, 11, 12, 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, 206, 26, 27, 11, 12, 0, 71, 72, 73, - 0, 0, 0, 0, 0, 0, 74, 0, 149, 76, - 77, 0, 0, 0, 155, 156, 0, 0, 0, 16, - 0, 111, 0, 69, 17, 18, 19, 20, 70, 21, + 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, 9, 10, 26, 27, 11, 12, 0, 71, 72, - 73, 0, 0, 0, 0, 0, 0, 74, 169, 149, - 76, 77, 0, 9, 10, 155, 156, 11, 12, 0, - 16, 0, 0, 0, 0, 17, 18, 19, 20, 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, + 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, 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, 48, 9, 10, 26, 49, 11, 12, - 0, 71, 72, 73, 0, 0, 0, 0, 0, 0, - 74, 0, 75, 76, 77, 0, 9, 10, 0, 0, - 11, 12, 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, 9, 10, 0, 0, 11, 12, - 0, 22, 23, 0, 0, 0, 48, 0, 0, 26, - 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, - 19, 20, 0, 0, 0, 0, 0, 0, 0, 22, - 23, 0, 0, 0, 48, 0, 0, 26, 49 + 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 }; static const short yycheck[] = { - 7, 0, 29, 7, 4, 27, 46, 47, 1, 182, - 41, 41, 249, 29, 34, 41, 1, 254, 40, 4, - 1, 4, 41, 27, 57, 174, 1, 59, 1, 4, - 61, 46, 63, 63, 57, 39, 40, 61, 1, 59, - 1, 55, 46, 47, 57, 49, 5, 10, 16, 17, - 18, 4, 45, 60, 22, 23, 56, 25, 26, 66, - 22, 23, 58, 25, 45, 58, 70, 35, 72, 73, - 74, 75, 45, 35, 57, 79, 249, 226, 41, 60, - 48, 254, 45, 58, 45, 32, 48, 60, 13, 93, - 57, 9, 37, 38, 58, 58, 14, 58, 94, 34, - 63, 29, 30, 110, 4, 109, 57, 57, 57, 113, - 106, 107, 181, 59, 82, 83, 84, 85, 86, 87, - 82, 83, 84, 85, 86, 87, 153, 154, 46, 47, - 157, 63, 159, 4, 58, 162, 104, 153, 154, 22, - 167, 157, 104, 159, 151, 10, 162, 3, 4, 57, - 4, 191, 19, 160, 158, 30, 11, 25, 126, 186, - 229, 168, 231, 166, 9, 169, 50, 51, 52, 14, - 186, 55, 176, 177, 201, 177, 180, 173, 247, 236, - 202, 208, 251, 39, 40, 201, 193, 191, 210, 34, - 197, 260, 261, 48, 49, 50, 51, 52, 202, 26, - 55, 46, 47, 126, 200, 192, 210, 234, 204, -1, - -1, 218, -1, 235, 241, 222, 153, 154, 225, 9, - 157, -1, 159, -1, 14, 162, -1, -1, 232, -1, - 234, 235, -1, 240, 9, 242, -1, 233, 245, 246, - -1, 248, -1, 239, 34, 35, 36, 243, 11, 186, - -1, 258, 259, 43, -1, -1, 46, 47, -1, 255, - -1, 257, 0, 1, 201, 3, 4, -1, 236, 7, - 8, 46, 47, 63, -1, -1, 244, -1, 16, 17, - -1, -1, 244, -1, -1, 48, 49, 50, 51, 52, - -1, -1, 55, 31, 32, -1, -1, -1, -1, 37, - 38, 39, 40, 41, 42, -1, -1, -1, -1, -1, - 48, 49, -1, 51, 1, 53, 3, 4, 56, 57, - 7, 8, -1, 61, -1, 63, -1, -1, -1, -1, - -1, 18, -1, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, -1, 32, 33, -1, -1, -1, - 37, 38, 39, 40, -1, 42, -1, -1, -1, -1, - -1, 48, 49, 9, 51, -1, 53, 9, 14, 56, - 57, -1, 14, -1, 61, 62, 63, 1, -1, 3, - 4, 12, 13, 7, 8, -1, 10, -1, 34, 35, - 36, -1, 34, 35, -1, -1, -1, 43, -1, 45, - 46, 47, -1, -1, 46, 47, 37, 38, 32, -1, - -1, 42, 58, 37, 38, 39, 40, 41, 42, -1, - -1, -1, -1, -1, 48, 49, -1, 51, -1, 53, - -1, -1, 56, 57, 58, -1, 3, 4, -1, 63, - 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 18, -1, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, -1, 32, 33, -1, -1, -1, - 37, 38, 39, 40, 9, 42, -1, -1, -1, 14, - -1, 48, 49, -1, 51, -1, 53, 3, 4, 56, - 57, 7, 8, -1, 61, -1, 63, -1, -1, 34, - 35, 36, -1, -1, -1, -1, -1, 1, 43, 3, - 4, 46, 47, 7, 8, -1, 32, -1, -1, -1, - -1, 37, 38, 39, 40, -1, 42, -1, -1, -1, - -1, -1, 48, 49, -1, 51, -1, 53, 32, -1, - 56, 57, -1, 37, 38, 39, 40, 63, 42, -1, - -1, -1, -1, -1, 48, 49, -1, 51, -1, 53, - -1, -1, 56, 57, 58, 1, -1, 3, 4, -1, - -1, 7, 8, -1, -1, -1, -1, -1, -1, -1, + 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, 32, -1, -1, -1, - -1, 37, 38, 39, 40, -1, 42, -1, -1, -1, - -1, -1, 48, 49, -1, 51, -1, 53, 32, -1, - 56, 57, 9, 37, 38, 39, 40, 14, 42, -1, - -1, -1, -1, -1, 48, 49, -1, 51, -1, 53, - 3, 4, 56, 57, 7, 8, -1, 34, 35, 36, - -1, -1, -1, -1, -1, -1, 43, -1, 21, 46, - 47, -1, -1, -1, 27, 28, -1, -1, -1, 32, - -1, 58, -1, 9, 37, 38, 39, 40, 14, 42, - -1, -1, -1, -1, -1, 48, 49, -1, 51, -1, - 53, 3, 4, 56, 57, 7, 8, -1, 34, 35, - 36, -1, -1, -1, -1, -1, -1, 43, 44, 21, - 46, 47, -1, 3, 4, 27, 28, 7, 8, -1, - 32, -1, -1, -1, -1, 37, 38, 39, 40, -1, - 42, -1, -1, -1, -1, -1, 48, 49, -1, 51, - -1, 53, 32, -1, 56, 57, 9, 37, 38, 39, - 40, 14, 42, -1, -1, -1, -1, -1, 48, 49, - -1, 51, -1, 53, 3, 4, 56, 57, 7, 8, - -1, 34, 35, 36, -1, -1, -1, -1, -1, -1, - 43, -1, 45, 46, 47, -1, 3, 4, -1, -1, - 7, 8, -1, 32, -1, -1, -1, -1, 37, 38, - 39, 40, -1, 42, -1, -1, -1, -1, -1, 48, - 49, -1, 51, -1, 53, 32, -1, 56, 57, -1, - 37, 38, 39, 40, 3, 4, -1, -1, 7, 8, - -1, 48, 49, -1, -1, -1, 53, -1, -1, 56, - 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, - 39, 40, -1, -1, -1, -1, -1, -1, -1, 48, - 49, -1, -1, -1, 53, -1, -1, 56, 57 + 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, + 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, + 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 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const unsigned char yystos[] = { - 0, 41, 65, 89, 90, 0, 41, 66, 1, 3, - 4, 7, 8, 16, 17, 31, 32, 37, 38, 39, - 40, 42, 48, 49, 51, 53, 56, 57, 67, 68, - 72, 74, 76, 90, 97, 101, 102, 103, 105, 57, - 59, 73, 104, 105, 105, 105, 57, 57, 53, 57, - 102, 105, 102, 74, 102, 103, 105, 1, 96, 97, - 61, 63, 69, 78, 89, 106, 110, 69, 75, 9, - 14, 34, 35, 36, 43, 45, 46, 47, 99, 100, - 102, 11, 48, 49, 50, 51, 52, 55, 12, 13, - 37, 38, 42, 98, 95, 96, 97, 96, 3, 4, - 39, 40, 70, 71, 46, 91, 95, 95, 97, 1, - 45, 58, 108, 111, 108, 90, 77, 90, 5, 97, - 4, 97, 97, 97, 97, 97, 32, 102, 102, 102, - 102, 102, 102, 13, 97, 108, 60, 57, 102, 108, - 108, 97, 90, 34, 1, 97, 1, 18, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 33, - 62, 79, 81, 84, 88, 97, 106, 107, 110, 44, - 104, 1, 4, 92, 93, 4, 57, 80, 4, 57, - 57, 90, 57, 78, 78, 78, 94, 97, 78, 90, - 78, 82, 77, 109, 110, 90, 97, 108, 1, 111, - 97, 94, 59, 4, 97, 79, 4, 81, 83, 78, - 57, 85, 95, 107, 90, 90, 1, 4, 108, 78, - 96, 58, 108, 22, 34, 110, 97, 10, 86, 90, - 60, 90, 57, 4, 90, 111, 87, 79, 79, 97, - 108, 97, 110, 96, 101, 19, 108, 90, 110, 90, - 108, 90, 90, 79, 90, 83, 79, 83, 108, 108, - 90, 90, 79, 79 + 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, + 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 }; #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) @@ -1509,14 +1564,14 @@ yyreduce: switch (yyn) { case 2: -#line 171 "awkgram.y" +#line 172 "awkgram.y" { check_funcs(); } break; case 4: -#line 179 "awkgram.y" +#line 180 "awkgram.y" { begin_or_end_rule = parsing_end_rule = FALSE; yyerrok; @@ -1524,15 +1579,14 @@ yyreduce: break; case 5: -#line 184 "awkgram.y" +#line 185 "awkgram.y" { begin_or_end_rule = parsing_end_rule = FALSE; - yyerrok; /* * If errors, give up, don't produce an infinite - * stream of syntax error message. + * stream of syntax error messages. */ - return; + /* yyerrok; */ } break; @@ -1736,16 +1790,21 @@ yyreduce: case 34: #line 369 "awkgram.y" - { yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_while, yyvsp[0].nodeval); } + { yyval.nodeval = node(yyvsp[-6].nodeval, Node_K_switch, yyvsp[-2].nodeval); } break; case 35: #line 371 "awkgram.y" - { yyval.nodeval = node(yyvsp[-2].nodeval, Node_K_do, yyvsp[-5].nodeval); } + { yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_while, yyvsp[0].nodeval); } break; case 36: #line 373 "awkgram.y" + { yyval.nodeval = node(yyvsp[-2].nodeval, Node_K_do, yyvsp[-5].nodeval); } + break; + + case 37: +#line 375 "awkgram.y" { /* * Efficiency hack. Recognize the special case of @@ -1767,10 +1826,12 @@ yyreduce: arr = yyvsp[0].nodeval->lnode; /* array var */ sub = yyvsp[0].nodeval->rnode->lnode; /* index var */ - if ( (arr->type == Node_var + if ( (arr->type == Node_var_new || arr->type == Node_var_array || arr->type == Node_param_list) - && (sub->type == Node_var || sub->type == Node_param_list) + && (sub->type == Node_var_new + || sub->type == Node_var + || sub->type == Node_param_list) && strcmp(yyvsp[-5].sval, sub->vname) == 0 && strcmp(yyvsp[-3].sval, arr->vname) == 0) { yyvsp[0].nodeval->type = Node_K_delete_loop; @@ -1787,33 +1848,33 @@ yyreduce: } break; - case 37: -#line 413 "awkgram.y" + case 38: +#line 417 "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 38: -#line 417 "awkgram.y" + case 39: +#line 421 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_K_for, (NODE *) make_for_loop(yyvsp[-8].nodeval, (NODE *) NULL, yyvsp[-3].nodeval)); } break; - case 39: -#line 423 "awkgram.y" + case 40: +#line 427 "awkgram.y" { yyval.nodeval = node((NODE *) NULL, Node_K_break, (NODE *) NULL); } break; - case 40: -#line 426 "awkgram.y" + case 41: +#line 430 "awkgram.y" { yyval.nodeval = node((NODE *) NULL, Node_K_continue, (NODE *) NULL); } break; - case 41: -#line 428 "awkgram.y" + case 42: +#line 432 "awkgram.y" { NODETYPE type; if (begin_or_end_rule) @@ -1824,8 +1885,8 @@ yyreduce: } break; - case 42: -#line 437 "awkgram.y" + case 43: +#line 441 "awkgram.y" { if (do_traditional) { /* @@ -1847,31 +1908,31 @@ yyreduce: } break; - case 43: -#line 457 "awkgram.y" + case 44: +#line 461 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_K_exit, (NODE *) NULL); } break; - case 44: -#line 459 "awkgram.y" + case 45: +#line 463 "awkgram.y" { if (! can_return) yyerror(_("`return' used outside function context")); } break; - case 45: -#line 464 "awkgram.y" + case 46: +#line 468 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_K_return, (NODE *) NULL); } break; - case 47: -#line 477 "awkgram.y" + case 48: +#line 481 "awkgram.y" { in_print = TRUE; in_parens = 0; } break; - case 48: -#line 478 "awkgram.y" + case 49: +#line 482 "awkgram.y" { /* * Optimization: plain `print' has no expression list, so $3 is null. @@ -1904,13 +1965,13 @@ yyreduce: } break; - case 49: -#line 509 "awkgram.y" + case 50: +#line 513 "awkgram.y" { yyval.nodeval = node(variable(yyvsp[-3].sval, CAN_FREE, Node_var_array), Node_K_delete, yyvsp[-1].nodeval); } break; - case 50: -#line 511 "awkgram.y" + case 51: +#line 515 "awkgram.y" { if (do_lint) lintwarn(_("`delete array' is a gawk extension")); @@ -1926,8 +1987,8 @@ yyreduce: } break; - case 51: -#line 525 "awkgram.y" + case 52: +#line 529 "awkgram.y" { /* this is for tawk compatibility. maybe the warnings should always be done. */ if (do_lint) @@ -1944,28 +2005,148 @@ yyreduce: } break; - case 52: -#line 540 "awkgram.y" + case 53: +#line 544 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; } break; - case 53: -#line 545 "awkgram.y" + case 54: +#line 549 "awkgram.y" { yyval.nodeval = NULL; } break; - case 54: -#line 547 "awkgram.y" + case 55: +#line 551 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; } break; + case 56: +#line 556 "awkgram.y" + { + if (yyvsp[0].nodeval == NULL) { + yyval.nodeval = NULL; + } else { + NODE *dflt = NULL; + NODE *head = yyvsp[0].nodeval; + NODE *curr; + + const char **case_values = NULL; + + int maxcount = 128; + int case_count = 0; + int i; + + emalloc(case_values, const char **, sizeof(char*) * maxcount, "switch_body"); + for (curr = yyvsp[0].nodeval; curr != NULL; curr = curr->rnode) { + /* Assure that case statement values are unique. */ + if (curr->lnode->type == Node_K_case) { + char *caseval; + + if (curr->lnode->lnode->type == Node_regex) + caseval = curr->lnode->lnode->re_exp->stptr; + else + caseval = force_string(tree_eval(curr->lnode->lnode))->stptr; + + for (i = 0; i < case_count; i++) + if (strcmp(caseval, case_values[i]) == 0) + yyerror(_("duplicate case values in switch body: %s"), caseval); + + if (case_count >= maxcount) { + maxcount += 128; + erealloc(case_values, const char **, sizeof(char*) * maxcount, "switch_body"); + } + case_values[case_count++] = caseval; + } else { + /* Otherwise save a pointer to the default node. */ + if (dflt != NULL) + yyerror(_("Duplicate `default' detected in switch body")); + dflt = curr; + } + } + + free(case_values); + + /* Create the switch body. */ + yyval.nodeval = node(head, Node_switch_body, dflt); + } + } + break; + + case 57: +#line 608 "awkgram.y" + { yyval.nodeval = NULL; } + break; + case 58: -#line 562 "awkgram.y" - { yyval.nodeval = node(yyvsp[-3].nodeval, Node_expression_list, yyvsp[-1].nodeval); } +#line 610 "awkgram.y" + { + if (yyvsp[0].nodeval == NULL) + yyval.nodeval = yyvsp[-1].nodeval; + else { + if (do_lint && isnoeffect(yyvsp[0].nodeval->type)) + lintwarn(_("statement may have no effect")); + if (yyvsp[-1].nodeval == NULL) + yyval.nodeval = node(yyvsp[0].nodeval, Node_case_list, (NODE *) NULL); + else + yyval.nodeval = append_right( + (yyvsp[-1].nodeval->type == Node_case_list ? yyvsp[-1].nodeval : node(yyvsp[-1].nodeval, Node_case_list, (NODE *) NULL)), + (yyvsp[0].nodeval->type == Node_case_list ? yyvsp[0].nodeval : node(yyvsp[0].nodeval, Node_case_list, (NODE *) NULL)) + ); + } + yyerrok; + } break; case 59: -#line 567 "awkgram.y" +#line 627 "awkgram.y" + { yyval.nodeval = NULL; } + break; + + case 60: +#line 632 "awkgram.y" + { yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_case, yyvsp[0].nodeval); } + break; + + case 61: +#line 634 "awkgram.y" + { yyval.nodeval = node((NODE *) NULL, Node_K_default, yyvsp[0].nodeval); } + break; + + case 62: +#line 639 "awkgram.y" + { yyval.nodeval = yyvsp[0].nodeval; } + break; + + case 63: +#line 641 "awkgram.y" + { + yyvsp[0].nodeval->numbr = -(force_number(yyvsp[0].nodeval)); + yyval.nodeval = yyvsp[0].nodeval; + } + break; + + case 64: +#line 646 "awkgram.y" + { yyval.nodeval = yyvsp[0].nodeval; } + break; + + case 65: +#line 648 "awkgram.y" + { yyval.nodeval = yyvsp[0].nodeval; } + break; + + case 66: +#line 650 "awkgram.y" + { yyval.nodeval = yyvsp[0].nodeval; } + break; + + case 70: +#line 665 "awkgram.y" + { yyval.nodeval = node(yyvsp[-3].nodeval, Node_expression_list, yyvsp[-1].nodeval); } + break; + + case 71: +#line 670 "awkgram.y" { in_print = FALSE; in_parens = 0; @@ -1973,13 +2154,13 @@ yyreduce: } break; - case 60: -#line 572 "awkgram.y" + case 72: +#line 675 "awkgram.y" { in_print = FALSE; in_parens = 0; } break; - case 61: -#line 573 "awkgram.y" + case 73: +#line 676 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, yyvsp[-2].nodetypeval, (NODE *) NULL); if (yyvsp[-2].nodetypeval == Node_redirect_twoway @@ -1989,92 +2170,92 @@ yyreduce: } break; - case 62: -#line 584 "awkgram.y" + case 74: +#line 687 "awkgram.y" { yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_if, node(yyvsp[0].nodeval, Node_if_branches, (NODE *) NULL)); } break; - case 63: -#line 590 "awkgram.y" + case 75: +#line 693 "awkgram.y" { yyval.nodeval = node(yyvsp[-6].nodeval, Node_K_if, node(yyvsp[-3].nodeval, Node_if_branches, yyvsp[0].nodeval)); } break; - case 68: -#line 606 "awkgram.y" + case 80: +#line 709 "awkgram.y" { yyval.nodeval = NULL; } break; - case 69: -#line 608 "awkgram.y" + case 81: +#line 711 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_redirect_input, (NODE *) NULL); } break; - case 70: -#line 613 "awkgram.y" + case 82: +#line 716 "awkgram.y" { yyval.nodeval = NULL; } break; - case 71: -#line 615 "awkgram.y" + case 83: +#line 718 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; } break; - case 72: -#line 620 "awkgram.y" + case 84: +#line 723 "awkgram.y" { yyval.nodeval = make_param(yyvsp[0].sval); } break; - case 73: -#line 622 "awkgram.y" + case 85: +#line 725 "awkgram.y" { yyval.nodeval = append_right(yyvsp[-2].nodeval, make_param(yyvsp[0].sval)); yyerrok; } break; - case 74: -#line 624 "awkgram.y" + case 86: +#line 727 "awkgram.y" { yyval.nodeval = NULL; } break; - case 75: -#line 626 "awkgram.y" + case 87: +#line 729 "awkgram.y" { yyval.nodeval = NULL; } break; - case 76: -#line 628 "awkgram.y" + case 88: +#line 731 "awkgram.y" { yyval.nodeval = NULL; } break; - case 77: -#line 634 "awkgram.y" + case 89: +#line 737 "awkgram.y" { yyval.nodeval = NULL; } break; - case 78: -#line 636 "awkgram.y" + case 90: +#line 739 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; } break; - case 79: -#line 641 "awkgram.y" + case 91: +#line 744 "awkgram.y" { yyval.nodeval = NULL; } break; - case 80: -#line 643 "awkgram.y" + case 92: +#line 746 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; } break; - case 81: -#line 648 "awkgram.y" + case 93: +#line 751 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_expression_list, (NODE *) NULL); } break; - case 82: -#line 650 "awkgram.y" + case 94: +#line 753 "awkgram.y" { yyval.nodeval = append_right(yyvsp[-2].nodeval, node(yyvsp[0].nodeval, Node_expression_list, (NODE *) NULL)); @@ -2082,28 +2263,28 @@ yyreduce: } break; - case 83: -#line 656 "awkgram.y" + case 95: +#line 759 "awkgram.y" { yyval.nodeval = NULL; } break; - case 84: -#line 658 "awkgram.y" + case 96: +#line 761 "awkgram.y" { yyval.nodeval = NULL; } break; - case 85: -#line 660 "awkgram.y" + case 97: +#line 763 "awkgram.y" { yyval.nodeval = NULL; } break; - case 86: -#line 662 "awkgram.y" + case 98: +#line 765 "awkgram.y" { yyval.nodeval = NULL; } break; - case 87: -#line 667 "awkgram.y" + case 99: +#line 770 "awkgram.y" { if (do_lint && yyvsp[0].nodeval->type == Node_regex) lintwarn(_("regular expression on right of assignment")); @@ -2111,18 +2292,18 @@ yyreduce: } break; - case 88: -#line 673 "awkgram.y" + case 100: +#line 776 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_and, yyvsp[0].nodeval); } break; - case 89: -#line 675 "awkgram.y" + case 101: +#line 778 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_or, yyvsp[0].nodeval); } break; - case 90: -#line 677 "awkgram.y" + case 102: +#line 780 "awkgram.y" { if (yyvsp[-2].nodeval->type == Node_regex) warning(_("regular expression on left of `~' or `!~' operator")); @@ -2130,13 +2311,13 @@ yyreduce: } break; - case 91: -#line 683 "awkgram.y" + case 103: +#line 786 "awkgram.y" { yyval.nodeval = node(variable(yyvsp[0].sval, CAN_FREE, Node_var_array), Node_in_array, yyvsp[-2].nodeval); } break; - case 92: -#line 685 "awkgram.y" + case 104: +#line 788 "awkgram.y" { if (do_lint && yyvsp[0].nodeval->type == Node_regex) lintwarn(_("regular expression on right of comparison")); @@ -2144,53 +2325,53 @@ yyreduce: } break; - case 93: -#line 691 "awkgram.y" + case 105: +#line 794 "awkgram.y" { yyval.nodeval = node(yyvsp[-4].nodeval, Node_cond_exp, node(yyvsp[-2].nodeval, Node_if_branches, yyvsp[0].nodeval));} break; - case 94: -#line 693 "awkgram.y" + case 106: +#line 796 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; } break; - case 95: -#line 698 "awkgram.y" + case 107: +#line 801 "awkgram.y" { yyval.nodetypeval = yyvsp[0].nodetypeval; } break; - case 96: -#line 700 "awkgram.y" + case 108: +#line 803 "awkgram.y" { yyval.nodetypeval = yyvsp[0].nodetypeval; } break; - case 97: -#line 702 "awkgram.y" + case 109: +#line 805 "awkgram.y" { yyval.nodetypeval = Node_assign_quotient; } break; - case 98: -#line 707 "awkgram.y" + case 110: +#line 810 "awkgram.y" { yyval.nodetypeval = yyvsp[0].nodetypeval; } break; - case 99: -#line 709 "awkgram.y" + case 111: +#line 812 "awkgram.y" { yyval.nodetypeval = Node_less; } break; - case 101: -#line 714 "awkgram.y" + case 113: +#line 817 "awkgram.y" { yyval.nodetypeval = Node_greater; } break; - case 102: -#line 719 "awkgram.y" + case 114: +#line 822 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; } break; - case 103: -#line 721 "awkgram.y" + case 115: +#line 824 "awkgram.y" { yyval.nodeval = node(node(make_number(0.0), Node_field_spec, @@ -2200,53 +2381,53 @@ yyreduce: } break; - case 104: -#line 729 "awkgram.y" + case 116: +#line 832 "awkgram.y" { yyval.nodeval = node(variable(yyvsp[0].sval, CAN_FREE, Node_var_array), Node_in_array, yyvsp[-3].nodeval); } break; - case 105: -#line 731 "awkgram.y" + case 117: +#line 834 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; } break; - case 106: -#line 733 "awkgram.y" + case 118: +#line 836 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_concat, yyvsp[0].nodeval); } break; - case 108: -#line 740 "awkgram.y" + case 120: +#line 843 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_exp, yyvsp[0].nodeval); } break; - case 109: -#line 742 "awkgram.y" + case 121: +#line 845 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_times, yyvsp[0].nodeval); } break; - case 110: -#line 744 "awkgram.y" + case 122: +#line 847 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_quotient, yyvsp[0].nodeval); } break; - case 111: -#line 746 "awkgram.y" + case 123: +#line 849 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_mod, yyvsp[0].nodeval); } break; - case 112: -#line 748 "awkgram.y" + case 124: +#line 851 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_plus, yyvsp[0].nodeval); } break; - case 113: -#line 750 "awkgram.y" + case 125: +#line 853 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_minus, yyvsp[0].nodeval); } break; - case 114: -#line 752 "awkgram.y" + case 126: +#line 855 "awkgram.y" { if (do_lint && parsing_end_rule && yyvsp[0].nodeval == NULL) lintwarn(_("non-redirected `getline' undefined inside END action")); @@ -2254,46 +2435,46 @@ yyreduce: } break; - case 115: -#line 758 "awkgram.y" + case 127: +#line 861 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_K_getline, node(yyvsp[-3].nodeval, yyvsp[-2].nodetypeval, (NODE *) NULL)); } break; - case 116: -#line 763 "awkgram.y" + case 128: +#line 866 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_postincrement, (NODE *) NULL); } break; - case 117: -#line 765 "awkgram.y" + case 129: +#line 868 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_postdecrement, (NODE *) NULL); } break; - case 118: -#line 770 "awkgram.y" + case 130: +#line 873 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_not, (NODE *) NULL); } break; - case 119: -#line 772 "awkgram.y" + case 131: +#line 875 "awkgram.y" { yyval.nodeval = yyvsp[-1].nodeval; } break; - case 120: -#line 775 "awkgram.y" + case 132: +#line 878 "awkgram.y" { yyval.nodeval = snode(yyvsp[-1].nodeval, Node_builtin, (int) yyvsp[-3].lval); } break; - case 121: -#line 777 "awkgram.y" + case 133: +#line 880 "awkgram.y" { yyval.nodeval = snode(yyvsp[-1].nodeval, Node_builtin, (int) yyvsp[-3].lval); } break; - case 122: -#line 779 "awkgram.y" + case 134: +#line 882 "awkgram.y" { if (do_lint) lintwarn(_("call of `length' without parentheses is not portable")); @@ -2303,8 +2484,8 @@ yyreduce: } break; - case 123: -#line 787 "awkgram.y" + case 135: +#line 890 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_func_call, make_string(yyvsp[-3].sval, strlen(yyvsp[-3].sval))); yyval.nodeval->funcbody = NULL; @@ -2314,28 +2495,28 @@ yyreduce: } break; - case 125: -#line 796 "awkgram.y" + case 137: +#line 899 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_preincrement, (NODE *) NULL); } break; - case 126: -#line 798 "awkgram.y" + case 138: +#line 901 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_predecrement, (NODE *) NULL); } break; - case 127: -#line 800 "awkgram.y" + case 139: +#line 903 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; } break; - case 128: -#line 802 "awkgram.y" + case 140: +#line 905 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; } break; - case 129: -#line 805 "awkgram.y" + case 141: +#line 908 "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)); @@ -2345,8 +2526,8 @@ yyreduce: } break; - case 130: -#line 813 "awkgram.y" + case 142: +#line 916 "awkgram.y" { /* * was: $$ = $2 @@ -2356,56 +2537,65 @@ yyreduce: } break; - case 131: -#line 824 "awkgram.y" + case 143: +#line 927 "awkgram.y" { yyval.nodeval = NULL; } break; - case 132: -#line 826 "awkgram.y" + case 144: +#line 929 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; } break; - case 133: -#line 831 "awkgram.y" - { yyval.nodeval = variable(yyvsp[0].sval, CAN_FREE, Node_var); } + case 145: +#line 934 "awkgram.y" + { yyval.nodeval = variable(yyvsp[0].sval, CAN_FREE, Node_var_new); } break; - case 134: -#line 833 "awkgram.y" + case 146: +#line 936 "awkgram.y" { - if (yyvsp[-1].nodeval == NULL) { + NODE *n; + + if ((n = lookup(yyvsp[-3].sval)) != NULL && ! isarray(n)) + yyerror(_("use of non-array as array")); + 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); freenode(yyvsp[-1].nodeval); } else yyval.nodeval = node(variable(yyvsp[-3].sval, CAN_FREE, Node_var_array), Node_subscript, yyvsp[-1].nodeval); - } + } break; - case 135: -#line 843 "awkgram.y" + case 147: +#line 950 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_field_spec, (NODE *) NULL); } break; - case 137: -#line 851 "awkgram.y" + case 149: +#line 958 "awkgram.y" { yyerrok; } break; - case 138: -#line 855 "awkgram.y" + case 150: +#line 962 "awkgram.y" { yyerrok; } break; - case 141: -#line 864 "awkgram.y" + case 153: +#line 971 "awkgram.y" { yyerrok; } break; - case 142: -#line 867 "awkgram.y" + case 154: +#line 975 "awkgram.y" + { yyerrok; } + break; + + case 155: +#line 978 "awkgram.y" { yyerrok; } break; @@ -2413,7 +2603,7 @@ yyreduce: } /* Line 991 of yacc.c. */ -#line 2414 "y.tab.c" +#line 2604 "y.tab.c" yyvsp -= yylen; yyssp -= yylen; @@ -2622,7 +2812,7 @@ yyreturn: } -#line 870 "awkgram.y" +#line 981 "awkgram.y" struct token { @@ -2655,12 +2845,18 @@ static const struct token tokentab[] = { {"atan2", Node_builtin, LEX_BUILTIN, NOT_OLD|A(2), do_atan2}, {"bindtextdomain", Node_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2), do_bindtextdomain}, {"break", Node_K_break, LEX_BREAK, 0, 0}, +#ifdef ALLOW_SWITCH +{"case", Node_K_case, LEX_CASE, GAWKX, 0}, +#endif {"close", Node_builtin, LEX_BUILTIN, NOT_OLD|A(1)|A(2), do_close}, {"compl", Node_builtin, LEX_BUILTIN, GAWKX|A(1), do_compl}, {"continue", Node_K_continue, LEX_CONTINUE, 0, 0}, {"cos", Node_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_cos}, {"dcgettext", Node_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2)|A(3), do_dcgettext}, {"dcngettext", Node_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2)|A(3)|A(4)|A(5), do_dcngettext}, +#ifdef ALLOW_SWITCH +{"default", Node_K_default, LEX_DEFAULT, GAWKX, 0}, +#endif {"delete", Node_K_delete, LEX_DELETE, NOT_OLD, 0}, {"do", Node_K_do, LEX_DO, NOT_OLD, 0}, {"else", Node_illegal, LEX_ELSE, 0, 0}, @@ -2703,6 +2899,9 @@ static const struct token tokentab[] = { {"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}, +#ifdef ALLOW_SWITCH +{"switch", Node_K_switch, LEX_SWITCH, GAWKX, 0}, +#endif {"system", Node_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_system}, {"systime", Node_builtin, LEX_BUILTIN, GAWKX|A(0), do_systime}, {"tolower", Node_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_tolower}, @@ -3235,7 +3434,7 @@ yylex(void) case '\\': if ((c = nextc()) == EOF) { yyerror(_("unterminated regexp ends with `\\' at end of file")); - return lasttok = REGEXP; /* kludge */ + goto end_regexp; /* kludge */ } else if (c == '\n') { sourceline++; continue; @@ -3248,17 +3447,17 @@ yylex(void) case '/': /* end of the regexp */ if (in_brack > 0) break; - +end_regexp: tokadd('\0'); yylval.sval = tokstart; return lasttok = REGEXP; case '\n': pushback(); yyerror(_("unterminated regexp")); - return lasttok = REGEXP; /* kludge */ + goto end_regexp; /* kludge */ case EOF: yyerror(_("unterminated regexp at end of file")); - return lasttok = REGEXP; /* kludge */ + goto end_regexp; /* kludge */ } tokadd(c); } @@ -3807,8 +4006,6 @@ node_common(NODETYPE op) getnode(r); r->type = op; r->flags = MALLOC; - if (r->type == Node_var) - r->flags |= UNINITIALIZED; /* if lookahead is NL, lineno is 1 too high */ if (lexeme && *lexeme == '\n') r->source_line = sourceline - 1; @@ -3938,7 +4135,7 @@ snode(NODE *subn, NODETYPE op, int idx) else dumpintlstr(str->stptr, str->stlen); } else if (do_intl /* --gen-po */ - && r->builtin == do_dcngettext /* dcngettext(...) */ + && r->builtin == do_dcngettext /* dcngettext(...) */ && subn->lnode->type == Node_val /* 1st arg is constant */ && (subn->lnode->flags & STRCUR) != 0 /* it's a string constant */ && subn->rnode->lnode->type == Node_val /* 2nd arg is constant too */ @@ -4185,6 +4382,8 @@ dump_vars(const char *fname) fprintf(fp, "%.*s: ", (int) p->hlength, p->hname); if (p->hvalue->type == Node_var_array) fprintf(fp, "array, %ld elements\n", p->hvalue->table_size); + else if (p->hvalue->type == Node_var_new) + fprintf(fp, "unused variable\n"); else if (p->hvalue->type == Node_var) valinfo(p->hvalue->var_value, fp); else { @@ -4216,12 +4415,10 @@ release_all_vars() continue; else if (p->hvalue->type == Node_var_array) assoc_clear(p->hvalue); - else if (p->hvalue->type == Node_var) - unref(p->hvalue->var_value); - else { + else if (p->hvalue->type != Node_var_new) { NODE **lhs = get_lhs(p->hvalue, NULL, FALSE); - unref((*lhs)->var_value); + unref(*lhs); } unref(p); } @@ -4365,11 +4562,11 @@ append_right(NODE *list, NODE *new) return list; oldlist = list; - if (savefront == oldlist) { - savetail = savetail->rnode = new; - return oldlist; - } else + if (savefront == oldlist) + list = savetail; /* Be careful: maybe list->rnode != NULL */ + else savefront = oldlist; + while (list->rnode != NULL) list = list->rnode; savetail = list->rnode = new; @@ -4642,7 +4839,14 @@ variable(char *name, int can_free, NODETYPE type) /* * This is the only case in which we may not free the string. */ - return install(name, node(Nnull_string, type, (NODE *) NULL)); + NODE *n; + + if (type == Node_var) + n = node(Nnull_string, type, (NODE *) NULL); + else + n = node((NODE *) NULL, type, (NODE *) NULL); + + return install(name, n); } } if (can_free) @@ -4718,6 +4922,7 @@ isnoeffect(NODETYPE type) case Node_CONVFMT: case Node_BINMODE: case Node_LINT: + case Node_TEXTDOMAIN: return TRUE; default: break; /* keeps gcc -Wall happy */ @@ -4732,6 +4937,7 @@ static int isassignable(register NODE *n) { switch (n->type) { + case Node_var_new: case Node_var: case Node_FIELDWIDTHS: case Node_RS: @@ -4746,6 +4952,7 @@ isassignable(register NODE *n) case Node_OFS: case Node_LINT: case Node_BINMODE: + case Node_TEXTDOMAIN: case Node_field_spec: case Node_subscript: return TRUE; @@ -4834,4 +5041,25 @@ count_args(NODE *tree) save_tree->printf_count = count; } +/* isarray --- can this type be subscripted? */ + +static int +isarray(NODE *n) +{ + switch (n->type) { + case Node_var_new: + case Node_var_array: + return TRUE; + case Node_param_list: + return ((n->flags & FUNC) == 0); + case Node_array_ref: + cant_happen(); + break; + default: + break; /* keeps gcc -Wall happy */ + } + + return FALSE; +} + -- cgit v1.2.3