diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2010-07-16 13:14:38 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2010-07-16 13:14:38 +0300 |
commit | fae4762eba9ff7bb466a600130e9c90eaac6b0bc (patch) | |
tree | 62711fe7cd511824b5f8a90ba1ba7b523d42e127 /awkgram.c | |
parent | bc70de7b3302d5a81515b901cae376b8b51d2004 (diff) | |
download | egawk-fae4762eba9ff7bb466a600130e9c90eaac6b0bc.tar.gz egawk-fae4762eba9ff7bb466a600130e9c90eaac6b0bc.tar.bz2 egawk-fae4762eba9ff7bb466a600130e9c90eaac6b0bc.zip |
Move to gawk-3.1.1.
Diffstat (limited to 'awkgram.c')
-rw-r--r-- | awkgram.c | 1925 |
1 files changed, 1054 insertions, 871 deletions
@@ -78,6 +78,7 @@ static void parms_shadow P((const char *fname, NODE *func)); static int isnoeffect P((NODETYPE t)); static int isassignable P((NODE *n)); static void dumpintlstr P((char *str, size_t len)); +static void dumpintlstr2 P((char *str1, size_t len1, char *str2, size_t len2)); static void count_args P((NODE *n)); enum defref { FUNC_DEFINE, FUNC_USE }; @@ -114,7 +115,7 @@ extern int errcount; extern NODE *begin_block; extern NODE *end_block; -#line 96 "awkgram.y" +#line 97 "awkgram.y" typedef union { long lval; AWKNUM fval; @@ -133,11 +134,11 @@ typedef union { -#define YYFINAL 320 +#define YYFINAL 318 #define YYFLAG -32768 #define YYNTBASE 63 -#define YYTRANSLATE(x) ((unsigned)(x) <= 295 ? yytranslate[x] : 108) +#define YYTRANSLATE(x) ((unsigned)(x) <= 295 ? yytranslate[x] : 110) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -178,100 +179,100 @@ static const short yyprhs[] = { 0, 25, 28, 31, 34, 36, 39, 42, 44, 46, 48, 50, 52, 53, 61, 67, 72, 74, 78, 79, 84, 90, 95, 97, 100, 102, 105, 107, 110, 113, 116, - 120, 122, 129, 138, 147, 160, 172, 175, 178, 185, - 190, 193, 196, 200, 201, 206, 213, 217, 220, 222, - 224, 231, 241, 243, 246, 247, 249, 250, 253, 254, - 257, 260, 263, 266, 267, 269, 271, 275, 277, 280, - 284, 285, 287, 288, 290, 292, 296, 298, 301, 305, - 309, 310, 312, 314, 318, 320, 323, 327, 331, 332, - 337, 343, 348, 353, 357, 361, 365, 369, 371, 374, - 378, 382, 386, 390, 396, 398, 401, 402, 407, 411, - 415, 419, 421, 424, 428, 432, 436, 442, 444, 447, - 449, 453, 457, 461, 465, 469, 473, 476, 479, 482, - 486, 491, 496, 498, 503, 505, 508, 511, 513, 515, - 518, 521, 522, 524, 526, 531, 534, 537, 540, 542, - 543, 545, 547 + 120, 122, 129, 138, 147, 160, 172, 175, 178, 181, + 184, 188, 189, 194, 197, 203, 207, 213, 216, 218, + 219, 221, 223, 225, 232, 242, 244, 247, 248, 250, + 251, 254, 255, 258, 261, 264, 267, 268, 270, 272, + 276, 278, 281, 285, 286, 288, 289, 291, 293, 297, + 299, 302, 306, 310, 311, 313, 315, 319, 321, 324, + 328, 332, 333, 338, 344, 349, 354, 358, 362, 366, + 370, 372, 375, 379, 383, 387, 391, 397, 399, 402, + 403, 408, 412, 416, 420, 422, 425, 429, 433, 437, + 443, 445, 448, 450, 454, 458, 462, 466, 470, 474, + 477, 480, 483, 487, 492, 497, 499, 504, 506, 509, + 512, 514, 516, 519, 522, 523, 525, 527, 532, 535, + 538, 541, 543, 544, 546, 548 }; -static const short yyrhs[] = { 84, - 64, 84, 0, 65, 0, 64, 65, 0, 1, 0, +static const short yyrhs[] = { 86, + 64, 86, 0, 65, 0, 64, 65, 0, 1, 0, 64, 1, 0, 0, 0, 15, 66, 76, 0, 0, 16, 67, 76, 0, 15, 78, 0, 16, 78, 0, 73, 76, 0, 76, 0, 73, 78, 0, 70, 72, 0, 4, 0, 3, 0, 69, 0, 38, 0, 39, - 0, 0, 30, 71, 68, 56, 87, 104, 84, 0, - 102, 77, 103, 105, 84, 0, 102, 103, 105, 84, - 0, 94, 0, 94, 42, 94, 0, 0, 50, 75, - 5, 50, 0, 102, 77, 103, 105, 84, 0, 102, - 103, 105, 84, 0, 79, 0, 77, 79, 0, 1, - 0, 77, 1, 0, 83, 0, 106, 84, 0, 106, - 84, 0, 102, 103, 0, 102, 77, 103, 0, 82, - 0, 21, 56, 94, 104, 84, 79, 0, 22, 84, - 79, 21, 56, 94, 104, 84, 0, 23, 56, 4, - 33, 4, 104, 84, 79, 0, 23, 56, 89, 106, - 84, 94, 106, 84, 89, 104, 84, 79, 0, 23, - 56, 89, 106, 84, 106, 84, 89, 104, 84, 79, - 0, 24, 78, 0, 25, 78, 0, 81, 56, 93, - 104, 86, 78, 0, 81, 90, 86, 78, 0, 28, - 78, 0, 32, 78, 0, 29, 89, 78, 0, 0, - 19, 80, 89, 78, 0, 20, 4, 58, 93, 59, - 78, 0, 20, 4, 78, 0, 94, 78, 0, 26, - 0, 27, 0, 17, 56, 94, 104, 84, 79, 0, - 17, 56, 94, 104, 84, 79, 18, 84, 79, 0, - 13, 0, 83, 13, 0, 0, 83, 0, 0, 43, - 98, 0, 0, 44, 94, 0, 10, 94, 0, 45, - 94, 0, 46, 94, 0, 0, 88, 0, 4, 0, - 88, 107, 4, 0, 1, 0, 88, 1, 0, 88, - 107, 1, 0, 0, 94, 0, 0, 91, 0, 96, - 0, 91, 107, 96, 0, 1, 0, 91, 1, 0, - 91, 1, 96, 0, 91, 107, 1, 0, 0, 93, - 0, 94, 0, 93, 107, 94, 0, 1, 0, 93, - 1, 0, 93, 1, 94, 0, 93, 107, 1, 0, - 0, 101, 11, 95, 94, 0, 56, 93, 104, 33, - 4, 0, 94, 45, 31, 100, 0, 94, 46, 31, - 100, 0, 31, 100, 85, 0, 94, 34, 94, 0, - 94, 35, 94, 0, 94, 12, 94, 0, 74, 0, - 52, 74, 0, 94, 33, 4, 0, 94, 9, 94, - 0, 94, 43, 94, 0, 94, 44, 94, 0, 94, - 40, 94, 41, 94, 0, 98, 0, 94, 98, 0, - 0, 101, 11, 97, 96, 0, 96, 34, 96, 0, - 96, 35, 96, 0, 31, 100, 85, 0, 74, 0, - 52, 74, 0, 96, 12, 96, 0, 96, 33, 4, - 0, 96, 9, 96, 0, 96, 40, 96, 41, 96, - 0, 98, 0, 96, 98, 0, 99, 0, 98, 54, - 98, 0, 98, 49, 98, 0, 98, 50, 98, 0, - 98, 51, 98, 0, 98, 47, 98, 0, 98, 48, - 98, 0, 101, 36, 0, 101, 37, 0, 52, 98, - 0, 56, 94, 104, 0, 38, 56, 92, 104, 0, - 39, 56, 92, 104, 0, 39, 0, 3, 56, 92, - 104, 0, 101, 0, 36, 101, 0, 37, 101, 0, - 7, 0, 8, 0, 48, 98, 0, 47, 98, 0, - 0, 101, 0, 4, 0, 4, 58, 93, 59, 0, - 55, 99, 0, 60, 84, 0, 61, 84, 0, 57, - 0, 0, 106, 0, 62, 0, 42, 84, 0 + 0, 0, 30, 71, 68, 56, 89, 106, 86, 0, + 104, 77, 105, 107, 86, 0, 104, 105, 107, 86, + 0, 96, 0, 96, 42, 96, 0, 0, 50, 75, + 5, 50, 0, 104, 77, 105, 107, 86, 0, 104, + 105, 107, 86, 0, 79, 0, 77, 79, 0, 1, + 0, 77, 1, 0, 85, 0, 108, 86, 0, 108, + 86, 0, 104, 105, 0, 104, 77, 105, 0, 84, + 0, 21, 56, 96, 106, 86, 79, 0, 22, 86, + 79, 21, 56, 96, 106, 86, 0, 23, 56, 4, + 33, 4, 106, 86, 79, 0, 23, 56, 82, 108, + 86, 96, 108, 86, 82, 106, 86, 79, 0, 23, + 56, 82, 108, 86, 108, 86, 82, 106, 86, 79, + 0, 24, 78, 0, 25, 78, 0, 28, 78, 0, + 32, 78, 0, 29, 91, 78, 0, 0, 19, 80, + 91, 78, 0, 81, 78, 0, 83, 56, 95, 106, + 88, 0, 83, 92, 88, 0, 20, 4, 58, 95, + 59, 0, 20, 4, 0, 96, 0, 0, 81, 0, + 26, 0, 27, 0, 17, 56, 96, 106, 86, 79, + 0, 17, 56, 96, 106, 86, 79, 18, 86, 79, + 0, 13, 0, 85, 13, 0, 0, 85, 0, 0, + 43, 100, 0, 0, 44, 96, 0, 10, 96, 0, + 45, 96, 0, 46, 96, 0, 0, 90, 0, 4, + 0, 90, 109, 4, 0, 1, 0, 90, 1, 0, + 90, 109, 1, 0, 0, 96, 0, 0, 93, 0, + 98, 0, 93, 109, 98, 0, 1, 0, 93, 1, + 0, 93, 1, 98, 0, 93, 109, 1, 0, 0, + 95, 0, 96, 0, 95, 109, 96, 0, 1, 0, + 95, 1, 0, 95, 1, 96, 0, 95, 109, 1, + 0, 0, 103, 11, 97, 96, 0, 56, 95, 106, + 33, 4, 0, 96, 45, 31, 102, 0, 96, 46, + 31, 102, 0, 31, 102, 87, 0, 96, 34, 96, + 0, 96, 35, 96, 0, 96, 12, 96, 0, 74, + 0, 52, 74, 0, 96, 33, 4, 0, 96, 9, + 96, 0, 96, 43, 96, 0, 96, 44, 96, 0, + 96, 40, 96, 41, 96, 0, 100, 0, 96, 100, + 0, 0, 103, 11, 99, 98, 0, 98, 34, 98, + 0, 98, 35, 98, 0, 31, 102, 87, 0, 74, + 0, 52, 74, 0, 98, 12, 98, 0, 98, 33, + 4, 0, 98, 9, 98, 0, 98, 40, 98, 41, + 98, 0, 100, 0, 98, 100, 0, 101, 0, 100, + 54, 100, 0, 100, 49, 100, 0, 100, 50, 100, + 0, 100, 51, 100, 0, 100, 47, 100, 0, 100, + 48, 100, 0, 103, 36, 0, 103, 37, 0, 52, + 100, 0, 56, 96, 106, 0, 38, 56, 94, 106, + 0, 39, 56, 94, 106, 0, 39, 0, 3, 56, + 94, 106, 0, 103, 0, 36, 103, 0, 37, 103, + 0, 7, 0, 8, 0, 48, 100, 0, 47, 100, + 0, 0, 103, 0, 4, 0, 4, 58, 95, 59, + 0, 55, 101, 0, 60, 86, 0, 61, 86, 0, + 57, 0, 0, 108, 0, 62, 0, 42, 86, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, - 157, 165, 173, 189, 190, 191, 195, 197, 211, 213, - 228, 234, 240, 242, 244, 257, 266, 268, 270, 280, - 281, 285, 289, 304, 309, 318, 320, 329, 331, 349, - 351, 356, 362, 370, 372, 377, 378, 382, 384, 386, - 388, 390, 392, 394, 422, 426, 431, 434, 437, 443, - 465, 473, 492, 494, 499, 501, 503, 517, 522, 524, - 529, 534, 541, 543, 547, 548, 552, 554, 559, 561, - 563, 565, 567, 577, 579, 584, 586, 588, 590, 592, - 598, 600, 605, 607, 612, 614, 620, 622, 624, 626, - 631, 633, 638, 640, 646, 648, 650, 652, 657, 660, - 665, 667, 672, 677, 683, 685, 687, 693, 703, 711, - 713, 719, 721, 723, 725, 727, 732, 735, 736, 738, - 740, 746, 748, 750, 752, 754, 756, 758, 760, 765, - 767, 769, 771, 773, 775, 777, 779, 781, 786, 788, - 790, 793, 795, 803, 810, 811, 813, 815, 817, 820, - 828, 839, 841, 846, 848, 858, 863, 867, 871, 875, - 876, 880, 883 + 159, 167, 175, 191, 192, 193, 197, 199, 213, 215, + 230, 236, 242, 244, 246, 259, 268, 270, 272, 282, + 283, 287, 291, 306, 311, 320, 322, 331, 333, 351, + 353, 358, 364, 372, 374, 379, 380, 384, 386, 388, + 390, 392, 394, 396, 436, 440, 445, 448, 451, 459, + 478, 480, 485, 487, 499, 505, 527, 529, 543, 548, + 550, 555, 557, 562, 567, 574, 576, 580, 581, 585, + 587, 592, 594, 596, 598, 600, 610, 612, 617, 619, + 621, 623, 625, 631, 633, 638, 640, 645, 647, 653, + 655, 657, 659, 664, 666, 671, 673, 679, 681, 683, + 685, 690, 693, 698, 700, 705, 710, 716, 718, 720, + 726, 736, 744, 746, 752, 754, 756, 758, 760, 765, + 768, 769, 771, 773, 779, 781, 783, 785, 787, 789, + 791, 793, 798, 800, 802, 804, 806, 808, 810, 812, + 814, 819, 821, 823, 826, 828, 836, 843, 844, 846, + 848, 850, 853, 861, 872, 874, 879, 881, 891, 896, + 900, 904, 908, 909, 913, 916 }; #endif @@ -288,10 +289,11 @@ static const char * const yytname[] = { "$","error","$undefined.","FUNC_CALL", "'!'","UNARY","'^'","'$'","'('","')'","'['","']'","'{'","'}'","';'","start", "program","rule","@1","@2","func_name","lex_builtin","function_prologue","@3", "function_body","pattern","regexp","@4","action","statements","statement_term", -"statement","@5","print","if_statement","nls","opt_nls","input_redir","output_redir", -"opt_param_list","param_list","opt_exp","opt_rexpression_list","rexpression_list", -"opt_expression_list","expression_list","exp","@6","rexp","@7","simp_exp","non_post_simp_exp", -"opt_variable","variable","l_brace","r_brace","r_paren","opt_semi","semi","comma", NULL +"statement","@5","simple_stmt","opt_simple_stmt","print","if_statement","nls", +"opt_nls","input_redir","output_redir","opt_param_list","param_list","opt_exp", +"opt_rexpression_list","rexpression_list","opt_expression_list","expression_list", +"exp","@6","rexp","@7","simp_exp","non_post_simp_exp","opt_variable","variable", +"l_brace","r_brace","r_paren","opt_semi","semi","comma", NULL }; #endif @@ -301,18 +303,18 @@ static const short yyr1[] = { 0, 69, 71, 70, 72, 72, 73, 73, 75, 74, 76, 76, 77, 77, 77, 77, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 80, 79, 79, 79, 79, 81, 81, - 82, 82, 83, 83, 84, 84, 85, 85, 86, 86, - 86, 86, 86, 87, 87, 88, 88, 88, 88, 88, - 89, 89, 90, 90, 91, 91, 91, 91, 91, 91, - 92, 92, 93, 93, 93, 93, 93, 93, 95, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 97, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 100, 100, 101, 101, 101, 102, 103, 104, 105, - 105, 106, 107 + 79, 80, 79, 79, 81, 81, 81, 81, 81, 82, + 82, 83, 83, 84, 84, 85, 85, 86, 86, 87, + 87, 88, 88, 88, 88, 88, 89, 89, 90, 90, + 90, 90, 90, 91, 91, 92, 92, 93, 93, 93, + 93, 93, 93, 94, 94, 95, 95, 95, 95, 95, + 95, 97, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 102, 102, 103, 103, 103, 104, + 105, 106, 107, 107, 108, 109 }; static const short yyr2[] = { 0, @@ -320,505 +322,489 @@ static const short yyr2[] = { 0, 2, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 0, 7, 5, 4, 1, 3, 0, 4, 5, 4, 1, 2, 1, 2, 1, 2, 2, 2, 3, - 1, 6, 8, 8, 12, 11, 2, 2, 6, 4, - 2, 2, 3, 0, 4, 6, 3, 2, 1, 1, - 6, 9, 1, 2, 0, 1, 0, 2, 0, 2, - 2, 2, 2, 0, 1, 1, 3, 1, 2, 3, - 0, 1, 0, 1, 1, 3, 1, 2, 3, 3, - 0, 1, 1, 3, 1, 2, 3, 3, 0, 4, - 5, 4, 4, 3, 3, 3, 3, 1, 2, 3, - 3, 3, 3, 5, 1, 2, 0, 4, 3, 3, - 3, 1, 2, 3, 3, 3, 5, 1, 2, 1, - 3, 3, 3, 3, 3, 3, 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 + 1, 6, 8, 8, 12, 11, 2, 2, 2, 2, + 3, 0, 4, 2, 5, 3, 5, 2, 1, 0, + 1, 1, 1, 6, 9, 1, 2, 0, 1, 0, + 2, 0, 2, 2, 2, 2, 0, 1, 1, 3, + 1, 2, 3, 0, 1, 0, 1, 1, 3, 1, + 2, 3, 3, 0, 1, 1, 3, 1, 2, 3, + 3, 0, 4, 5, 4, 4, 3, 3, 3, 3, + 1, 2, 3, 3, 3, 3, 5, 1, 2, 0, + 4, 3, 3, 3, 1, 2, 3, 3, 3, 5, + 1, 2, 1, 3, 3, 3, 3, 3, 3, 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 }; -static const short yydefact[] = { 65, - 63, 66, 0, 64, 4, 0, 154, 148, 149, 7, - 9, 22, 152, 0, 0, 0, 143, 0, 0, 28, - 0, 0, 0, 65, 0, 2, 0, 0, 108, 14, - 26, 115, 130, 145, 0, 0, 0, 162, 0, 11, - 36, 65, 0, 12, 0, 67, 153, 146, 147, 0, - 0, 0, 0, 151, 145, 150, 0, 109, 139, 156, - 145, 95, 0, 93, 157, 5, 3, 1, 16, 0, +static const short yydefact[] = { 68, + 66, 69, 0, 67, 4, 0, 157, 151, 152, 7, + 9, 22, 155, 0, 0, 0, 146, 0, 0, 28, + 0, 0, 0, 68, 0, 2, 0, 0, 111, 14, + 26, 118, 133, 148, 0, 0, 0, 165, 0, 11, + 36, 68, 0, 12, 0, 70, 156, 149, 150, 0, + 0, 0, 0, 154, 148, 153, 0, 112, 142, 159, + 148, 98, 0, 96, 160, 5, 3, 1, 16, 0, 13, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, - 99, 137, 138, 34, 0, 54, 0, 0, 65, 0, - 0, 0, 59, 60, 0, 81, 0, 65, 0, 32, - 0, 41, 0, 0, 160, 65, 0, 0, 93, 0, - 8, 37, 10, 18, 17, 20, 21, 0, 19, 0, - 104, 0, 0, 0, 0, 96, 65, 159, 0, 0, - 140, 0, 160, 111, 107, 110, 105, 106, 0, 27, - 112, 113, 152, 152, 135, 136, 132, 133, 134, 131, - 0, 0, 81, 0, 0, 0, 81, 47, 48, 51, - 0, 82, 52, 158, 35, 33, 160, 87, 152, 0, - 0, 122, 69, 0, 85, 128, 145, 58, 0, 39, - 65, 161, 38, 144, 155, 0, 68, 141, 142, 29, - 97, 163, 0, 98, 94, 160, 65, 0, 102, 103, - 100, 0, 0, 0, 57, 0, 0, 154, 0, 53, - 65, 67, 123, 0, 0, 0, 0, 0, 0, 88, - 0, 0, 0, 0, 0, 0, 0, 129, 117, 40, - 31, 78, 76, 0, 0, 101, 65, 25, 114, 65, - 55, 0, 65, 0, 0, 65, 30, 121, 69, 71, - 70, 72, 73, 50, 89, 90, 86, 126, 124, 125, - 119, 120, 0, 0, 65, 79, 0, 24, 0, 0, - 0, 0, 0, 0, 0, 0, 118, 23, 80, 77, - 61, 56, 42, 0, 65, 0, 65, 49, 127, 65, - 65, 0, 65, 81, 0, 43, 44, 81, 0, 62, - 0, 65, 65, 0, 0, 46, 45, 0, 0, 0 + 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, + 102, 140, 141, 34, 0, 52, 0, 0, 68, 0, + 0, 0, 62, 63, 0, 84, 0, 68, 0, 32, + 0, 0, 41, 59, 0, 163, 68, 0, 0, 96, + 0, 8, 37, 10, 18, 17, 20, 21, 0, 19, + 0, 107, 0, 0, 0, 0, 99, 68, 162, 0, + 0, 143, 0, 163, 114, 110, 113, 108, 109, 0, + 27, 115, 116, 155, 155, 138, 139, 135, 136, 137, + 134, 0, 0, 84, 58, 0, 0, 60, 47, 48, + 49, 0, 85, 50, 161, 35, 33, 163, 54, 90, + 155, 0, 0, 125, 72, 0, 88, 131, 148, 0, + 39, 68, 164, 38, 147, 158, 0, 71, 144, 145, + 29, 100, 166, 0, 101, 97, 163, 68, 0, 105, + 106, 103, 0, 0, 0, 0, 0, 157, 61, 0, + 51, 68, 70, 126, 0, 0, 0, 0, 0, 56, + 91, 0, 0, 0, 0, 0, 0, 0, 132, 120, + 40, 31, 81, 79, 0, 0, 104, 68, 25, 117, + 68, 53, 0, 68, 0, 0, 68, 30, 124, 72, + 74, 73, 75, 76, 92, 93, 89, 129, 127, 128, + 122, 123, 0, 0, 68, 82, 0, 24, 0, 57, + 0, 0, 0, 0, 55, 0, 121, 23, 83, 80, + 64, 42, 0, 68, 0, 68, 130, 68, 68, 0, + 68, 60, 0, 43, 44, 60, 0, 65, 0, 68, + 68, 0, 0, 46, 45, 0, 0, 0 }; -static const short yydefgoto[] = { 318, - 25, 26, 39, 43, 128, 129, 27, 45, 69, 28, - 29, 57, 30, 109, 40, 110, 163, 111, 112, 2, - 3, 131, 229, 244, 245, 171, 183, 184, 117, 118, - 113, 161, 185, 274, 32, 33, 46, 34, 114, 115, - 141, 191, 42, 140 +static const short yydefgoto[] = { 316, + 25, 26, 39, 43, 129, 130, 27, 45, 69, 28, + 29, 57, 30, 109, 40, 110, 164, 111, 220, 112, + 113, 2, 3, 132, 230, 245, 246, 172, 185, 186, + 118, 119, 114, 162, 187, 274, 32, 33, 46, 34, + 115, 116, 142, 192, 117, 141 }; -static const short yypact[] = { 2, --32768, 4, 840,-32768,-32768, -33, -32,-32768,-32768, -4, - -4,-32768, -1, -1, -1, -27, 34, 1832, 1832,-32768, - 1811, 1832, 1158, 2, 898,-32768, 29, 33,-32768,-32768, - 1322, 103,-32768, 72, 630, 1136, 1158,-32768, 29,-32768, - 4, 2, 29,-32768, 84, 54,-32768,-32768,-32768, 1136, - 1136, 1832, 1715, 53, 31, 53, 120,-32768, 53,-32768, --32768,-32768, 39, 1267,-32768,-32768,-32768,-32768,-32768, 630, --32768,-32768, 1715, 1715, 128, 1715, 1715, 1715, 1715, 1715, - 1715, 104, 105, 103, 1832, 1832, 1832, 1832, 1832, 1832, --32768,-32768,-32768,-32768, 88,-32768, 130, 89, 2, 90, - -4, -4,-32768,-32768, -4, 1715, -4, 2, 721,-32768, - 783,-32768, 1008, 630, 86, 2, 111, 43, 1422, 10, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 100,-32768, 1832, --32768, 111, 111, 1267, 119, 1715, 2,-32768, 122, 1208, --32768, 721, 86, 1886, 1869,-32768, 1522, 1472, 1372, 1422, - 1886, 1886, -1, -1, 116, 116, 53, 53, 53, 53, - 1715, 1715, 1715, 36, 1715, 948, 1752,-32768,-32768,-32768, - -4, 1422,-32768,-32768,-32768,-32768, 86,-32768, -1, 1811, - 1158,-32768, 95, 17, 1614, 103, 93,-32768, 721,-32768, - 2,-32768,-32768,-32768,-32768, 9, 103,-32768,-32768,-32768, - 1422,-32768, 167,-32768, 1422, 86, 2, 1715,-32768,-32768, - 1422, 1267, -4, 1158,-32768, 1267, 151, -5, 86,-32768, - 2, 54,-32768, 39, 1715, 1715, 1715, 1715, -4, 1774, - 1230, 1774, 1774, 169, 1774, 1774, 1774, 103,-32768,-32768, --32768,-32768,-32768, 111, 44,-32768, 2,-32768, 1422, 2, --32768, 13, 2, 121, 171, 2,-32768,-32768, 95, 1422, - 1422, 1422, 1422,-32768, 1614,-32768, 1614, 1280, 390,-32768, - 1693, 1656, 1572, 1774, 2,-32768, 20,-32768, 948, -4, - 948, 1715, 111, 1086, -4, 1774, 1614,-32768,-32768,-32768, - 158,-32768,-32768, 1267, 2, 1064, 2,-32768, 1614, 2, - 2, 948, 2, 1715, 948,-32768,-32768, 1715, 111,-32768, - 111, 2, 2, 948, 948,-32768,-32768, 179, 180,-32768 +static const short yypact[] = { 4, +-32768, 26, 848,-32768,-32768, -13, -17,-32768,-32768, 12, + 12,-32768, 15, 15, 15, -11, 11, 1772, 1772,-32768, + 1735, 1772, 1065, 4, 906,-32768, 56, -3,-32768,-32768, + 1229, 198,-32768, 17, 676, 1043, 1065,-32768, 56,-32768, + 26, 4, 56,-32768, 82, 35,-32768,-32768,-32768, 1043, + 1043, 1772, 1677, 53, 51, 53, 106,-32768, 53,-32768, +-32768,-32768, 19, 1174,-32768,-32768,-32768,-32768,-32768, 676, +-32768,-32768, 1677, 1677, 120, 1677, 1677, 1677, 1677, 1677, + 1677, 94, 99, 198, 1772, 1772, 1772, 1772, 1772, 1772, +-32768,-32768,-32768,-32768, 75,-32768, 129, 79, 4, 83, + 12, 12,-32768,-32768, 12, 1677, 12, 4, 726,-32768, + 12, 788,-32768, 1329, 676, 78, 4, 89, 37, 1329, + 13,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 97,-32768, + 1772,-32768, 89, 89, 1174, 100, 1677, 4,-32768, 124, + 1115,-32768, 726, 78, 1814, 1789,-32768, 1429, 1379, 1279, + 1329, 1814, 1814, 15, 15, -14, -14, 53, 53, 53, + 53, 1677, 1677, 1677, 102, 1677, 956, 1544,-32768,-32768, +-32768, 12, 1329,-32768,-32768,-32768,-32768, 78,-32768,-32768, + 15, 1735, 1065,-32768, 73, 20, 1521, 198, 118, 726, +-32768, 4,-32768,-32768,-32768,-32768, 43, 198,-32768,-32768, +-32768, 1329,-32768, 157,-32768, 1329, 78, 4, 1677,-32768, +-32768, 1329, 1174, 12, 1065, 1174, 142, -7,-32768, 78, +-32768, 4, 35,-32768, 19, 1677, 1677, 1677, 1677,-32768, + 1714, 1137, 1714, 1714, 160, 1714, 1714, 1714, 198,-32768, +-32768,-32768,-32768,-32768, 89, 47,-32768, 4,-32768, 1329, + 4,-32768, 14, 4, 109, 165, 4,-32768,-32768, 73, + 1329, 1329, 1329, 1329, 1521,-32768, 1521, 1006, 1187,-32768, + 1655, 1618, 1479, 1714, 4,-32768, 59,-32768, 956,-32768, + 956, 1677, 89, 524,-32768, 1714, 1521,-32768,-32768,-32768, + 153,-32768, 1174, 4, 993, 4, 1521, 4, 4, 956, + 4, 1581, 956,-32768,-32768, 1581, 89,-32768, 89, 4, + 4, 956, 956,-32768,-32768, 175, 176,-32768 }; static const short yypgoto[] = {-32768, --32768, 156,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 245,-32768, 78, -54, 403, 98,-32768,-32768,-32768, 210, - -17, -34, -70,-32768,-32768, -161,-32768,-32768, 63, -18, - -3,-32768, -194,-32768, 321, 170, -122, 97, 99, -58, - 204, -142, 421, -180 +-32768, 152,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -15,-32768, 70, -57, 21, -75,-32768, -165, -275,-32768, +-32768, 1, -24, -45, -81,-32768,-32768, 16,-32768,-32768, + 40, -21, 309,-32768, -89,-32768, 395, 166, -131, 168, + 131, -63, 18, -136, -6, -177 }; -#define YYLAST 1942 - - -static const short yytable[] = { 31, - 207, 213, 7, 231, 63, 219, 65, 68, 1, 242, - 136, 143, 243, 136, 1, 142, 4, 230, 120, 64, - 289, 31, 36, 290, 122, 37, -84, 255, 50, -84, - 209, 210, 119, 119, 221, 265, 267, 268, 269, 136, - 271, 272, 273, 136, 276, 1, 119, 119, 1, 134, - 177, 137, 37, 22, 137, 190, 222, 38, 137, 189, - -84, -84, -84, 247, 277, -74, 92, 93, 195, 144, - 145, 280, 147, 148, 149, 150, 151, 152, -84, 287, - 137, 166, 91, 206, 137, 137, 124, 125, 24, 51, - 174, 299, 24, 214, 38, 138, 130, 38, 193, -92, - -75, 35, 172, 239, 225, 71, 90, 92, 93, 47, - 48, 49, 132, 133, 55, 55, 121, 55, 61, 202, - 123, 126, 127, 35, 135, 70, 35, 55, 92, 93, - 240, 146, 201, 164, 153, 154, 205, 35, 226, 227, - 228, 35, 309, 162, 165, 167, 311, 38, 55, 85, - 86, 87, 88, 89, 203, 196, 90, 211, 212, 172, - 55, 216, 224, 172, 87, 88, 89, 138, 200, 90, - 246, 254, 270, 241, 283, 300, 282, 64, 319, 320, - 67, 55, 55, 55, 55, 55, 55, 258, 285, 248, - 0, 60, 0, 0, 0, 252, 0, 0, 0, 0, - 0, 0, 0, 257, 249, 0, 176, 187, 0, 55, - 119, 0, 0, 0, 0, 55, 0, 0, 0, 41, - 41, 260, 261, 262, 263, 0, 55, 0, 0, 278, - 55, 0, 279, 0, 0, 281, 0, 41, 284, 176, - 55, 55, 0, 55, 55, 55, 55, 55, 55, 47, - 47, 0, 0, 0, 0, 0, 0, 288, 0, 0, - 0, 0, 0, 217, 0, 58, 139, 0, 55, 0, - 0, 0, 0, 0, 0, 47, 55, 302, 294, 304, - 296, 55, 305, 306, 0, 308, 176, 0, 0, 0, - 0, 0, 0, 0, 314, 315, 0, 55, 0, 0, - 172, 55, 0, 0, 172, 0, 0, 55, 55, 0, - 41, 41, 55, 0, 41, 0, 41, 0, 0, 0, - 194, 0, 41, 0, 0, 0, 187, 187, 187, 187, - 0, 187, 187, 187, 0, 198, 199, 0, 54, 56, - 0, 59, 0, 0, 0, 55, 0, 0, 0, 0, - 0, 84, 0, 0, 0, 182, 55, 55, 55, 55, - 0, 55, 0, 55, 55, 55, 0, 55, 55, 55, - 187, 0, 59, 41, 0, 0, 291, 0, 293, 0, - 41, 0, 187, 55, 84, 0, 0, 0, 0, 0, - 55, 0, 55, 7, 0, 55, 8, 9, 232, 307, - 0,-32768, 310, 0, 0, 155, 156, 157, 158, 159, - 160, 316, 317, 44, 0, 250, 0, 0, 0, 253, - 0, 0, 41, 0, 223, 14, 15, 259, 0, 0, - 72, 186, 0, 84, 0, 0, 18, 19, 41, 84, - 0, 52, 0, 0, 22, 53, 0, 275, 0, 0, - 197, 0, 0, 0, 84, 116, 0, 0, 0, 0, - 0, 0, 0, 0, 84, 84, 0, 84, 84, 84, - 84, 84, 84, 0, 182, 182, 182, 182, 0, 182, - 182, 182, 0, 0, 0, 0, 295, 0, 0, 41, - 116, 0, 84, 0, 41, 0, 0, 301, 0, 0, - 59, 0, 0, 168, 169, 238, 0, 170, 0, 173, - 0, 0, 312, 0, 313, 188, 0, 0, 182, 0, - 0, 84, 0, 0, 0, 84, 0, 0, 0, 116, - 182, 84, 84, 0, 116, 192, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 186, 186, 186, 186, 0, 186, 186, 186, 0, 0, - 0, 0, 116, 192, 0, 0, 215, 0, 0, 84, - 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, - 84, 84, 84, 84, 0, 238, 116, 238, 238, 238, - 0, 238, 238, 238, 186, 0, 0, 192, 0, 0, - 0, 0, 0, 0, 0, 0, 186, 238, 0, 116, - 0, 0, 0, 0, 84, 251, 84, 0, 0, 238, - 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, - 94, 264, 6, 7, 0, 0, 8, 9, 0, 256, - 0, 0, 0, 0, 0, 0, 95, 0, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 0, - 13, 107, 0, 0, 0, 14, 15, 16, 17, 0, - 0, 0, 0, 0, 0, 0, 18, 19, 0, 20, - 0, 21, 292, 0, 22, 23, 0, 298, 0, 24, - 108, 38, 0, 0, 0, 0, 0, 0, 0, 116, - 0, 116, 0, 0, 297, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, - 0, 175, 116, 6, 7, 116, 0, 8, 9, 0, - 0, 0, 0, 0, 116, 116, 0, 95, 0, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 0, 13, 107, 0, 0, 0, 14, 15, 16, 17, - 0, 0, 0, 0, 0, 0, 0, 18, 19, 0, - 20, 0, 21, 0, 0, 22, 23, 0, 0, 0, - 24, 108, 38, 178, 0, 6, 7, 0, 0, 8, - 9, 0, -83, 0, 0, -83, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 179, 0, 0, 0, 0, 14, 15, - 16, 17, 0, 0, 0, 0, -83, -83, -83, 18, - 19, 0, 20, 0, 180, 0, 0, 22, 181, -6, - 5, 0, 6, 7, -83, 0, 8, 9, 0, 0, - 0, 0, -6, 0, 10, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, - 13, 0, 0, 0, 0, 14, 15, 16, 17, 0, - 0, 0, 0, 0, 0, 0, 18, 19, 0, 20, - 0, 21, 0, 0, 22, 23, 0, -65, 66, 24, +#define YYLAST 1870 + + +static const short yytable[] = { 65, + 68, 63, 219, 42, 42, 58, 144, 208, 232, 1, + 41, 41, 143, 137, 137, 121, 1, 123, 7, 137, + 231, 42, 210, 211, 1, 256, 307, 91, 41, -87, + 309, 44, -87, 177, 87, 88, 89, 137, 4, 90, + 37, 222, 36, 243, 50, 178, 244, 276, 72, 223, + 37, 191, 92, 93, 138, 138, 24, 190, 38, 289, + 138, 138, 290, -87, -87, -87, 51, 177, 277, 22, + 248, 196, 280, 38, 167, 139, -87, 131, 138, 207, + 140, -87, 226, 175, 125, 126, 92, 93, 138, 133, + 134, 217, 194, -95, 42, 42, 184, 71, 42, -77, + 42, 41, 41, -78, 42, 41, 90, 41, 122, 193, + 136, 41, 124, 203, 177, 24, 227, 228, 229, 127, + 128, 169, 170, 147, 154, 171, 241, 174, 240, 155, + 163, 179, 165, 35, 166, 195, 219, 193, 168, 38, + 219, 265, 267, 268, 269, 139, 271, 272, 273, 201, + 199, 200, 197, 92, 93, 35, 204, 70, 35, 215, + 247, 225, 255, 270, 282, 42, 224, 242, 283, 35, + 298, 193, 41, 35, 317, 318, 67, 259, 285, 214, + 47, 48, 49, 249, 287, 55, 55, 60, 55, 61, + 0, 0, 221, 253, 0, 0, 297, 258, 55, 0, + 193, 0, 0, 291, 0, 292, 0, 42, 0, 0, + 0, 0, 0, 257, 41, 184, 184, 184, 184, 55, + 184, 184, 184, 278, 305, 0, 279, 308, 0, 281, + 251, 55, 284, 254, 252, 0, 314, 315, 0, 0, + 0, 0, 260, 0, 85, 86, 87, 88, 89, 0, + 288, 90, 55, 55, 55, 55, 55, 55, 184, 0, + 0, 0, 275, 0, 0, 0, 0, 0, 0, 300, + 184, 302, 0, 303, 304, 0, 306, 296, 0, 189, + 0, 55, 0, 0, 0, 312, 313, 55, 301, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, + 294, 0, 55, 0, 0, 0, 0, 0, 0, 0, + 299, 31, 55, 55, 0, 55, 55, 55, 55, 55, + 55, 47, 47, 0, 310, 0, 311, 0, 0, 0, + 0, 64, 0, 31, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 0, 120, 120, 0, 0, 47, 55, + 0, 0, 0, 0, 55, 0, 0, 0, 120, 120, + 0, 135, 0, 0, 0, 0, 0, 0, 0, 55, + 0, 0, 0, 55, 0, 0, 0, 0, 0, 55, + 55, 145, 146, 55, 148, 149, 150, 151, 152, 153, + 0, 0, 0, 0, 0, 0, 0, 0, 189, 189, + 189, 189, 0, 189, 189, 189, 0, 0, 0, 0, + 0, 0, 54, 56, 173, 59, 0, 55, 0, 0, + 0, 0, 0, 0, 0, 84, 0, 0, 55, 55, + 55, 55, 55, 0, 55, 55, 55, 0, 55, 55, + 55, 189, 0, 0, 0, 202, 59, 0, 0, 206, + 0, 0, 0, 189, 55, 0, 0, 0, 84, 0, + 55, 0, 55, 0, 55, 0, 0, 0, 0, 0, + 212, 213, 173, 0, 216, 0, 0, 0, 0, 156, + 157, 158, 159, 160, 161, 0, 0, 0, 0, 0, + 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 0, 84, 0, + 0, 0, 0, 0, 84, 0, 0, 250, 0, 0, + 0, 0, 0, 120, 0, 198, 6, 7, 0, 84, + 8, 9, 0, 0, 261, 262, 263, 264, 0, 84, + 84, 0, 84, 84, 84, 84, 84, 84, 0, 0, + 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, + 15, 16, 17, 0, 0, 0, 0, 84, 0, 0, + 18, 19, 0, 20, 0, 21, 59, 0, 22, 23, + 0, 239, 0, 0, 0, 38, 0, 0, 0, 0, + 293, 0, 295, 0, 0, 0, 84, 0, 0, 0, + 84, 0, 0, 0, 0, 0, 84, 84, 0, 0, + 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 188, 188, 188, 188, 0, + 188, 188, 188, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 84, 84, 84, 84, 239, + 0, 239, 239, 239, 0, 239, 239, 239, 188, 0, + 0, 0, 0, 0, 0, 0, 94, 0, 6, 7, + 188, 239, 8, 9, 0, 0, 0, 84, 0, 84, + 0, 239, 95, 0, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 0, 13, 107, 0, 0, + 0, 14, 15, 16, 17, 0, 0, 0, 0, 0, + 0, 0, 18, 19, 0, 20, 176, 21, 6, 7, + 22, 23, 8, 9, 0, 24, 108, 38, 0, 0, + 0, 0, 95, 0, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 0, 13, 107, 0, 0, + 0, 14, 15, 16, 17, 0, 0, 0, 0, 0, + 0, 0, 18, 19, 0, 20, 0, 21, 0, 0, + 22, 23, 0, 0, 0, 24, 108, 38, 180, 0, + 6, 7, 0, 0, 8, 9, 0, -86, 0, 0, + -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, + 0, 0, 0, 14, 15, 16, 17, 0, 0, 0, + 0, -86, -86, -86, 18, 19, 0, 20, 0, 182, + 0, 0, 22, 183, -86, 0, 0, -6, 5, -86, 6, 7, 0, 0, 8, 9, 0, 0, 0, 0, - 1, 0, 10, 11, 0, 0, 0, 0, 0, 0, + -6, 0, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 0, 0, 0, 0, 14, 15, 16, 17, 0, 0, 0, 0, 0, 0, 0, 18, 19, 0, 20, 0, 21, - 6, 7, 22, 23, 8, 9, 0, 24, 0, 0, - 0, 0, 0, 0, 95, 0, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 0, 13, 107, - 0, 0, 0, 14, 15, 16, 17, 0, 0, 0, - 0, 0, 0, 0, 18, 19, 0, 20, 0, 21, - 0, 0, 22, 23, 0, 0, 0, 24, 0, 38, - 6, 7, 0, 0, 8, 9, 73, 0, 0, 74, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 75, 76, 77, 14, 15, 16, 17, 78, 0, 0, - 80, 81, 82, 83, 18, 19, 0, 0, 0, 52, - 0, 0, 22, 53, 0, 0, 6, 7, 0, 38, - 8, 9, 73, 0, 0, 74, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, - 0, 0, 8, 9, 0, 0, 75, 76, 77, 14, - 15, 16, 17, 78, 0, 0, 80, 81, 82, 83, - 18, 19, 0, 0, 0, 52, 13, 0, 22, 53, - 0, 14, 15, 16, 17, 38, 0, 0, 0, 0, - 0, 0, 18, 19, 0, 20, 62, 21, 6, 7, - 22, 23, 8, 9, 0, 0, 0, 38, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, - 6, 7, 0, 0, 8, 9, 13, 0, 0, 0, + 0, 0, 22, 23, 0, -68, 66, 24, 6, 7, + 0, 0, 8, 9, 0, 0, 0, 0, 1, 0, + 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12, 13, 0, 0, 0, 0, 14, 15, 16, 17, 0, 0, 0, 0, 0, - 0, 0, 18, 19, 0, 20, 0, 21, 13, 0, - 22, 23, -91, 14, 15, 16, 17, 0, 0, 0, - 0, 0, 0, 0, 18, 19, 0, 20, 204, 21, - 6, 7, 22, 23, 8, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 266, 0, 6, 7, 0, 0, 8, 9, 13, 0, - 0, 0, 0, 14, 15, 16, 17, 0, 0, 0, - 0, 0, 0, 0, 18, 19, 0, 20, 0, 21, - 179, 0, 22, 23, 0, 14, 15, 16, 17, 6, - 7, 0, 0, 8, 9, 73, 18, 19, 74, 20, - 0, 180, 0, 7, 22, 53, 8, 9,-32768, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, - 76, 77, 14, 15, 16, 17, 78, 0, 0, 80, - 81, 82, 83, 18, 19, 14, 15, 0, 52, 0, - 0, 22, 53, 138, 6, 7, 18, 19, 8, 9, - 73, 52, 0, 74, 22, 53, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 76, 77, 14, 15, 16, - 17, 78, 0, 79, 80, 81, 82, 83, 18, 19, - 0, 0, 0, 52, 6, 7, 22, 53, 8, 9, - 73, 0, 0, 74, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 76, 77, 14, 15, 16, - 17, 78, 208, 0, 80, 81, 82, 83, 18, 19, - 0, 0, 0, 52, 6, 7, 22, 53, 8, 9, - 73, 0, 0, 74, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 19, 0, 20, 0, 21, 6, 7, + 22, 23, 8, 9, 0, 24, 0, 0, 0, 0, + 0, 0, 95, 0, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 0, 13, 107, 0, 0, + 0, 14, 15, 16, 17, 6, 7, 0, 0, 8, + 9, 73, 18, 19, 74, 20, 0, 21, 0, 7, + 22, 23, 8, 9,-32768, 24, 0, 38, 0, 0, + 0, 0, 0, 0, 0, 75, 76, 77, 14, 15, + 16, 17, 78, 0, 0, 80, 81, 82, 83, 18, + 19, 14, 15, 62, 52, 6, 7, 22, 53, 8, + 9, 0, 18, 19, 38, 0, 0, 52, 0, 0, + 22, 53, 0, 0, 0, 62, 0, 6, 7, 0, + 0, 8, 9, 13, 0, 0, 0, 0, 14, 15, + 16, 17, 0, 0, 0, 0, 0, 0, 0, 18, + 19, 0, 20, 0, 21, 13, 0, 22, 23, -94, + 14, 15, 16, 17, 0, 0, 0, 0, 0, 0, + 0, 18, 19, 0, 20, 205, 21, 6, 7, 22, + 23, 8, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 266, 0, 6, + 7, 0, 0, 8, 9, 13, 0, 0, 0, 0, + 14, 15, 16, 17, 0, 0, 0, 0, 0, 0, + 0, 18, 19, 0, 20, 0, 21, 181, 0, 22, + 23, 0, 14, 15, 16, 17, 6, 7, 0, 0, + 8, 9, 73, 18, 19, 74, 20, 0, 182, 0, + 7, 22, 53, 8, 9, 233, 0, 0,-32768, 0, + 0, 0, 0, 0, 0, 0, 75, 76, 77, 14, + 15, 16, 17, 78, 0, 0, 80, 81, 82, 83, + 18, 19, 14, 15, 0, 52, 0, 0, 22, 53, + 139, 6, 7, 18, 19, 8, 9, 73, 52, 0, + 74, 22, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 76, 77, 14, 15, 16, - 17, 78, 0, 0, 80, 81, 82, 83, 18, 19, - 0, 0, 0, 52, 6, 7, 22, 53, 8, 9, - 73, 0, 0, 74, 0, 0, 0, 0, 0, 0, + 0, 75, 76, 77, 14, 15, 16, 17, 78, 0, + 79, 80, 81, 82, 83, 18, 19, 0, 0, 0, + 52, 6, 7, 22, 53, 8, 9, 73, 0, 0, + 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 76, 0, 14, 15, 16, - 17, 0, 0, 0, 80, 81, 82, 83, 18, 19, - 0, 0, 0, 52, 6, 7, 22, 53, 8, 9, - 73, 0, 0, 74, 0, 0, 0, 0, 0, 0, + 0, 75, 76, 77, 14, 15, 16, 17, 78, 209, + 0, 80, 81, 82, 83, 18, 19, 0, 0, 0, + 52, 6, 7, 22, 53, 8, 9, 73, 0, 0, + 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 0, 0, 14, 15, 16, - 17, 0, 0, 0, 80, 81, 82, 83, 18, 19, - 0, 0, 0, 52, 6, 7, 22, 53, 8, 9, - 232, 0, 0, 233, 0, 0, 0, 0, 0, 0, + 0, 75, 76, 77, 14, 15, 16, 17, 78, 0, + 0, 80, 81, 82, 83, 18, 19, 0, 0, 0, + 52, 6, 7, 22, 53, 8, 9, 73, 0, 0, + 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 234, 235, 236, 14, 15, 16, - 17, 237, 286, 0, 0, 0, 6, 7, 18, 19, - 8, 9, 232, 52, 0, 233, 22, 53, 0, 0, + 0, 75, 76, 0, 14, 15, 16, 17, 0, 0, + 0, 80, 81, 82, 83, 18, 19, 0, 0, 0, + 52, 6, 7, 22, 53, 8, 9, 73, 0, 0, + 74, 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, 234, 235, 236, 14, - 15, 16, 17, 237, 0, 0, 0, 0, 6, 7, - 18, 19, 8, 9, 232, 52, 0, 233, 22, 53, + 0, 75, 0, 0, 14, 15, 16, 17, 0, 0, + 0, 80, 81, 82, 83, 18, 19, 0, 0, 0, + 52, 6, 7, 22, 53, 8, 9, 233, 0, 0, + 234, 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, 234, 235, - 0, 14, 15, 16, 17, 6, 7, 0, 0, 8, - 9, 232, 18, 19, 233, 0, 0, 52, 0, 0, - 22, 53, 0, 0, 0, 0, 0, 6, 7, 0, - 0, 8, 9, 0, 0, 234, 0, 0, 14, 15, - 16, 17, 0, 0, 0, 0, 0, 0, 0, 18, - 19, 0, 0, 0, 52, 13, 0, 22, 53, 0, - 14, 15, 16, 17, 6, 218, 0, 0, 8, 9, - 0, 18, 19, 0, 20, 0, 21, 0, 0, 22, - 23, 0, 0, 0, 0, 0, 6, 7, 0, 0, - 8, 9, 13, 0, 0, 0, 0, 14, 15, 16, - 17, 0, 0, 0, 0, 0, 0, 0, 18, 19, - 0, 20, 0, 21, 179, 0, 22, 23, 0, 14, + 0, 235, 236, 237, 14, 15, 16, 17, 238, 286, + 0, 0, 0, 6, 7, 18, 19, 8, 9, 233, + 52, 0, 234, 22, 53, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 218, 0, 0, + 8, 9, 0, 235, 236, 237, 14, 15, 16, 17, + 238, 0, 0, 97, 0, 0, 0, 18, 19, 103, + 104, 0, 52, 0, 13, 22, 53, 0, 0, 14, 15, 16, 17, 6, 7, 0, 0, 8, 9, 0, - 18, 19, 0, 20, 0, 180, 0, 0, 22, 53, - 0, 0, 0, 0, 6, 7, 0, 0, 8, 9, - 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, - 0, 0, 0, 0, 0, 0, 0, 18, 19, 0, - 20, 0, 52, 0, 0, 22, 53, 14, 15, 16, - 17, 0, 7, 0, 0, 8, 9, 73, 18, 19, --32768, 0, 0, 52, 0, 0, 22, 53, 0, 7, - 0, 0, 8, 9,-32768, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 15, 0, 0, 0, 0, + 18, 19, 0, 20, 0, 21, 0, 0, 22, 23, + 97, 0, 0, 0, 0, 0, 103, 104, 0, 0, + 0, 13, 0, 0, 0, 0, 14, 15, 16, 17, + 6, 7, 0, 0, 8, 9, 233, 18, 19, 234, + 20, 0, 21, 0, 0, 22, 23, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 0, 14, 15, 16, 17, 6, 7, 0, + 0, 8, 9, 233, 18, 19, 234, 0, 0, 52, + 0, 0, 22, 53, 0, 0, 0, 0, 0, 6, + 7, 0, 0, 8, 9, 0, 0, 235, 0, 0, + 14, 15, 16, 17, 0, 0, 0, 0, 0, 0, + 0, 18, 19, 0, 0, 0, 52, 13, 0, 22, + 53, 0, 14, 15, 16, 17, 6, 7, 0, 0, + 8, 9, 0, 18, 19, 0, 20, 0, 21, 0, + 0, 22, 23, 0, 0, 0, 0, 6, 7, 0, + 0, 8, 9, 0, 181, 0, 0, 0, 0, 14, + 15, 16, 17, 0, 0, 0, 0, 0, 0, 0, + 18, 19, 0, 20, 0, 182, 0, 0, 22, 53, + 14, 15, 16, 17, 6, 7, 0, 0, 8, 9, + 0, 18, 19, 0, 20, 0, 52, 0, 0, 22, + 53, 0, 7, 0, 0, 8, 9, 73, 0, 0, +-32768, 0, 0, 0, 0, 0, 0, 14, 15, 16, + 17, 0, 0, 0, 0, 0, 0, 7, 18, 19, + 8, 9,-32768, 52, 14, 15, 22, 53, 0, 0, 0, 80, 81, 82, 83, 18, 19, 0, 0, 0, - 52, 14, 15, 22, 53, 0, 0, 0,-32768,-32768, --32768,-32768, 18, 19, 0, 0, 0, 52, 0, 0, - 22, 53 + 52, 0, 0, 22, 53, 0, 0, 0, 0, 14, + 15, 0, 0, 0, 0, 0,-32768,-32768,-32768,-32768, + 18, 19, 0, 0, 0, 52, 0, 0, 22, 53 }; -static const short yycheck[] = { 3, - 143, 163, 4, 184, 23, 167, 24, 25, 13, 1, - 1, 70, 4, 1, 13, 70, 13, 1, 37, 23, - 1, 25, 56, 4, 42, 58, 10, 33, 56, 13, - 153, 154, 36, 37, 177, 230, 231, 232, 233, 1, - 235, 236, 237, 1, 1, 13, 50, 51, 13, 53, - 109, 42, 58, 55, 42, 114, 179, 62, 42, 114, - 44, 45, 46, 206, 245, 57, 36, 37, 59, 73, - 74, 59, 76, 77, 78, 79, 80, 81, 62, 274, - 42, 99, 11, 142, 42, 42, 3, 4, 60, 56, - 108, 286, 60, 58, 62, 57, 43, 62, 116, 57, - 57, 3, 106, 11, 10, 28, 54, 36, 37, 13, - 14, 15, 50, 51, 18, 19, 39, 21, 22, 137, - 43, 38, 39, 25, 5, 27, 28, 31, 36, 37, - 189, 4, 136, 4, 31, 31, 140, 39, 44, 45, - 46, 43, 304, 56, 56, 56, 308, 62, 52, 47, - 48, 49, 50, 51, 33, 56, 54, 161, 162, 163, - 64, 165, 181, 167, 49, 50, 51, 57, 50, 54, - 4, 21, 4, 191, 4, 18, 56, 181, 0, 0, - 25, 85, 86, 87, 88, 89, 90, 222, 259, 207, - -1, 22, -1, -1, -1, 214, -1, -1, -1, -1, - -1, -1, -1, 221, 208, -1, 109, 111, -1, 113, - 214, -1, -1, -1, -1, 119, -1, -1, -1, 10, - 11, 225, 226, 227, 228, -1, 130, -1, -1, 247, - 134, -1, 250, -1, -1, 253, -1, 28, 256, 142, - 144, 145, -1, 147, 148, 149, 150, 151, 152, 153, - 154, -1, -1, -1, -1, -1, -1, 275, -1, -1, - -1, -1, -1, 166, -1, 21, 63, -1, 172, -1, - -1, -1, -1, -1, -1, 179, 180, 295, 282, 297, - 284, 185, 300, 301, -1, 303, 189, -1, -1, -1, - -1, -1, -1, -1, 312, 313, -1, 201, -1, -1, - 304, 205, -1, -1, 308, -1, -1, 211, 212, -1, - 101, 102, 216, -1, 105, -1, 107, -1, -1, -1, - 117, -1, 113, -1, -1, -1, 230, 231, 232, 233, - -1, 235, 236, 237, -1, 132, 133, -1, 18, 19, - -1, 21, -1, -1, -1, 249, -1, -1, -1, -1, - -1, 31, -1, -1, -1, 111, 260, 261, 262, 263, - -1, 265, -1, 267, 268, 269, -1, 271, 272, 273, - 274, -1, 52, 164, -1, -1, 279, -1, 281, -1, - 171, -1, 286, 287, 64, -1, -1, -1, -1, -1, - 294, -1, 296, 4, -1, 299, 7, 8, 9, 302, - -1, 12, 305, -1, -1, 85, 86, 87, 88, 89, - 90, 314, 315, 11, -1, 212, -1, -1, -1, 216, - -1, -1, 213, -1, 180, 36, 37, 224, -1, -1, - 28, 111, -1, 113, -1, -1, 47, 48, 229, 119, - -1, 52, -1, -1, 55, 56, -1, 244, -1, -1, - 130, -1, -1, -1, 134, 35, -1, -1, -1, -1, - -1, -1, -1, -1, 144, 145, -1, 147, 148, 149, - 150, 151, 152, -1, 230, 231, 232, 233, -1, 235, - 236, 237, -1, -1, -1, -1, 283, -1, -1, 280, - 70, -1, 172, -1, 285, -1, -1, 294, -1, -1, - 180, -1, -1, 101, 102, 185, -1, 105, -1, 107, - -1, -1, 309, -1, 311, 113, -1, -1, 274, -1, - -1, 201, -1, -1, -1, 205, -1, -1, -1, 109, - 286, 211, 212, -1, 114, 115, 216, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 230, 231, 232, 233, -1, 235, 236, 237, -1, -1, - -1, -1, 142, 143, -1, -1, 164, -1, -1, 249, - -1, -1, -1, 171, -1, -1, -1, -1, -1, -1, - 260, 261, 262, 263, -1, 265, 166, 267, 268, 269, - -1, 271, 272, 273, 274, -1, -1, 177, -1, -1, - -1, -1, -1, -1, -1, -1, 286, 287, -1, 189, - -1, -1, -1, -1, 294, 213, 296, -1, -1, 299, - -1, -1, -1, -1, -1, -1, 206, -1, -1, -1, - 1, 229, 3, 4, -1, -1, 7, 8, -1, 219, - -1, -1, -1, -1, -1, -1, 17, -1, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, -1, -1, -1, 36, 37, 38, 39, -1, - -1, -1, -1, -1, -1, -1, 47, 48, -1, 50, - -1, 52, 280, -1, 55, 56, -1, 285, -1, 60, - 61, 62, -1, -1, -1, -1, -1, -1, -1, 279, - -1, 281, -1, -1, 284, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 296, -1, -1, -1, - -1, 1, 302, 3, 4, 305, -1, 7, 8, -1, - -1, -1, -1, -1, 314, 315, -1, 17, -1, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, -1, -1, -1, 36, 37, 38, 39, - -1, -1, -1, -1, -1, -1, -1, 47, 48, -1, - 50, -1, 52, -1, -1, 55, 56, -1, -1, -1, - 60, 61, 62, 1, -1, 3, 4, -1, -1, 7, - 8, -1, 10, -1, -1, 13, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 31, -1, -1, -1, -1, 36, 37, - 38, 39, -1, -1, -1, -1, 44, 45, 46, 47, - 48, -1, 50, -1, 52, -1, -1, 55, 56, 0, - 1, -1, 3, 4, 62, -1, 7, 8, -1, -1, - -1, -1, 13, -1, 15, 16, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, - 31, -1, -1, -1, -1, 36, 37, 38, 39, -1, - -1, -1, -1, -1, -1, -1, 47, 48, -1, 50, - -1, 52, -1, -1, 55, 56, -1, 0, 1, 60, +static const short yycheck[] = { 24, + 25, 23, 168, 10, 11, 21, 70, 144, 186, 13, + 10, 11, 70, 1, 1, 37, 13, 42, 4, 1, + 1, 28, 154, 155, 13, 33, 302, 11, 28, 10, + 306, 11, 13, 109, 49, 50, 51, 1, 13, 54, + 58, 178, 56, 1, 56, 109, 4, 1, 28, 181, + 58, 115, 36, 37, 42, 42, 60, 115, 62, 1, + 42, 42, 4, 44, 45, 46, 56, 143, 246, 55, + 207, 59, 59, 62, 99, 57, 57, 43, 42, 143, + 63, 62, 10, 108, 3, 4, 36, 37, 42, 50, + 51, 167, 117, 57, 101, 102, 112, 28, 105, 57, + 107, 101, 102, 57, 111, 105, 54, 107, 39, 116, + 5, 111, 43, 138, 190, 60, 44, 45, 46, 38, + 39, 101, 102, 4, 31, 105, 190, 107, 11, 31, + 56, 111, 4, 3, 56, 118, 302, 144, 56, 62, + 306, 231, 232, 233, 234, 57, 236, 237, 238, 50, + 133, 134, 56, 36, 37, 25, 33, 27, 28, 58, + 4, 183, 21, 4, 56, 172, 182, 192, 4, 39, + 18, 178, 172, 43, 0, 0, 25, 223, 260, 164, + 13, 14, 15, 208, 274, 18, 19, 22, 21, 22, + -1, -1, 172, 215, -1, -1, 286, 222, 31, -1, + 207, -1, -1, 279, -1, 281, -1, 214, -1, -1, + -1, -1, -1, 220, 214, 231, 232, 233, 234, 52, + 236, 237, 238, 248, 300, -1, 251, 303, -1, 254, + 213, 64, 257, 216, 214, -1, 312, 313, -1, -1, + -1, -1, 225, -1, 47, 48, 49, 50, 51, -1, + 275, 54, 85, 86, 87, 88, 89, 90, 274, -1, + -1, -1, 245, -1, -1, -1, -1, -1, -1, 294, + 286, 296, -1, 298, 299, -1, 301, 284, -1, 112, + -1, 114, -1, -1, -1, 310, 311, 120, 295, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 131, -1, + 283, -1, 135, -1, -1, -1, -1, -1, -1, -1, + 293, 3, 145, 146, -1, 148, 149, 150, 151, 152, + 153, 154, 155, -1, 307, -1, 309, -1, -1, -1, + -1, 23, -1, 25, -1, -1, -1, -1, -1, -1, + 173, -1, -1, -1, 36, 37, -1, -1, 181, 182, + -1, -1, -1, -1, 187, -1, -1, -1, 50, 51, + -1, 53, -1, -1, -1, -1, -1, -1, -1, 202, + -1, -1, -1, 206, -1, -1, -1, -1, -1, 212, + 213, 73, 74, 216, 76, 77, 78, 79, 80, 81, + -1, -1, -1, -1, -1, -1, -1, -1, 231, 232, + 233, 234, -1, 236, 237, 238, -1, -1, -1, -1, + -1, -1, 18, 19, 106, 21, -1, 250, -1, -1, + -1, -1, -1, -1, -1, 31, -1, -1, 261, 262, + 263, 264, 265, -1, 267, 268, 269, -1, 271, 272, + 273, 274, -1, -1, -1, 137, 52, -1, -1, 141, + -1, -1, -1, 286, 287, -1, -1, -1, 64, -1, + 293, -1, 295, -1, 297, -1, -1, -1, -1, -1, + 162, 163, 164, -1, 166, -1, -1, -1, -1, 85, + 86, 87, 88, 89, 90, -1, -1, -1, -1, -1, + -1, 183, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 112, -1, 114, -1, + -1, -1, -1, -1, 120, -1, -1, 209, -1, -1, + -1, -1, -1, 215, -1, 131, 3, 4, -1, 135, + 7, 8, -1, -1, 226, 227, 228, 229, -1, 145, + 146, -1, 148, 149, 150, 151, 152, 153, -1, -1, + -1, -1, -1, -1, 31, -1, -1, -1, -1, 36, + 37, 38, 39, -1, -1, -1, -1, 173, -1, -1, + 47, 48, -1, 50, -1, 52, 182, -1, 55, 56, + -1, 187, -1, -1, -1, 62, -1, -1, -1, -1, + 282, -1, 284, -1, -1, -1, 202, -1, -1, -1, + 206, -1, -1, -1, -1, -1, 212, 213, -1, -1, + 216, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 231, 232, 233, 234, -1, + 236, 237, 238, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 250, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 261, 262, 263, 264, 265, + -1, 267, 268, 269, -1, 271, 272, 273, 274, -1, + -1, -1, -1, -1, -1, -1, 1, -1, 3, 4, + 286, 287, 7, 8, -1, -1, -1, 293, -1, 295, + -1, 297, 17, -1, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, -1, 31, 32, -1, -1, + -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, + -1, -1, 47, 48, -1, 50, 1, 52, 3, 4, + 55, 56, 7, 8, -1, 60, 61, 62, -1, -1, + -1, -1, 17, -1, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, -1, 31, 32, -1, -1, + -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, + -1, -1, 47, 48, -1, 50, -1, 52, -1, -1, + 55, 56, -1, -1, -1, 60, 61, 62, 1, -1, + 3, 4, -1, -1, 7, 8, -1, 10, -1, -1, + 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 31, -1, + -1, -1, -1, 36, 37, 38, 39, -1, -1, -1, + -1, 44, 45, 46, 47, 48, -1, 50, -1, 52, + -1, -1, 55, 56, 57, -1, -1, 0, 1, 62, 3, 4, -1, -1, 7, 8, -1, -1, -1, -1, 13, -1, 15, 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, 31, -1, -1, -1, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, -1, -1, 47, 48, -1, 50, -1, 52, - 3, 4, 55, 56, 7, 8, -1, 60, -1, -1, - -1, -1, -1, -1, 17, -1, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - -1, -1, -1, 36, 37, 38, 39, -1, -1, -1, - -1, -1, -1, -1, 47, 48, -1, 50, -1, 52, - -1, -1, 55, 56, -1, -1, -1, 60, -1, 62, - 3, 4, -1, -1, 7, 8, 9, -1, -1, 12, - 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, - 43, 44, 45, 46, 47, 48, -1, -1, -1, 52, - -1, -1, 55, 56, -1, -1, 3, 4, -1, 62, - 7, 8, 9, -1, -1, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, - -1, -1, 7, 8, -1, -1, 33, 34, 35, 36, - 37, 38, 39, 40, -1, -1, 43, 44, 45, 46, - 47, 48, -1, -1, -1, 52, 31, -1, 55, 56, - -1, 36, 37, 38, 39, 62, -1, -1, -1, -1, - -1, -1, 47, 48, -1, 50, 1, 52, 3, 4, - 55, 56, 7, 8, -1, -1, -1, 62, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, - 3, 4, -1, -1, 7, 8, 31, -1, -1, -1, + -1, -1, 55, 56, -1, 0, 1, 60, 3, 4, + -1, -1, 7, 8, -1, -1, -1, -1, 13, -1, + 15, 16, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 30, 31, -1, -1, -1, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, - -1, -1, 47, 48, -1, 50, -1, 52, 31, -1, - 55, 56, 57, 36, 37, 38, 39, -1, -1, -1, - -1, -1, -1, -1, 47, 48, -1, 50, 1, 52, - 3, 4, 55, 56, 7, 8, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, -1, 3, 4, -1, -1, 7, 8, 31, -1, - -1, -1, -1, 36, 37, 38, 39, -1, -1, -1, - -1, -1, -1, -1, 47, 48, -1, 50, -1, 52, - 31, -1, 55, 56, -1, 36, 37, 38, 39, 3, - 4, -1, -1, 7, 8, 9, 47, 48, 12, 50, - -1, 52, -1, 4, 55, 56, 7, 8, 9, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, - 34, 35, 36, 37, 38, 39, 40, -1, -1, 43, - 44, 45, 46, 47, 48, 36, 37, -1, 52, -1, - -1, 55, 56, 57, 3, 4, 47, 48, 7, 8, - 9, 52, -1, 12, 55, 56, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, - 39, 40, -1, 42, 43, 44, 45, 46, 47, 48, - -1, -1, -1, 52, 3, 4, 55, 56, 7, 8, - 9, -1, -1, 12, -1, -1, -1, -1, -1, -1, + -1, -1, 47, 48, -1, 50, -1, 52, 3, 4, + 55, 56, 7, 8, -1, 60, -1, -1, -1, -1, + -1, -1, 17, -1, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, -1, 31, 32, -1, -1, + -1, 36, 37, 38, 39, 3, 4, -1, -1, 7, + 8, 9, 47, 48, 12, 50, -1, 52, -1, 4, + 55, 56, 7, 8, 9, 60, -1, 62, -1, -1, + -1, -1, -1, -1, -1, 33, 34, 35, 36, 37, + 38, 39, 40, -1, -1, 43, 44, 45, 46, 47, + 48, 36, 37, 1, 52, 3, 4, 55, 56, 7, + 8, -1, 47, 48, 62, -1, -1, 52, -1, -1, + 55, 56, -1, -1, -1, 1, -1, 3, 4, -1, + -1, 7, 8, 31, -1, -1, -1, -1, 36, 37, + 38, 39, -1, -1, -1, -1, -1, -1, -1, 47, + 48, -1, 50, -1, 52, 31, -1, 55, 56, 57, + 36, 37, 38, 39, -1, -1, -1, -1, -1, -1, + -1, 47, 48, -1, 50, 1, 52, 3, 4, 55, + 56, 7, 8, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1, -1, 3, + 4, -1, -1, 7, 8, 31, -1, -1, -1, -1, + 36, 37, 38, 39, -1, -1, -1, -1, -1, -1, + -1, 47, 48, -1, 50, -1, 52, 31, -1, 55, + 56, -1, 36, 37, 38, 39, 3, 4, -1, -1, + 7, 8, 9, 47, 48, 12, 50, -1, 52, -1, + 4, 55, 56, 7, 8, 9, -1, -1, 12, -1, + -1, -1, -1, -1, -1, -1, 33, 34, 35, 36, + 37, 38, 39, 40, -1, -1, 43, 44, 45, 46, + 47, 48, 36, 37, -1, 52, -1, -1, 55, 56, + 57, 3, 4, 47, 48, 7, 8, 9, 52, -1, + 12, 55, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, - 39, 40, 41, -1, 43, 44, 45, 46, 47, 48, - -1, -1, -1, 52, 3, 4, 55, 56, 7, 8, - 9, -1, -1, 12, -1, -1, -1, -1, -1, -1, + -1, 33, 34, 35, 36, 37, 38, 39, 40, -1, + 42, 43, 44, 45, 46, 47, 48, -1, -1, -1, + 52, 3, 4, 55, 56, 7, 8, 9, -1, -1, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, - 39, 40, -1, -1, 43, 44, 45, 46, 47, 48, - -1, -1, -1, 52, 3, 4, 55, 56, 7, 8, - 9, -1, -1, 12, -1, -1, -1, -1, -1, -1, + -1, 33, 34, 35, 36, 37, 38, 39, 40, 41, + -1, 43, 44, 45, 46, 47, 48, -1, -1, -1, + 52, 3, 4, 55, 56, 7, 8, 9, -1, -1, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, 34, -1, 36, 37, 38, - 39, -1, -1, -1, 43, 44, 45, 46, 47, 48, - -1, -1, -1, 52, 3, 4, 55, 56, 7, 8, - 9, -1, -1, 12, -1, -1, -1, -1, -1, -1, + -1, 33, 34, 35, 36, 37, 38, 39, 40, -1, + -1, 43, 44, 45, 46, 47, 48, -1, -1, -1, + 52, 3, 4, 55, 56, 7, 8, 9, -1, -1, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, -1, -1, 36, 37, 38, - 39, -1, -1, -1, 43, 44, 45, 46, 47, 48, - -1, -1, -1, 52, 3, 4, 55, 56, 7, 8, - 9, -1, -1, 12, -1, -1, -1, -1, -1, -1, + -1, 33, 34, -1, 36, 37, 38, 39, -1, -1, + -1, 43, 44, 45, 46, 47, 48, -1, -1, -1, + 52, 3, 4, 55, 56, 7, 8, 9, -1, -1, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, - 39, 40, 41, -1, -1, -1, 3, 4, 47, 48, - 7, 8, 9, 52, -1, 12, 55, 56, -1, -1, + -1, 33, -1, -1, 36, 37, 38, 39, -1, -1, + -1, 43, 44, 45, 46, 47, 48, -1, -1, -1, + 52, 3, 4, 55, 56, 7, 8, 9, -1, -1, + 12, -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, 33, 34, 35, 36, - 37, 38, 39, 40, -1, -1, -1, -1, 3, 4, - 47, 48, 7, 8, 9, 52, -1, 12, 55, 56, + -1, 33, 34, 35, 36, 37, 38, 39, 40, 41, + -1, -1, -1, 3, 4, 47, 48, 7, 8, 9, + 52, -1, 12, 55, 56, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3, 4, -1, -1, + 7, 8, -1, 33, 34, 35, 36, 37, 38, 39, + 40, -1, -1, 20, -1, -1, -1, 47, 48, 26, + 27, -1, 52, -1, 31, 55, 56, -1, -1, 36, + 37, 38, 39, 3, 4, -1, -1, 7, 8, -1, + 47, 48, -1, 50, -1, 52, -1, -1, 55, 56, + 20, -1, -1, -1, -1, -1, 26, 27, -1, -1, + -1, 31, -1, -1, -1, -1, 36, 37, 38, 39, + 3, 4, -1, -1, 7, 8, 9, 47, 48, 12, + 50, -1, 52, -1, -1, 55, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 33, 34, - -1, 36, 37, 38, 39, 3, 4, -1, -1, 7, - 8, 9, 47, 48, 12, -1, -1, 52, -1, -1, - 55, 56, -1, -1, -1, -1, -1, 3, 4, -1, - -1, 7, 8, -1, -1, 33, -1, -1, 36, 37, - 38, 39, -1, -1, -1, -1, -1, -1, -1, 47, - 48, -1, -1, -1, 52, 31, -1, 55, 56, -1, + 33, 34, -1, 36, 37, 38, 39, 3, 4, -1, + -1, 7, 8, 9, 47, 48, 12, -1, -1, 52, + -1, -1, 55, 56, -1, -1, -1, -1, -1, 3, + 4, -1, -1, 7, 8, -1, -1, 33, -1, -1, + 36, 37, 38, 39, -1, -1, -1, -1, -1, -1, + -1, 47, 48, -1, -1, -1, 52, 31, -1, 55, + 56, -1, 36, 37, 38, 39, 3, 4, -1, -1, + 7, 8, -1, 47, 48, -1, 50, -1, 52, -1, + -1, 55, 56, -1, -1, -1, -1, 3, 4, -1, + -1, 7, 8, -1, 31, -1, -1, -1, -1, 36, + 37, 38, 39, -1, -1, -1, -1, -1, -1, -1, + 47, 48, -1, 50, -1, 52, -1, -1, 55, 56, 36, 37, 38, 39, 3, 4, -1, -1, 7, 8, -1, 47, 48, -1, 50, -1, 52, -1, -1, 55, - 56, -1, -1, -1, -1, -1, 3, 4, -1, -1, - 7, 8, 31, -1, -1, -1, -1, 36, 37, 38, - 39, -1, -1, -1, -1, -1, -1, -1, 47, 48, - -1, 50, -1, 52, 31, -1, 55, 56, -1, 36, - 37, 38, 39, 3, 4, -1, -1, 7, 8, -1, - 47, 48, -1, 50, -1, 52, -1, -1, 55, 56, - -1, -1, -1, -1, 3, 4, -1, -1, 7, 8, - -1, -1, -1, -1, -1, -1, 36, 37, 38, 39, - -1, -1, -1, -1, -1, -1, -1, 47, 48, -1, - 50, -1, 52, -1, -1, 55, 56, 36, 37, 38, - 39, -1, 4, -1, -1, 7, 8, 9, 47, 48, - 12, -1, -1, 52, -1, -1, 55, 56, -1, 4, - -1, -1, 7, 8, 9, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 36, 37, -1, -1, -1, -1, + 56, -1, 4, -1, -1, 7, 8, 9, -1, -1, + 12, -1, -1, -1, -1, -1, -1, 36, 37, 38, + 39, -1, -1, -1, -1, -1, -1, 4, 47, 48, + 7, 8, 9, 52, 36, 37, 55, 56, -1, -1, -1, 43, 44, 45, 46, 47, 48, -1, -1, -1, - 52, 36, 37, 55, 56, -1, -1, -1, 43, 44, - 45, 46, 47, 48, -1, -1, -1, 52, -1, -1, - 55, 56 + 52, -1, -1, 55, 56, -1, -1, -1, -1, 36, + 37, -1, -1, -1, -1, -1, 43, 44, 45, 46, + 47, 48, -1, -1, -1, 52, -1, -1, 55, 56 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/lib/bison.simple" @@ -1366,14 +1352,14 @@ yyreduce: switch (yyn) { case 1: -#line 158 "awkgram.y" +#line 160 "awkgram.y" { expression_value = yyvsp[-1].nodeval; check_funcs(); ; break;} case 2: -#line 166 "awkgram.y" +#line 168 "awkgram.y" { if (yyvsp[0].nodeval != NULL) yyval.nodeval = yyvsp[0].nodeval; @@ -1383,7 +1369,7 @@ case 2: ; break;} case 3: -#line 175 "awkgram.y" +#line 177 "awkgram.y" { if (yyvsp[0].nodeval == NULL) yyval.nodeval = yyvsp[-1].nodeval; @@ -1400,23 +1386,23 @@ case 3: ; break;} case 4: -#line 189 "awkgram.y" +#line 191 "awkgram.y" { yyval.nodeval = NULL; ; break;} case 5: -#line 190 "awkgram.y" +#line 192 "awkgram.y" { yyval.nodeval = NULL; ; break;} case 6: -#line 191 "awkgram.y" +#line 193 "awkgram.y" { yyval.nodeval = NULL; ; break;} case 7: -#line 195 "awkgram.y" +#line 197 "awkgram.y" { io_allowed = FALSE; ; break;} case 8: -#line 197 "awkgram.y" +#line 199 "awkgram.y" { if (begin_block != NULL) { if (begin_block->type != Node_rule_list) @@ -1433,11 +1419,11 @@ case 8: ; break;} case 9: -#line 211 "awkgram.y" +#line 213 "awkgram.y" { io_allowed = FALSE; parsing_end_rule = TRUE; ; break;} case 10: -#line 213 "awkgram.y" +#line 215 "awkgram.y" { if (end_block != NULL) { if (end_block->type != Node_rule_list) @@ -1455,7 +1441,7 @@ case 10: ; break;} case 11: -#line 229 "awkgram.y" +#line 231 "awkgram.y" { warning(_("BEGIN blocks must have an action part")); errcount++; @@ -1463,7 +1449,7 @@ case 11: ; break;} case 12: -#line 235 "awkgram.y" +#line 237 "awkgram.y" { warning(_("END blocks must have an action part")); errcount++; @@ -1471,15 +1457,15 @@ case 12: ; break;} case 13: -#line 241 "awkgram.y" +#line 243 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_rule_node, yyvsp[0].nodeval); yyerrok; ; break;} case 14: -#line 243 "awkgram.y" +#line 245 "awkgram.y" { yyval.nodeval = node((NODE *) NULL, Node_rule_node, yyvsp[0].nodeval); yyerrok; ; break;} case 15: -#line 245 "awkgram.y" +#line 247 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_rule_node, @@ -1494,7 +1480,7 @@ case 15: ; break;} case 16: -#line 258 "awkgram.y" +#line 260 "awkgram.y" { func_install(yyvsp[-1].nodeval, yyvsp[0].nodeval); yyval.nodeval = NULL; @@ -1502,15 +1488,15 @@ case 16: ; break;} case 17: -#line 267 "awkgram.y" +#line 269 "awkgram.y" { yyval.sval = yyvsp[0].sval; ; break;} case 18: -#line 269 "awkgram.y" +#line 271 "awkgram.y" { yyval.sval = yyvsp[0].sval; ; break;} case 19: -#line 271 "awkgram.y" +#line 273 "awkgram.y" { yyerror(_("`%s' is a built-in function, it cannot be redefined"), tokstart); @@ -1519,13 +1505,13 @@ case 19: ; break;} case 22: -#line 286 "awkgram.y" +#line 288 "awkgram.y" { param_counter = 0; ; break;} case 23: -#line 290 "awkgram.y" +#line 292 "awkgram.y" { NODE *t; @@ -1539,33 +1525,33 @@ case 23: ; break;} case 24: -#line 305 "awkgram.y" +#line 307 "awkgram.y" { yyval.nodeval = yyvsp[-3].nodeval; can_return = FALSE; ; break;} case 25: -#line 310 "awkgram.y" +#line 312 "awkgram.y" { yyval.nodeval = node((NODE *) NULL, Node_K_return, (NODE *) NULL); can_return = FALSE; ; break;} case 26: -#line 319 "awkgram.y" +#line 321 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; ; break;} case 27: -#line 321 "awkgram.y" +#line 323 "awkgram.y" { yyval.nodeval = mkrangenode(node(yyvsp[-2].nodeval, Node_cond_pair, yyvsp[0].nodeval)); ; break;} case 28: -#line 330 "awkgram.y" +#line 332 "awkgram.y" { ++want_regexp; ; break;} case 29: -#line 332 "awkgram.y" +#line 334 "awkgram.y" { NODE *n; size_t len; @@ -1582,15 +1568,15 @@ case 29: ; break;} case 30: -#line 350 "awkgram.y" +#line 352 "awkgram.y" { yyval.nodeval = yyvsp[-3].nodeval; ; break;} case 31: -#line 352 "awkgram.y" +#line 354 "awkgram.y" { yyval.nodeval = NULL; ; break;} case 32: -#line 357 "awkgram.y" +#line 359 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; if (do_lint && isnoeffect(yyval.nodeval->type)) @@ -1598,7 +1584,7 @@ case 32: ; break;} case 33: -#line 363 "awkgram.y" +#line 365 "awkgram.y" { if (yyvsp[-1].nodeval == NULL || yyvsp[-1].nodeval->type != Node_statement_list) yyvsp[-1].nodeval = node(yyvsp[-1].nodeval, Node_statement_list, (NODE *) NULL); @@ -1608,39 +1594,39 @@ case 33: ; break;} case 34: -#line 371 "awkgram.y" +#line 373 "awkgram.y" { yyval.nodeval = NULL; ; break;} case 35: -#line 373 "awkgram.y" +#line 375 "awkgram.y" { yyval.nodeval = NULL; ; break;} case 38: -#line 383 "awkgram.y" +#line 385 "awkgram.y" { yyval.nodeval = NULL; ; break;} case 39: -#line 385 "awkgram.y" +#line 387 "awkgram.y" { yyval.nodeval = NULL; ; break;} case 40: -#line 387 "awkgram.y" +#line 389 "awkgram.y" { yyval.nodeval = yyvsp[-1].nodeval; ; break;} case 41: -#line 389 "awkgram.y" +#line 391 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; ; break;} case 42: -#line 391 "awkgram.y" +#line 393 "awkgram.y" { yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_while, yyvsp[0].nodeval); ; break;} case 43: -#line 393 "awkgram.y" +#line 395 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_K_do, yyvsp[-5].nodeval); ; break;} case 44: -#line 395 "awkgram.y" +#line 397 "awkgram.y" { /* * Efficiency hack. Recognize the special case of @@ -1655,14 +1641,26 @@ case 44: * Check that the body is a `delete a[i]' statement, * and that both the loop var and array names match. */ - if (yyvsp[0].nodeval != NULL && yyvsp[0].nodeval->type == Node_K_delete - && yyvsp[0].nodeval->rnode != NULL - && (yyvsp[0].nodeval->rnode->type == Node_var || yyvsp[0].nodeval->rnode->type == Node_param_list) - && strcmp(yyvsp[-5].sval, yyvsp[0].nodeval->rnode->var_value->vname) == 0 - && strcmp(yyvsp[-3].sval, yyvsp[0].nodeval->lnode->vname) == 0) { - yyvsp[0].nodeval->type = Node_K_delete_loop; - yyval.nodeval = yyvsp[0].nodeval; + if (yyvsp[0].nodeval != NULL && yyvsp[0].nodeval->type == Node_K_delete) { + NODE *arr, *sub; + + assert(yyvsp[0].nodeval->rnode->type == Node_expression_list); + arr = yyvsp[0].nodeval->lnode; /* array var */ + sub = yyvsp[0].nodeval->rnode->lnode; /* index var */ + + if ( (arr->type == Node_var + || arr->type == Node_var_array + || arr->type == Node_param_list) + && (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; + yyval.nodeval = yyvsp[0].nodeval; + } + else + goto regular_loop; } else { + regular_loop: yyval.nodeval = node(yyvsp[0].nodeval, Node_K_arrayfor, make_for_loop(variable(yyvsp[-5].sval, CAN_FREE, Node_var), (NODE *) NULL, variable(yyvsp[-3].sval, CAN_FREE, Node_var_array))); @@ -1670,60 +1668,28 @@ case 44: ; break;} case 45: -#line 423 "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 46: -#line 427 "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)); ; break;} case 47: -#line 433 "awkgram.y" +#line 447 "awkgram.y" { yyval.nodeval = node((NODE *) NULL, Node_K_break, (NODE *) NULL); ; break;} case 48: -#line 436 "awkgram.y" +#line 450 "awkgram.y" { yyval.nodeval = node((NODE *) NULL, Node_K_continue, (NODE *) NULL); ; break;} case 49: -#line 438 "awkgram.y" -{ - yyval.nodeval = node(yyvsp[-3].nodeval, yyvsp[-5].nodetypeval, yyvsp[-1].nodeval); - if (yyval.nodeval->type == Node_K_printf) - count_args(yyval.nodeval) - ; - break;} -case 50: -#line 444 "awkgram.y" -{ - if (yyvsp[-3].nodetypeval == Node_K_print && yyvsp[-2].nodeval == NULL) { - static int warned = FALSE; - - yyvsp[-2].nodeval = node(node(make_number(0.0), - Node_field_spec, - (NODE *) NULL), - Node_expression_list, - (NODE *) NULL); - - if (do_lint && ! io_allowed && ! warned) { - warned = TRUE; - lintwarn( - _("plain `print' in BEGIN or END rule should probably be `print \"\"'")); - } - } - - yyval.nodeval = node(yyvsp[-2].nodeval, yyvsp[-3].nodetypeval, yyvsp[-1].nodeval); - if (yyval.nodeval->type == Node_K_printf) - count_args(yyval.nodeval) - ; - break;} -case 51: -#line 466 "awkgram.y" +#line 452 "awkgram.y" { NODETYPE type; if (! io_allowed) @@ -1732,8 +1698,8 @@ case 51: yyval.nodeval = node((NODE *) NULL, type, (NODE *) NULL); ; break;} -case 52: -#line 474 "awkgram.y" +case 50: +#line 460 "awkgram.y" { if (do_lint) lintwarn(_("`nextfile' is a gawk extension")); @@ -1753,27 +1719,59 @@ case 52: yyval.nodeval = node((NODE *) NULL, Node_K_nextfile, (NODE *) NULL); ; break;} -case 53: -#line 493 "awkgram.y" +case 51: +#line 479 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_K_exit, (NODE *) NULL); ; break;} -case 54: -#line 495 "awkgram.y" +case 52: +#line 481 "awkgram.y" { if (! can_return) yyerror(_("`return' used outside function context")); ; break;} +case 53: +#line 486 "awkgram.y" +{ yyval.nodeval = node(yyvsp[-1].nodeval, Node_K_return, (NODE *) NULL); ; + break;} case 55: #line 500 "awkgram.y" -{ yyval.nodeval = node(yyvsp[-1].nodeval, Node_K_return, (NODE *) NULL); ; +{ + yyval.nodeval = node(yyvsp[-2].nodeval, yyvsp[-4].nodetypeval, yyvsp[0].nodeval); + if (yyval.nodeval->type == Node_K_printf) + count_args(yyval.nodeval); + ; break;} case 56: -#line 502 "awkgram.y" -{ yyval.nodeval = node(variable(yyvsp[-4].sval, CAN_FREE, Node_var_array), Node_K_delete, yyvsp[-2].nodeval); ; +#line 506 "awkgram.y" +{ + if (yyvsp[-2].nodetypeval == Node_K_print && yyvsp[-1].nodeval == NULL) { + static int warned = FALSE; + + yyvsp[-1].nodeval = node(node(make_number(0.0), + Node_field_spec, + (NODE *) NULL), + Node_expression_list, + (NODE *) NULL); + + if (do_lint && ! io_allowed && ! warned) { + warned = TRUE; + lintwarn( + _("plain `print' in BEGIN or END rule should probably be `print \"\"'")); + } + } + + yyval.nodeval = node(yyvsp[-1].nodeval, yyvsp[-2].nodetypeval, yyvsp[0].nodeval); + if (yyval.nodeval->type == Node_K_printf) + count_args(yyval.nodeval); + ; break;} case 57: -#line 504 "awkgram.y" +#line 528 "awkgram.y" +{ yyval.nodeval = node(variable(yyvsp[-3].sval, CAN_FREE, Node_var_array), Node_K_delete, yyvsp[-1].nodeval); ; + break;} +case 58: +#line 530 "awkgram.y" { if (do_lint) lintwarn(_("`delete array' is a gawk extension")); @@ -1785,63 +1783,71 @@ case 57: errcount++; error(_("`delete array' is a gawk extension")); } - yyval.nodeval = node(variable(yyvsp[-1].sval, CAN_FREE, Node_var_array), Node_K_delete, (NODE *) NULL); + yyval.nodeval = node(variable(yyvsp[0].sval, CAN_FREE, Node_var_array), Node_K_delete, (NODE *) NULL); ; break;} -case 58: -#line 518 "awkgram.y" -{ yyval.nodeval = yyvsp[-1].nodeval; ; - break;} case 59: -#line 523 "awkgram.y" -{ yyval.nodetypeval = yyvsp[0].nodetypeval; ; +#line 544 "awkgram.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; break;} case 60: -#line 525 "awkgram.y" -{ yyval.nodetypeval = yyvsp[0].nodetypeval; ; +#line 549 "awkgram.y" +{ yyval.nodeval = NULL; ; break;} case 61: -#line 530 "awkgram.y" +#line 551 "awkgram.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 62: +#line 556 "awkgram.y" +{ yyval.nodetypeval = yyvsp[0].nodetypeval; ; + break;} +case 63: +#line 558 "awkgram.y" +{ yyval.nodetypeval = yyvsp[0].nodetypeval; ; + break;} +case 64: +#line 563 "awkgram.y" { yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_if, node(yyvsp[0].nodeval, Node_if_branches, (NODE *) NULL)); ; break;} -case 62: -#line 536 "awkgram.y" +case 65: +#line 569 "awkgram.y" { yyval.nodeval = node(yyvsp[-6].nodeval, Node_K_if, node(yyvsp[-3].nodeval, Node_if_branches, yyvsp[0].nodeval)); ; break;} -case 63: -#line 542 "awkgram.y" +case 66: +#line 575 "awkgram.y" { want_assign = FALSE; ; break;} -case 67: -#line 553 "awkgram.y" +case 70: +#line 586 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 68: -#line 555 "awkgram.y" +case 71: +#line 588 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_redirect_input, (NODE *) NULL); ; break;} -case 69: -#line 560 "awkgram.y" +case 72: +#line 593 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 70: -#line 562 "awkgram.y" +case 73: +#line 595 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_redirect_output, (NODE *) NULL); ; break;} -case 71: -#line 564 "awkgram.y" +case 74: +#line 597 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_redirect_append, (NODE *) NULL); ; break;} -case 72: -#line 566 "awkgram.y" +case 75: +#line 599 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_redirect_pipe, (NODE *) NULL); ; break;} -case 73: -#line 568 "awkgram.y" +case 76: +#line 601 "awkgram.y" { if (yyvsp[0].nodeval->type == Node_K_getline && yyvsp[0].nodeval->rnode->type == Node_redirect_twoway) @@ -1849,170 +1855,170 @@ case 73: yyval.nodeval = node(yyvsp[0].nodeval, Node_redirect_twoway, (NODE *) NULL); ; break;} -case 74: -#line 578 "awkgram.y" +case 77: +#line 611 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 75: -#line 580 "awkgram.y" +case 78: +#line 613 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; ; break;} -case 76: -#line 585 "awkgram.y" +case 79: +#line 618 "awkgram.y" { yyval.nodeval = make_param(yyvsp[0].sval); ; break;} -case 77: -#line 587 "awkgram.y" +case 80: +#line 620 "awkgram.y" { yyval.nodeval = append_right(yyvsp[-2].nodeval, make_param(yyvsp[0].sval)); yyerrok; ; break;} -case 78: -#line 589 "awkgram.y" +case 81: +#line 622 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 79: -#line 591 "awkgram.y" +case 82: +#line 624 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 80: -#line 593 "awkgram.y" +case 83: +#line 626 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 81: -#line 599 "awkgram.y" +case 84: +#line 632 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 82: -#line 601 "awkgram.y" +case 85: +#line 634 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; ; break;} -case 83: -#line 606 "awkgram.y" +case 86: +#line 639 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 84: -#line 608 "awkgram.y" +case 87: +#line 641 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; ; break;} -case 85: -#line 613 "awkgram.y" +case 88: +#line 646 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_expression_list, (NODE *) NULL); ; break;} -case 86: -#line 615 "awkgram.y" +case 89: +#line 648 "awkgram.y" { yyval.nodeval = append_right(yyvsp[-2].nodeval, node(yyvsp[0].nodeval, Node_expression_list, (NODE *) NULL)); yyerrok; ; break;} -case 87: -#line 621 "awkgram.y" +case 90: +#line 654 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 88: -#line 623 "awkgram.y" +case 91: +#line 656 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 89: -#line 625 "awkgram.y" +case 92: +#line 658 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 90: -#line 627 "awkgram.y" +case 93: +#line 660 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 91: -#line 632 "awkgram.y" +case 94: +#line 665 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 92: -#line 634 "awkgram.y" +case 95: +#line 667 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; ; break;} -case 93: -#line 639 "awkgram.y" +case 96: +#line 672 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_expression_list, (NODE *) NULL); ; break;} -case 94: -#line 641 "awkgram.y" +case 97: +#line 674 "awkgram.y" { yyval.nodeval = append_right(yyvsp[-2].nodeval, node(yyvsp[0].nodeval, Node_expression_list, (NODE *) NULL)); yyerrok; ; break;} -case 95: -#line 647 "awkgram.y" +case 98: +#line 680 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 96: -#line 649 "awkgram.y" +case 99: +#line 682 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 97: -#line 651 "awkgram.y" +case 100: +#line 684 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 98: -#line 653 "awkgram.y" +case 101: +#line 686 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 99: -#line 658 "awkgram.y" +case 102: +#line 691 "awkgram.y" { want_assign = FALSE; ; break;} -case 100: -#line 660 "awkgram.y" +case 103: +#line 693 "awkgram.y" { if (do_lint && yyvsp[0].nodeval->type == Node_regex) lintwarn(_("regular expression on right of assignment")); yyval.nodeval = node(yyvsp[-3].nodeval, yyvsp[-2].nodetypeval, yyvsp[0].nodeval); ; break;} -case 101: -#line 666 "awkgram.y" +case 104: +#line 699 "awkgram.y" { yyval.nodeval = node(variable(yyvsp[0].sval, CAN_FREE, Node_var_array), Node_in_array, yyvsp[-3].nodeval); ; break;} -case 102: -#line 668 "awkgram.y" +case 105: +#line 701 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_K_getline, node(yyvsp[-3].nodeval, Node_redirect_pipein, (NODE *) NULL)); ; break;} -case 103: -#line 673 "awkgram.y" +case 106: +#line 706 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_K_getline, node(yyvsp[-3].nodeval, Node_redirect_twoway, (NODE *) NULL)); ; break;} -case 104: -#line 678 "awkgram.y" +case 107: +#line 711 "awkgram.y" { if (do_lint && ! io_allowed && parsing_end_rule && yyvsp[0].nodeval == NULL) lintwarn(_("non-redirected `getline' undefined inside END action")); yyval.nodeval = node(yyvsp[-1].nodeval, Node_K_getline, yyvsp[0].nodeval); ; break;} -case 105: -#line 684 "awkgram.y" +case 108: +#line 717 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_and, yyvsp[0].nodeval); ; break;} -case 106: -#line 686 "awkgram.y" +case 109: +#line 719 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_or, yyvsp[0].nodeval); ; break;} -case 107: -#line 688 "awkgram.y" +case 110: +#line 721 "awkgram.y" { if (yyvsp[-2].nodeval->type == Node_regex) warning(_("regular expression on left of `~' or `!~' operator")); yyval.nodeval = node(yyvsp[-2].nodeval, yyvsp[-1].nodetypeval, mk_rexp(yyvsp[0].nodeval)); ; break;} -case 108: -#line 694 "awkgram.y" +case 111: +#line 727 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; if (do_lint && tokstart[0] == '*') { @@ -2023,8 +2029,8 @@ case 108: } ; break;} -case 109: -#line 704 "awkgram.y" +case 112: +#line 737 "awkgram.y" { yyval.nodeval = node(node(make_number(0.0), Node_field_spec, @@ -2033,144 +2039,144 @@ case 109: yyvsp[0].nodeval); ; break;} -case 110: -#line 712 "awkgram.y" +case 113: +#line 745 "awkgram.y" { yyval.nodeval = node(variable(yyvsp[0].sval, CAN_FREE, Node_var_array), Node_in_array, yyvsp[-2].nodeval); ; break;} -case 111: -#line 714 "awkgram.y" +case 114: +#line 747 "awkgram.y" { if (do_lint && yyvsp[0].nodeval->type == Node_regex) lintwarn(_("regular expression on right of comparison")); yyval.nodeval = node(yyvsp[-2].nodeval, yyvsp[-1].nodetypeval, yyvsp[0].nodeval); ; break;} -case 112: -#line 720 "awkgram.y" +case 115: +#line 753 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_less, yyvsp[0].nodeval); ; break;} -case 113: -#line 722 "awkgram.y" +case 116: +#line 755 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_greater, yyvsp[0].nodeval); ; break;} -case 114: -#line 724 "awkgram.y" +case 117: +#line 757 "awkgram.y" { yyval.nodeval = node(yyvsp[-4].nodeval, Node_cond_exp, node(yyvsp[-2].nodeval, Node_if_branches, yyvsp[0].nodeval));; break;} -case 115: -#line 726 "awkgram.y" +case 118: +#line 759 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; ; break;} -case 116: -#line 728 "awkgram.y" +case 119: +#line 761 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_concat, yyvsp[0].nodeval); ; break;} -case 117: -#line 733 "awkgram.y" +case 120: +#line 766 "awkgram.y" { want_assign = FALSE; ; break;} -case 118: -#line 735 "awkgram.y" +case 121: +#line 768 "awkgram.y" { yyval.nodeval = node(yyvsp[-3].nodeval, yyvsp[-2].nodetypeval, yyvsp[0].nodeval); ; break;} -case 119: -#line 737 "awkgram.y" +case 122: +#line 770 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_and, yyvsp[0].nodeval); ; break;} -case 120: -#line 739 "awkgram.y" +case 123: +#line 772 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_or, yyvsp[0].nodeval); ; break;} -case 121: -#line 741 "awkgram.y" +case 124: +#line 774 "awkgram.y" { if (do_lint && ! io_allowed && yyvsp[0].nodeval == NULL) lintwarn(_("non-redirected `getline' undefined inside BEGIN or END action")); yyval.nodeval = node(yyvsp[-1].nodeval, Node_K_getline, yyvsp[0].nodeval); ; break;} -case 122: -#line 747 "awkgram.y" +case 125: +#line 780 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; ; break;} -case 123: -#line 749 "awkgram.y" +case 126: +#line 782 "awkgram.y" { yyval.nodeval = node((NODE *) NULL, Node_nomatch, yyvsp[0].nodeval); ; break;} -case 124: -#line 751 "awkgram.y" +case 127: +#line 784 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, yyvsp[-1].nodetypeval, mk_rexp(yyvsp[0].nodeval)); ; break;} -case 125: -#line 753 "awkgram.y" +case 128: +#line 786 "awkgram.y" { yyval.nodeval = node(variable(yyvsp[0].sval, CAN_FREE, Node_var_array), Node_in_array, yyvsp[-2].nodeval); ; break;} -case 126: -#line 755 "awkgram.y" +case 129: +#line 788 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, yyvsp[-1].nodetypeval, yyvsp[0].nodeval); ; break;} -case 127: -#line 757 "awkgram.y" +case 130: +#line 790 "awkgram.y" { yyval.nodeval = node(yyvsp[-4].nodeval, Node_cond_exp, node(yyvsp[-2].nodeval, Node_if_branches, yyvsp[0].nodeval));; break;} -case 128: -#line 759 "awkgram.y" +case 131: +#line 792 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; ; break;} -case 129: -#line 761 "awkgram.y" +case 132: +#line 794 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_concat, yyvsp[0].nodeval); ; break;} -case 131: -#line 768 "awkgram.y" +case 134: +#line 801 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_exp, yyvsp[0].nodeval); ; break;} -case 132: -#line 770 "awkgram.y" +case 135: +#line 803 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_times, yyvsp[0].nodeval); ; break;} -case 133: -#line 772 "awkgram.y" +case 136: +#line 805 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_quotient, yyvsp[0].nodeval); ; break;} -case 134: -#line 774 "awkgram.y" +case 137: +#line 807 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_mod, yyvsp[0].nodeval); ; break;} -case 135: -#line 776 "awkgram.y" +case 138: +#line 809 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_plus, yyvsp[0].nodeval); ; break;} -case 136: -#line 778 "awkgram.y" +case 139: +#line 811 "awkgram.y" { yyval.nodeval = node(yyvsp[-2].nodeval, Node_minus, yyvsp[0].nodeval); ; break;} -case 137: -#line 780 "awkgram.y" +case 140: +#line 813 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_postincrement, (NODE *) NULL); ; break;} -case 138: -#line 782 "awkgram.y" +case 141: +#line 815 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_postdecrement, (NODE *) NULL); ; break;} -case 139: -#line 787 "awkgram.y" +case 142: +#line 820 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_not, (NODE *) NULL); ; break;} -case 140: -#line 789 "awkgram.y" +case 143: +#line 822 "awkgram.y" { yyval.nodeval = yyvsp[-1].nodeval; ; break;} -case 141: -#line 792 "awkgram.y" +case 144: +#line 825 "awkgram.y" { yyval.nodeval = snode(yyvsp[-1].nodeval, Node_builtin, (int) yyvsp[-3].lval); ; break;} -case 142: -#line 794 "awkgram.y" +case 145: +#line 827 "awkgram.y" { yyval.nodeval = snode(yyvsp[-1].nodeval, Node_builtin, (int) yyvsp[-3].lval); ; break;} -case 143: -#line 796 "awkgram.y" +case 146: +#line 829 "awkgram.y" { if (do_lint) lintwarn(_("call of `length' without parentheses is not portable")); @@ -2179,8 +2185,8 @@ case 143: warning(_("call of `length' without parentheses is deprecated by POSIX")); ; break;} -case 144: -#line 804 "awkgram.y" +case 147: +#line 837 "awkgram.y" { yyval.nodeval = node(yyvsp[-1].nodeval, Node_func_call, make_string(yyvsp[-3].sval, strlen(yyvsp[-3].sval))); func_use(yyvsp[-3].sval, FUNC_USE); @@ -2188,34 +2194,34 @@ case 144: free(yyvsp[-3].sval); ; break;} -case 146: -#line 812 "awkgram.y" +case 149: +#line 845 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_preincrement, (NODE *) NULL); ; break;} -case 147: -#line 814 "awkgram.y" +case 150: +#line 847 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_predecrement, (NODE *) NULL); ; break;} -case 148: -#line 816 "awkgram.y" +case 151: +#line 849 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; ; break;} -case 149: -#line 818 "awkgram.y" +case 152: +#line 851 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; ; break;} -case 150: -#line 821 "awkgram.y" +case 153: +#line 854 "awkgram.y" { - if (yyvsp[0].nodeval->type == Node_val) { + if (yyvsp[0].nodeval->type == Node_val && (yyvsp[0].nodeval->flags & (STR|STRING)) == 0) { yyvsp[0].nodeval->numbr = -(force_number(yyvsp[0].nodeval)); yyval.nodeval = yyvsp[0].nodeval; } else yyval.nodeval = node(yyvsp[0].nodeval, Node_unary_minus, (NODE *) NULL); ; break;} -case 151: -#line 829 "awkgram.y" +case 154: +#line 862 "awkgram.y" { /* * was: $$ = $2 @@ -2224,20 +2230,20 @@ case 151: yyval.nodeval = node (make_number(0.0), Node_plus, yyvsp[0].nodeval); ; break;} -case 152: -#line 840 "awkgram.y" +case 155: +#line 873 "awkgram.y" { yyval.nodeval = NULL; ; break;} -case 153: -#line 842 "awkgram.y" +case 156: +#line 875 "awkgram.y" { yyval.nodeval = yyvsp[0].nodeval; ; break;} -case 154: -#line 847 "awkgram.y" +case 157: +#line 880 "awkgram.y" { yyval.nodeval = variable(yyvsp[0].sval, CAN_FREE, Node_var); ; break;} -case 155: -#line 849 "awkgram.y" +case 158: +#line 882 "awkgram.y" { if (yyvsp[-1].nodeval == NULL) { fatal(_("invalid subscript expression")); @@ -2248,24 +2254,24 @@ case 155: yyval.nodeval = node(variable(yyvsp[-3].sval, CAN_FREE, Node_var_array), Node_subscript, yyvsp[-1].nodeval); ; break;} -case 156: -#line 859 "awkgram.y" +case 159: +#line 892 "awkgram.y" { yyval.nodeval = node(yyvsp[0].nodeval, Node_field_spec, (NODE *) NULL); ; break;} -case 158: -#line 867 "awkgram.y" +case 161: +#line 900 "awkgram.y" { yyerrok; ; break;} -case 159: -#line 871 "awkgram.y" +case 162: +#line 904 "awkgram.y" { yyerrok; ; break;} -case 162: -#line 880 "awkgram.y" +case 165: +#line 913 "awkgram.y" { yyerrok; want_assign = FALSE; ; break;} -case 163: -#line 883 "awkgram.y" +case 166: +#line 916 "awkgram.y" { yyerrok; ; break;} } @@ -2490,7 +2496,7 @@ yyerrhandle: } return 1; } -#line 886 "awkgram.y" +#line 919 "awkgram.y" struct token { @@ -2527,6 +2533,7 @@ static struct token tokentab[] = { {"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}, {"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}, @@ -2577,6 +2584,20 @@ static struct token tokentab[] = { {"xor", Node_builtin, LEX_BUILTIN, GAWKX|A(2), do_xor}, }; +#ifdef MBS_SUPPORT +/* Variable containing the current shift state. */ +static mbstate_t cur_mbstate; +/* Ring buffer containing current characters. */ +#define MAX_CHAR_IN_RING_BUFFER 8 +#define RING_BUFFER_SIZE (MAX_CHAR_IN_RING_BUFFER * MB_LEN_MAX) +static char cur_char_ring[RING_BUFFER_SIZE]; +/* Index for ring buffers. */ +static int cur_ring_idx; +/* This macro means that last nextc() return a singlebyte character + or 1st byte of a multibyte character. */ +#define nextc_is_1stbyte (cur_char_ring[cur_ring_idx] == 1) +#endif /* MBS_SUPPORT */ + /* getfname --- return name of a builtin function (for pretty printing) */ const char * @@ -2614,7 +2635,8 @@ static void const char *mesg = NULL; register char *bp, *cp; char *scan; - char buf[120]; + char *buf; + int count; static char end_of_file_line[] = "(END OF FILE)"; errcount++; @@ -2641,11 +2663,24 @@ static void bp = thisline + strlen(thisline); } msg("%.*s", (int) (bp - thisline), thisline); + +#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__ + va_start(args, m); + if (mesg == NULL) + mesg = m; +#else + va_start(args); + if (mesg == NULL) + mesg = va_arg(args, char *); +#endif + count = (bp - thisline) + strlen(mesg) + 2 + 1; + emalloc(buf, char *, count, "yyerror"); + bp = buf; - cp = buf + sizeof(buf) - 24; /* 24 more than longest msg. input */ + if (lexptr != NULL) { scan = thisline; - while (bp < cp && scan < lexeme) + while (scan < lexeme) if (*scan++ == '\t') *bp++ = '\t'; else @@ -2653,18 +2688,10 @@ static void *bp++ = '^'; *bp++ = ' '; } -#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__ - va_start(args, m); - if (mesg == NULL) - mesg = m; -#else - va_start(args); - if (mesg == NULL) - mesg = va_arg(args, char *); -#endif strcpy(bp, mesg); err("", buf, args); va_end(args); + free(buf); } /* get_src_buf --- read the next buffer of source program */ @@ -2845,6 +2872,75 @@ tokexpand() /* nextc --- get the next input character */ +#ifdef MBS_SUPPORT + +static int +nextc() +{ + if (MB_CUR_MAX > 1) { + /* Update the buffer index. */ + cur_ring_idx = (cur_ring_idx == RING_BUFFER_SIZE - 1)? 0 : + cur_ring_idx + 1; + + /* Did we already check the current character? */ + if (cur_char_ring[cur_ring_idx] == 0) { + /* No, we need to check the next character on the buffer. */ + int idx, work_ring_idx = cur_ring_idx; + mbstate_t tmp_state; + size_t mbclen; + + if (!lexptr || lexptr >= lexend) + if (!get_src_buf()) { + return EOF; + } + + for (idx = 0 ; lexptr + idx < lexend ; idx++) { + tmp_state = cur_mbstate; + mbclen = mbrlen(lexptr, idx + 1, &tmp_state); + + if (mbclen == 1 || mbclen == (size_t)-1 || mbclen == 0) { + /* It is a singlebyte character, non-complete multibyte + character or EOF. We treat it as a singlebyte + character. */ + cur_char_ring[work_ring_idx] = 1; + break; + } else if (mbclen == (size_t)-2) { + /* It is not a complete multibyte character. */ + cur_char_ring[work_ring_idx] = idx + 1; + } else { + /* mbclen > 1 */ + cur_char_ring[work_ring_idx] = mbclen; + break; + } + work_ring_idx = (work_ring_idx == RING_BUFFER_SIZE - 1)? + 0 : work_ring_idx + 1; + } + cur_mbstate = tmp_state; + + /* Put a mark on the position on which we write next character. */ + work_ring_idx = (work_ring_idx == RING_BUFFER_SIZE - 1)? + 0 : work_ring_idx + 1; + cur_char_ring[work_ring_idx] = 0; + } + + return (int) (unsigned char) *lexptr++; + } + else { + int c; + + if (lexptr && lexptr < lexend) + c = (int) (unsigned char) *lexptr++; + else if (get_src_buf()) + c = (int) (unsigned char) *lexptr++; + else + c = EOF; + + return c; + } +} + +#else /* MBS_SUPPORT */ + #if GAWKDEBUG int nextc() @@ -2867,10 +2963,29 @@ nextc() ) #endif +#endif /* MBS_SUPPORT */ + /* pushback --- push a character back on the input */ +#ifdef MBS_SUPPORT + +static void +pushback() +{ + if (MB_CUR_MAX > 1) { + cur_ring_idx = (cur_ring_idx == 0)? RING_BUFFER_SIZE - 1 : + cur_ring_idx - 1; + (lexptr && lexptr > lexptr_begin ? lexptr-- : lexptr); + } else + (lexptr && lexptr > lexptr_begin ? lexptr-- : lexptr); +} + +#else + #define pushback() (lexptr && lexptr > lexptr_begin ? lexptr-- : lexptr) +#endif /* MBS_SUPPORT */ + /* allow_newline --- allow newline after &&, ||, ? and : */ static void @@ -2925,7 +3040,7 @@ yylex() return 0; } pushback(); -#ifdef OS2 +#if defined OS2 || defined __EMX__ /* * added for OS/2's extproc feature of cmd.exe * (like #! in BSD sh) @@ -2960,6 +3075,9 @@ yylex() tok = tokstart; for (;;) { c = nextc(); +#ifdef MBS_SUPPORT + if (MB_CUR_MAX == 1 || nextc_is_1stbyte) +#endif switch (c) { case '[': /* one day check for `.' and `=' too */ @@ -3017,6 +3135,9 @@ retry: tok = tokstart; yylval.nodetypeval = Node_illegal; +#ifdef MBS_SUPPORT + if (MB_CUR_MAX == 1 || nextc_is_1stbyte) +#endif switch (c) { case EOF: if (lasttok != NEWLINE) { @@ -3258,6 +3379,9 @@ retry: yyerror(_("unterminated string")); exit(1); } +#ifdef MBS_SUPPORT + if (MB_CUR_MAX == 1 || nextc_is_1stbyte) +#endif if (c == '\\') { c = nextc(); if (c == '\n') { @@ -3387,9 +3511,15 @@ retry: eof_warned = TRUE; } tokadd('\0'); - if (! do_traditional && isnondecimal(tokstart)) + if (! do_traditional && isnondecimal(tokstart)) { + static short warned = FALSE; + if (do_lint && ! warned) { + warned = TRUE; + lintwarn("numeric constant `%.*s' treated as octal or hexadecimal", + strlen(tokstart)-1, tokstart); + } yylval.nodeval = make_number(nondec2awknum(tokstart, strlen(tokstart))); - else + } else yylval.nodeval = make_number(atof(tokstart)); yylval.nodeval->flags |= PERM; return lasttok = YNUMBER; @@ -3424,7 +3554,21 @@ retry: exit(1); } - if (! do_traditional && c == '_') { + /* + * Lots of fog here. Consider: + * + * print "xyzzy"$_"foo" + * + * Without the check for ` lasttok != '$'' ', this is parsed as + * + * print "xxyzz" $(_"foo") + * + * With the check, it is "correctly" parsed as three + * string concatenations. Sigh. This seems to be + * "more correct", but this is definitely one of those + * occasions where the interactions are funny. + */ + if (! do_traditional && c == '_' && lasttok != '$') { if ((c = nextc()) == '"') { intlstr = TRUE; goto string; @@ -3561,7 +3705,7 @@ snode(NODE *subn, NODETYPE op, int idx) /* traverse expression list to see how many args. given */ for (n = subn; n != NULL; n = n->rnode) { nexp++; - if (nexp > 3) + if (nexp > 5) break; } @@ -3655,9 +3799,22 @@ snode(NODE *subn, NODETYPE op, int idx) /* don't dump it, the lexer already did */ else dumpintlstr(str->stptr, str->stlen); + } else if (do_intl /* --gen-po */ + && r->proc == do_dcngettext /* dcngettext(...) */ + && subn->lnode->type == Node_val /* 1st arg is constant */ + && (subn->lnode->flags & STR) != 0 /* it's a string constant */ + && subn->rnode->lnode->type == Node_val /* 2nd arg is constant too */ + && (subn->rnode->lnode->flags & STR) != 0) { /* it's a string constant */ + /* ala xgettext, dcngettext("some string", "some plural" ...) dumps the string */ + NODE *str1 = subn->lnode; + NODE *str2 = subn->rnode->lnode; + + if (((str1->flags | str2->flags) & INTLSTR) != 0) + warning(_("use of dcngettext(_\"...\") is incorrect: remove leading underscore")); + else + dumpintlstr2(str1->stptr, str1->stlen, str2->stptr, str2->stlen); } - r->subnode = subn; if (r->proc == do_sprintf) { count_args(r); @@ -4334,7 +4491,7 @@ mk_rexp(NODE *exp) return exp; getnode(n); - n->type = Node_regex; + n->type = Node_dynregex; n->re_exp = exp; n->re_text = NULL; n->re_reg = NULL; @@ -4436,7 +4593,7 @@ isassignable(register NODE *n) NODE * stopme(NODE *tree) { - return tmp_number((AWKNUM) 0.0); + return 0; } /* dumpintlstr --- write out an initial .po file entry for the string */ @@ -4456,10 +4613,36 @@ dumpintlstr(char *str, size_t len) } printf("msgid "); - fflush(stdout); pp_string_fp(stdout, str, len, '"', TRUE); putchar('\n'); printf("msgstr \"\"\n\n"); + fflush(stdout); +} + +/* dumpintlstr2 --- write out an initial .po file entry for the string and its plural */ + +static void +dumpintlstr2(char *str1, size_t len1, char *str2, size_t len2) +{ + char *cp; + + /* See the GNU gettext distribution for details on the file format */ + + if (source != NULL) { + /* ala the gettext sources, remove leading `./'s */ + for (cp = source; cp[0] == '.' && cp[1] == '/'; cp += 2) + continue; + printf("#: %s:%d\n", cp, sourceline); + } + + printf("msgid "); + pp_string_fp(stdout, str1, len1, '"', TRUE); + putchar('\n'); + printf("msgid_plural "); + pp_string_fp(stdout, str2, len2, '"', TRUE); + putchar('\n'); + printf("msgstr[0] \"\"\nmsgstr[1] \"\"\n\n"); + fflush(stdout); } /* count_args --- count the number of printf arguments */ |