diff options
Diffstat (limited to 'y.tab.c')
-rw-r--r-- | y.tab.c | 1370 |
1 files changed, 860 insertions, 510 deletions
@@ -1,5 +1,5 @@ -/* A Bison parser, made from /usr/homes/chet/src/bash/bash-2.01.1/parse.y +/* A Bison parser, made from /usr/homes/chet/src/bash/src/parse.y by GNU Bison version 1.25 */ @@ -19,27 +19,32 @@ #define DO 269 #define DONE 270 #define FUNCTION 271 -#define IN 272 -#define BANG 273 -#define TIME 274 -#define TIMEOPT 275 -#define WORD 276 -#define ASSIGNMENT_WORD 277 -#define NUMBER 278 -#define AND_AND 279 -#define OR_OR 280 -#define GREATER_GREATER 281 -#define LESS_LESS 282 -#define LESS_AND 283 -#define GREATER_AND 284 -#define SEMI_SEMI 285 -#define LESS_LESS_MINUS 286 -#define AND_GREATER 287 -#define LESS_GREATER 288 -#define GREATER_BAR 289 -#define yacc_EOF 290 - -#line 21 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#define COND_START 272 +#define COND_END 273 +#define COND_ERROR 274 +#define IN 275 +#define BANG 276 +#define TIME 277 +#define TIMEOPT 278 +#define WORD 279 +#define ASSIGNMENT_WORD 280 +#define NUMBER 281 +#define ARITH_CMD 282 +#define COND_CMD 283 +#define AND_AND 284 +#define OR_OR 285 +#define GREATER_GREATER 286 +#define LESS_LESS 287 +#define LESS_AND 288 +#define GREATER_AND 289 +#define SEMI_SEMI 290 +#define LESS_LESS_MINUS 291 +#define AND_GREATER 292 +#define LESS_GREATER 293 +#define GREATER_BAR 294 +#define yacc_EOF 295 + +#line 21 "/usr/homes/chet/src/bash/src/parse.y" #include "config.h" @@ -86,9 +91,11 @@ #endif /* ALIAS */ #if defined (PROMPT_STRING_DECODE) -#include <sys/param.h> -#include <time.h> -#include "maxpath.h" +# ifndef _MINIX +# include <sys/param.h> +# endif +# include <time.h> +# include "maxpath.h" #endif /* PROMPT_STRING_DECODE */ #define RE_READ_TOKEN -99 @@ -96,6 +103,13 @@ #define YYDEBUG 0 +#if defined (EXTENDED_GLOB) +#define PATTERN_CHAR(c) \ + ((c) == '@' || (c) == '*' || (c) == '+' || (c) == '?' || (c) == '!') + +extern int extended_glob; +#endif + extern int eof_encountered; extern int no_line_editing, running_under_emacs; extern int current_command_number; @@ -107,7 +121,7 @@ extern int interrupt_immediately; extern char *shell_name, *current_host_name; extern char *dist_version; extern int patch_level; -extern int dump_translatable_strings; +extern int dump_translatable_strings, dump_po_strings; extern Function *last_shell_builtin, *this_shell_builtin; #if defined (BUFFERED_INPUT) extern int bash_input_fd_changed; @@ -125,6 +139,9 @@ static int reserved_word_acceptable (); static int read_token (); static int yylex (); static int parse_arith_cmd (); +#if defined (COND_COMMAND) +static COMMAND *parse_cond_command (); +#endif static int read_token_word (); static void discard_parser_constructs (); @@ -189,7 +206,7 @@ static int function_bstart; static REDIRECTEE redir; -#line 171 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 183 "/usr/homes/chet/src/bash/src/parse.y" typedef union { WORD_DESC *word; /* the word that we read. */ int number; /* the number that we read. */ @@ -209,26 +226,26 @@ typedef union { -#define YYFINAL 263 +#define YYFINAL 269 #define YYFLAG -32768 -#define YYNTBASE 47 +#define YYNTBASE 52 -#define YYTRANSLATE(x) ((unsigned)(x) <= 290 ? yytranslate[x] : 78) +#define YYTRANSLATE(x) ((unsigned)(x) <= 295 ? yytranslate[x] : 85) static const char yytranslate[] = { 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 37, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 42, 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, 35, 2, 45, - 46, 2, 2, 2, 42, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 36, 41, - 2, 40, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 40, 2, 50, + 51, 2, 2, 2, 47, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 41, 46, + 2, 45, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 43, 39, 44, 2, 2, 2, 2, 2, + 2, 2, 48, 44, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -244,7 +261,8 @@ static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 38 + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 43 }; #if YYDEBUG != 0 @@ -254,67 +272,68 @@ static const short yyprhs[] = { 0, 64, 67, 71, 74, 78, 81, 85, 88, 92, 95, 99, 102, 105, 109, 111, 113, 115, 117, 120, 122, 125, 127, 129, 132, 134, 136, 142, 148, 150, 152, - 154, 156, 158, 165, 172, 180, 188, 199, 210, 217, - 224, 232, 240, 251, 262, 269, 277, 284, 290, 297, - 302, 306, 312, 320, 327, 331, 336, 343, 349, 351, - 354, 359, 364, 370, 376, 379, 383, 385, 389, 392, - 394, 397, 401, 405, 409, 414, 419, 424, 429, 434, - 436, 438, 440, 442, 443, 446, 448, 451, 454, 459, - 464, 468, 472, 474, 476, 479, 482, 486, 490, 495, - 497, 499 + 154, 156, 158, 160, 162, 169, 176, 184, 192, 203, + 214, 221, 228, 236, 244, 255, 266, 273, 281, 288, + 294, 301, 306, 310, 316, 324, 331, 335, 337, 341, + 346, 353, 359, 361, 364, 369, 374, 380, 386, 389, + 393, 395, 399, 402, 404, 407, 411, 415, 419, 424, + 429, 434, 439, 444, 446, 448, 450, 452, 453, 456, + 458, 461, 464, 469, 474, 478, 482, 484, 486, 489, + 492, 496, 500, 505, 507, 509 }; -static const short yyrhs[] = { 73, - 37, 0, 37, 0, 1, 37, 0, 38, 0, 21, - 0, 48, 21, 0, 40, 21, 0, 41, 21, 0, - 23, 40, 21, 0, 23, 41, 21, 0, 26, 21, - 0, 23, 26, 21, 0, 27, 21, 0, 23, 27, - 21, 0, 28, 23, 0, 23, 28, 23, 0, 29, - 23, 0, 23, 29, 23, 0, 28, 21, 0, 23, - 28, 21, 0, 29, 21, 0, 23, 29, 21, 0, - 31, 21, 0, 23, 31, 21, 0, 29, 42, 0, - 23, 29, 42, 0, 28, 42, 0, 23, 28, 42, - 0, 32, 21, 0, 23, 33, 21, 0, 33, 21, - 0, 34, 21, 0, 23, 34, 21, 0, 21, 0, - 22, 0, 49, 0, 49, 0, 51, 49, 0, 50, - 0, 52, 50, 0, 52, 0, 54, 0, 54, 51, - 0, 55, 0, 57, 0, 12, 68, 14, 68, 15, - 0, 13, 68, 14, 68, 15, 0, 56, 0, 60, - 0, 59, 0, 61, 0, 58, 0, 10, 21, 72, - 14, 68, 15, 0, 10, 21, 72, 43, 68, 44, - 0, 10, 21, 36, 72, 14, 68, 15, 0, 10, - 21, 36, 72, 43, 68, 44, 0, 10, 21, 72, - 17, 48, 71, 72, 14, 68, 15, 0, 10, 21, - 72, 17, 48, 71, 72, 43, 68, 44, 0, 11, - 21, 72, 14, 67, 15, 0, 11, 21, 72, 43, - 67, 44, 0, 11, 21, 36, 72, 14, 67, 15, - 0, 11, 21, 36, 72, 43, 67, 44, 0, 11, - 21, 72, 17, 48, 71, 72, 14, 67, 15, 0, - 11, 21, 72, 17, 48, 71, 72, 43, 67, 44, - 0, 8, 21, 72, 17, 72, 9, 0, 8, 21, - 72, 17, 65, 72, 9, 0, 8, 21, 72, 17, - 63, 9, 0, 21, 45, 46, 72, 61, 0, 16, - 21, 45, 46, 72, 61, 0, 16, 21, 72, 61, - 0, 45, 68, 46, 0, 3, 68, 4, 68, 7, - 0, 3, 68, 4, 68, 5, 68, 7, 0, 3, - 68, 4, 68, 62, 7, 0, 43, 67, 44, 0, - 6, 68, 4, 68, 0, 6, 68, 4, 68, 5, - 68, 0, 6, 68, 4, 68, 62, 0, 64, 0, - 65, 64, 0, 72, 66, 46, 68, 0, 72, 66, - 46, 72, 0, 72, 45, 66, 46, 68, 0, 72, - 45, 66, 46, 72, 0, 64, 30, 0, 65, 64, - 30, 0, 21, 0, 66, 39, 21, 0, 72, 69, - 0, 67, 0, 72, 70, 0, 70, 37, 72, 0, - 70, 35, 72, 0, 70, 36, 72, 0, 70, 24, - 72, 70, 0, 70, 25, 72, 70, 0, 70, 35, - 72, 70, 0, 70, 36, 72, 70, 0, 70, 37, - 72, 70, 0, 75, 0, 37, 0, 36, 0, 38, - 0, 0, 72, 37, 0, 74, 0, 74, 35, 0, - 74, 36, 0, 74, 24, 72, 74, 0, 74, 25, - 72, 74, 0, 74, 35, 74, 0, 74, 36, 74, - 0, 75, 0, 76, 0, 18, 76, 0, 77, 76, - 0, 77, 18, 76, 0, 18, 77, 76, 0, 76, - 39, 72, 76, 0, 53, 0, 19, 0, 19, 20, +static const short yyrhs[] = { 80, + 42, 0, 42, 0, 1, 42, 0, 43, 0, 24, + 0, 53, 24, 0, 45, 24, 0, 46, 24, 0, + 26, 45, 24, 0, 26, 46, 24, 0, 31, 24, + 0, 26, 31, 24, 0, 32, 24, 0, 26, 32, + 24, 0, 33, 26, 0, 26, 33, 26, 0, 34, + 26, 0, 26, 34, 26, 0, 33, 24, 0, 26, + 33, 24, 0, 34, 24, 0, 26, 34, 24, 0, + 36, 24, 0, 26, 36, 24, 0, 34, 47, 0, + 26, 34, 47, 0, 33, 47, 0, 26, 33, 47, + 0, 37, 24, 0, 26, 38, 24, 0, 38, 24, + 0, 39, 24, 0, 26, 39, 24, 0, 24, 0, + 25, 0, 54, 0, 54, 0, 56, 54, 0, 55, + 0, 57, 55, 0, 57, 0, 59, 0, 59, 56, + 0, 60, 0, 62, 0, 12, 75, 14, 75, 15, + 0, 13, 75, 14, 75, 15, 0, 61, 0, 65, + 0, 64, 0, 66, 0, 67, 0, 68, 0, 63, + 0, 10, 24, 79, 14, 75, 15, 0, 10, 24, + 79, 48, 75, 49, 0, 10, 24, 41, 79, 14, + 75, 15, 0, 10, 24, 41, 79, 48, 75, 49, + 0, 10, 24, 79, 20, 53, 78, 79, 14, 75, + 15, 0, 10, 24, 79, 20, 53, 78, 79, 48, + 75, 49, 0, 11, 24, 79, 14, 74, 15, 0, + 11, 24, 79, 48, 74, 49, 0, 11, 24, 41, + 79, 14, 74, 15, 0, 11, 24, 41, 79, 48, + 74, 49, 0, 11, 24, 79, 20, 53, 78, 79, + 14, 74, 15, 0, 11, 24, 79, 20, 53, 78, + 79, 48, 74, 49, 0, 8, 24, 79, 20, 79, + 9, 0, 8, 24, 79, 20, 72, 79, 9, 0, + 8, 24, 79, 20, 70, 9, 0, 24, 50, 51, + 79, 66, 0, 16, 24, 50, 51, 79, 66, 0, + 16, 24, 79, 66, 0, 50, 75, 51, 0, 3, + 75, 4, 75, 7, 0, 3, 75, 4, 75, 5, + 75, 7, 0, 3, 75, 4, 75, 69, 7, 0, + 48, 74, 49, 0, 27, 0, 17, 28, 18, 0, + 6, 75, 4, 75, 0, 6, 75, 4, 75, 5, + 75, 0, 6, 75, 4, 75, 69, 0, 71, 0, + 72, 71, 0, 79, 73, 51, 75, 0, 79, 73, + 51, 79, 0, 79, 50, 73, 51, 75, 0, 79, + 50, 73, 51, 79, 0, 71, 35, 0, 72, 71, + 35, 0, 24, 0, 73, 44, 24, 0, 79, 76, + 0, 74, 0, 79, 77, 0, 77, 42, 79, 0, + 77, 40, 79, 0, 77, 41, 79, 0, 77, 29, + 79, 77, 0, 77, 30, 79, 77, 0, 77, 40, + 79, 77, 0, 77, 41, 79, 77, 0, 77, 42, + 79, 77, 0, 82, 0, 42, 0, 41, 0, 43, + 0, 0, 79, 42, 0, 81, 0, 81, 40, 0, + 81, 41, 0, 81, 29, 79, 81, 0, 81, 30, + 79, 81, 0, 81, 40, 81, 0, 81, 41, 81, + 0, 82, 0, 83, 0, 21, 83, 0, 84, 83, + 0, 84, 21, 83, 0, 21, 84, 83, 0, 83, + 44, 79, 83, 0, 58, 0, 22, 0, 22, 23, 0 }; @@ -322,19 +341,19 @@ static const short yyrhs[] = { 73, #if YYDEBUG != 0 static const short yyrline[] = { 0, - 214, 223, 230, 245, 255, 257, 261, 266, 271, 276, - 281, 286, 291, 297, 303, 308, 313, 318, 323, 328, - 333, 338, 343, 350, 357, 362, 367, 372, 377, 382, - 387, 392, 397, 404, 406, 408, 412, 416, 427, 429, - 433, 435, 437, 466, 468, 470, 472, 474, 476, 478, - 480, 482, 486, 488, 490, 492, 494, 496, 500, 504, - 508, 512, 516, 520, 526, 528, 530, 534, 538, 541, - 545, 549, 551, 553, 558, 562, 564, 566, 570, 571, - 575, 577, 579, 581, 585, 586, 590, 592, 601, 609, - 610, 616, 617, 624, 628, 630, 632, 639, 641, 643, - 647, 648, 649, 652, 653, 662, 668, 677, 685, 687, - 689, 696, 699, 703, 705, 710, 715, 720, 727, 730, - 734, 736 + 232, 241, 248, 263, 273, 275, 279, 284, 289, 294, + 299, 304, 309, 315, 321, 326, 331, 336, 341, 346, + 351, 356, 361, 368, 375, 380, 385, 390, 395, 400, + 405, 410, 415, 422, 424, 426, 430, 434, 445, 447, + 451, 453, 455, 484, 486, 488, 490, 492, 494, 496, + 498, 500, 502, 504, 508, 510, 512, 514, 516, 518, + 522, 526, 530, 534, 538, 542, 548, 550, 552, 556, + 560, 563, 567, 571, 573, 575, 580, 584, 588, 592, + 594, 596, 600, 601, 605, 607, 609, 611, 615, 616, + 620, 622, 631, 639, 640, 646, 647, 654, 658, 660, + 662, 669, 671, 673, 677, 678, 679, 682, 683, 692, + 698, 707, 715, 717, 719, 726, 729, 733, 735, 740, + 745, 750, 757, 760, 764, 766 }; #endif @@ -343,32 +362,33 @@ static const short yyrline[] = { 0, static const char * const yytname[] = { "$","error","$undefined.","IF","THEN", "ELSE","ELIF","FI","CASE","ESAC","FOR","SELECT","WHILE","UNTIL","DO","DONE", -"FUNCTION","IN","BANG","TIME","TIMEOPT","WORD","ASSIGNMENT_WORD","NUMBER","AND_AND", -"OR_OR","GREATER_GREATER","LESS_LESS","LESS_AND","GREATER_AND","SEMI_SEMI","LESS_LESS_MINUS", -"AND_GREATER","LESS_GREATER","GREATER_BAR","'&'","';'","'\\n'","yacc_EOF","'|'", -"'>'","'<'","'-'","'{'","'}'","'('","')'","inputunit","word_list","redirection", -"simple_command_element","redirection_list","simple_command","command","shell_command", -"for_command","select_command","case_command","function_def","subshell","if_command", -"group_command","elif_clause","case_clause","pattern_list","case_clause_sequence", +"FUNCTION","COND_START","COND_END","COND_ERROR","IN","BANG","TIME","TIMEOPT", +"WORD","ASSIGNMENT_WORD","NUMBER","ARITH_CMD","COND_CMD","AND_AND","OR_OR","GREATER_GREATER", +"LESS_LESS","LESS_AND","GREATER_AND","SEMI_SEMI","LESS_LESS_MINUS","AND_GREATER", +"LESS_GREATER","GREATER_BAR","'&'","';'","'\\n'","yacc_EOF","'|'","'>'","'<'", +"'-'","'{'","'}'","'('","')'","inputunit","word_list","redirection","simple_command_element", +"redirection_list","simple_command","command","shell_command","for_command", +"select_command","case_command","function_def","subshell","if_command","group_command", +"arith_command","cond_command","elif_clause","case_clause","pattern_list","case_clause_sequence", "pattern","list","compound_list","list0","list1","list_terminator","newline_list", "simple_list","simple_list1","pipeline_command","pipeline","timespec", NULL }; #endif static const short yyr1[] = { 0, - 47, 47, 47, 47, 48, 48, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 50, 50, 50, 51, 51, 52, 52, - 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 55, 55, 55, 55, 55, 55, 56, 56, - 56, 56, 56, 56, 57, 57, 57, 58, 58, 58, - 59, 60, 60, 60, 61, 62, 62, 62, 63, 63, - 64, 64, 64, 64, 65, 65, 66, 66, 67, 68, - 68, 69, 69, 69, 70, 70, 70, 70, 70, 70, - 71, 71, 71, 72, 72, 73, 73, 73, 74, 74, - 74, 74, 74, 75, 75, 75, 75, 75, 76, 76, - 77, 77 + 52, 52, 52, 52, 53, 53, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 55, 55, 55, 56, 56, 57, 57, + 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, + 61, 61, 61, 61, 61, 61, 62, 62, 62, 63, + 63, 63, 64, 65, 65, 65, 66, 67, 68, 69, + 69, 69, 70, 70, 71, 71, 71, 71, 72, 72, + 73, 73, 74, 75, 75, 76, 76, 76, 77, 77, + 77, 77, 77, 77, 78, 78, 78, 79, 79, 80, + 80, 80, 81, 81, 81, 81, 81, 82, 82, 82, + 82, 82, 83, 83, 84, 84 }; static const short yyr2[] = { 0, @@ -377,203 +397,217 @@ static const short yyr2[] = { 0, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 5, 5, 1, 1, 1, - 1, 1, 6, 6, 7, 7, 10, 10, 6, 6, - 7, 7, 10, 10, 6, 7, 6, 5, 6, 4, - 3, 5, 7, 6, 3, 4, 6, 5, 1, 2, - 4, 4, 5, 5, 2, 3, 1, 3, 2, 1, - 2, 3, 3, 3, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 0, 2, 1, 2, 2, 4, 4, - 3, 3, 1, 1, 2, 2, 3, 3, 4, 1, - 1, 2 + 1, 1, 1, 1, 6, 6, 7, 7, 10, 10, + 6, 6, 7, 7, 10, 10, 6, 7, 6, 5, + 6, 4, 3, 5, 7, 6, 3, 1, 3, 4, + 6, 5, 1, 2, 4, 4, 5, 5, 2, 3, + 1, 3, 2, 1, 2, 3, 3, 3, 4, 4, + 4, 4, 4, 1, 1, 1, 1, 0, 2, 1, + 2, 2, 4, 4, 3, 3, 1, 1, 2, 2, + 3, 3, 4, 1, 1, 2 }; static const short yydefact[] = { 0, - 0, 104, 0, 0, 0, 104, 104, 0, 0, 121, - 34, 35, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 4, 0, 0, 104, 104, 36, 39, 41, - 120, 42, 44, 48, 45, 52, 50, 49, 51, 0, - 106, 113, 114, 0, 3, 90, 0, 0, 104, 104, - 104, 0, 0, 104, 115, 0, 122, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 11, 13, 19, - 15, 27, 21, 17, 25, 23, 29, 31, 32, 7, - 8, 0, 0, 0, 34, 40, 37, 43, 1, 104, - 104, 107, 108, 104, 0, 116, 104, 105, 89, 91, - 100, 0, 104, 0, 104, 0, 104, 104, 0, 0, - 118, 104, 12, 14, 20, 16, 28, 22, 18, 26, - 24, 30, 33, 9, 10, 75, 0, 71, 38, 0, - 0, 111, 112, 0, 117, 0, 104, 104, 104, 104, - 104, 104, 0, 104, 0, 104, 0, 104, 0, 104, - 0, 0, 104, 70, 0, 109, 110, 0, 0, 119, - 104, 104, 72, 0, 0, 0, 93, 94, 92, 0, - 79, 104, 0, 104, 104, 0, 5, 0, 0, 104, - 104, 0, 0, 0, 46, 47, 0, 68, 0, 0, - 74, 95, 96, 97, 98, 99, 67, 85, 80, 0, - 65, 87, 0, 0, 0, 0, 53, 6, 102, 101, - 103, 104, 54, 0, 0, 59, 104, 60, 69, 73, - 104, 104, 104, 104, 86, 66, 0, 0, 104, 55, - 56, 0, 61, 62, 0, 76, 0, 0, 0, 104, - 88, 81, 82, 104, 104, 104, 104, 104, 78, 83, - 84, 0, 0, 0, 0, 77, 57, 58, 63, 64, - 0, 0, 0 + 0, 108, 0, 0, 0, 108, 108, 0, 0, 0, + 125, 34, 35, 0, 78, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 108, 108, 36, + 39, 41, 124, 42, 44, 48, 45, 54, 50, 49, + 51, 52, 53, 0, 110, 117, 118, 0, 3, 94, + 0, 0, 108, 108, 108, 0, 0, 108, 0, 119, + 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 13, 19, 15, 27, 21, 17, 25, + 23, 29, 31, 32, 7, 8, 0, 0, 0, 34, + 40, 37, 43, 1, 108, 108, 111, 112, 108, 0, + 120, 108, 109, 93, 95, 104, 0, 108, 0, 108, + 0, 108, 108, 0, 0, 79, 122, 108, 12, 14, + 20, 16, 28, 22, 18, 26, 24, 30, 33, 9, + 10, 77, 0, 73, 38, 0, 0, 115, 116, 0, + 121, 0, 108, 108, 108, 108, 108, 108, 0, 108, + 0, 108, 0, 108, 0, 108, 0, 0, 108, 72, + 0, 113, 114, 0, 0, 123, 108, 108, 74, 0, + 0, 0, 97, 98, 96, 0, 83, 108, 0, 108, + 108, 0, 5, 0, 0, 108, 108, 0, 0, 0, + 46, 47, 0, 70, 0, 0, 76, 99, 100, 101, + 102, 103, 69, 89, 84, 0, 67, 91, 0, 0, + 0, 0, 55, 6, 106, 105, 107, 108, 56, 0, + 0, 61, 108, 62, 71, 75, 108, 108, 108, 108, + 90, 68, 0, 0, 108, 57, 58, 0, 63, 64, + 0, 80, 0, 0, 0, 108, 92, 85, 86, 108, + 108, 108, 108, 108, 82, 87, 88, 0, 0, 0, + 0, 81, 59, 60, 65, 66, 0, 0, 0 }; -static const short yydefgoto[] = { 261, - 178, 28, 29, 88, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 164, 170, 171, 172, 204, 46, - 47, 99, 100, 212, 48, 40, 132, 101, 43, 44 +static const short yydefgoto[] = { 267, + 184, 30, 31, 93, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 170, 176, 177, 178, + 210, 50, 51, 104, 105, 218, 52, 44, 138, 106, + 47, 48 }; -static const short yypact[] = { 240, - -25,-32768, -4, 41, 44,-32768,-32768, 49, 348, 0, - -31,-32768, 476, 53, 55, 3, 29, 61, 63, 66, - 71,-32768,-32768, 76, 79,-32768,-32768,-32768,-32768, 165, --32768, 120,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -12, - 89,-32768, 12, 384,-32768,-32768, 99, 276,-32768, 93, - 103, 98, 143, 126, 12, 456,-32768, 127, 151, 153, - 35, 43, 154, 155, 159, 160, 161,-32768,-32768,-32768, +static const short yypact[] = { 246, + -34,-32768, 11, 20, 24,-32768,-32768, 33, -10, 369, + 29, 19,-32768, 529,-32768, 42, 47, 30, 36, 64, + 66, 78, 81,-32768,-32768, 84, 92,-32768,-32768,-32768, +-32768, 155,-32768, 513,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 89, -15,-32768, 77, 410,-32768,-32768, + 130, 287,-32768, 95, 99, 127, 131, 97, 132, 77, + 492,-32768, 100, 128, 129, 44, 56, 134, 135, 136, + 139, 140,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 105, 287, 104,-32768, +-32768,-32768, 513,-32768,-32768,-32768, 328, 328,-32768, 492, + 77,-32768,-32768,-32768, 88,-32768, 1,-32768, -1,-32768, + 16,-32768,-32768, 116, -32,-32768, 77,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 140, 276, 137,-32768,-32768,-32768, 120,-32768,-32768, --32768, 312, 312,-32768, 456, 12,-32768,-32768,-32768, 86, --32768, 38,-32768, -1,-32768, 16,-32768,-32768, 157, -28, - 12,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, 86,-32768,-32768, 276, - 276, 15, 15, 420, 12, 128,-32768,-32768,-32768,-32768, --32768,-32768, 4,-32768, 164,-32768, 17,-32768, 164,-32768, - 174, 189,-32768,-32768, -28,-32768,-32768, 312, 312, 12, --32768,-32768,-32768, 201, 276, 276, 276, 276, 276, 200, - 180,-32768, -2,-32768,-32768, 196,-32768, 57, 168,-32768, --32768, 198, 57, 170,-32768,-32768, -28,-32768, 209, 213, --32768,-32768,-32768, 142, 142, 142,-32768,-32768, 190, 1, --32768,-32768, 205, 40, 204, 177,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 207, 183,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, 50, 210,-32768,-32768, --32768, 20,-32768,-32768, 30, 139, 276, 276, 276,-32768, --32768,-32768, 276,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 276, 215, 188, 218, 191,-32768,-32768,-32768,-32768,-32768, - 236, 237,-32768 +-32768,-32768, 88,-32768,-32768, 287, 287, 69, 69, 451, + 77, 79,-32768,-32768,-32768,-32768,-32768,-32768, 3,-32768, + 144,-32768, 13,-32768, 144,-32768, 141, 157,-32768,-32768, + -32,-32768,-32768, 328, 328, 77,-32768,-32768,-32768, 166, + 287, 287, 287, 287, 287, 169, 147,-32768, -4,-32768, +-32768, 175,-32768, 52, 146,-32768,-32768, 181, 52, 149, +-32768,-32768, -32,-32768, 192, 199,-32768,-32768,-32768, 71, + 71, 71,-32768,-32768, 170, 0,-32768,-32768, 180, -22, + 191, 161,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 196, + 163,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 28, 189,-32768,-32768,-32768, 17,-32768,-32768, + 25, 114, 287, 287, 287,-32768,-32768,-32768, 287,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 287, 200, 167, 202, + 171,-32768,-32768,-32768,-32768,-32768, 218, 219,-32768 }; static const short yypgoto[] = {-32768, - 91, -27, 214,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, -107, 9,-32768, 74,-32768, 46, -18, - -6,-32768, -60, 64, -22,-32768, 11, 6, -7, 245 + 67, -30, 194,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, -112,-32768,-32768, -19,-32768, 46,-32768, + 18, -17, -6,-32768, -60, 39, -21,-32768, 6, 12, + -8, 220 }; -#define YYLAST 517 - - -static const short yytable[] = { 52, - 53, 55, 154, 83, 87, 42, 201, 82, 98, 226, - 41, 45, 144, 58, 26, 145, 49, 174, 202, 57, - 84, 202, 127, 70, 89, 71, 102, 104, 106, 148, - 180, 110, 149, 244, 98, 98, 96, 98, 90, 91, - 98, 146, 203, 246, 72, 203, 175, 188, 111, 73, - 94, 74, 98, 98, 142, 115, 98, 116, 150, 181, - 129, 50, 245, 118, 51, 119, 98, 130, 131, 54, - 75, 134, 247, 68, 98, 69, 117, 208, 228, 219, - 143, 76, 147, 77, 120, 229, 78, 135, 228, 155, - 136, 79, 209, 210, 211, 240, 80, 42, 42, 81, - 151, 152, 97, 133, 192, 193, 194, 195, 196, 137, - 138, 107, 90, 91, 165, 166, 167, 168, 169, 173, - 139, 140, 141, 92, 93, 83, 160, 83, 103, 182, - 187, 184, 161, 162, 163, 42, 42, 176, 105, 179, - 156, 157, 13, 248, 162, 14, 15, 16, 17, 200, - 18, 19, 20, 21, 189, 190, 108, 83, 83, 24, - 25, 214, 215, 42, 42, 137, 138, 205, 206, 133, - 109, 113, 112, 114, 121, 122, 194, 195, 196, 123, - 124, 125, 128, 126, 177, 85, 12, 13, 185, 232, - 14, 15, 16, 17, 235, 18, 19, 20, 21, 237, - 238, 239, 153, 186, 24, 25, 243, 191, 197, 198, - 207, 213, 216, 218, 236, 220, 221, 251, 230, 225, - 231, 233, 242, 83, 83, 202, 234, 254, 255, 257, - 241, 258, 259, 250, 260, 262, 263, 252, 253, 183, - 1, 256, 2, 86, 249, 199, 217, 3, 227, 4, - 5, 6, 7, 56, 0, 8, 0, 9, 10, 0, - 11, 12, 13, 0, 0, 14, 15, 16, 17, 0, - 18, 19, 20, 21, 0, 0, 22, 23, 2, 24, - 25, 0, 26, 3, 27, 4, 5, 6, 7, 0, - 0, 8, 0, 9, 10, 0, 11, 12, 13, 0, - 0, 14, 15, 16, 17, 0, 18, 19, 20, 21, - 0, 0, 98, 0, 2, 24, 25, 0, 26, 3, - 27, 4, 5, 6, 7, 0, 0, 8, 0, 9, - 10, 0, 11, 12, 13, 0, 0, 14, 15, 16, - 17, 0, 18, 19, 20, 21, 0, 0, 0, 0, - 2, 24, 25, 0, 26, 3, 27, 4, 5, 6, - 7, 0, 0, 8, 0, 0, 10, 0, 11, 12, - 13, 0, 0, 14, 15, 16, 17, 0, 18, 19, - 20, 21, 0, 0, 0, 0, 2, 24, 25, 0, - 26, 3, 27, 4, 5, 6, 7, 0, 0, 8, - 0, 95, 0, 0, 11, 12, 13, 0, 0, 14, - 15, 16, 17, 0, 18, 19, 20, 21, 0, 0, - 0, 0, 2, 24, 25, 0, 26, 3, 27, 4, - 5, 6, 7, 0, 0, 8, 0, 0, 0, 0, - 11, 12, 13, 0, 0, 14, 15, 16, 17, 0, - 18, 19, 20, 21, 0, 0, 98, 0, 2, 24, - 25, 0, 26, 3, 27, 4, 5, 6, 7, 0, - 0, 8, 0, 0, 0, 0, 11, 12, 13, 0, - 0, 14, 15, 16, 17, 0, 18, 19, 20, 21, - 0, 0, 0, 0, 0, 24, 25, 0, 26, 0, - 27, 59, 60, 61, 62, 0, 63, 0, 64, 65, - 0, 0, 0, 0, 0, 66, 67 +#define YYLAST 575 + + +static const short yytable[] = { 56, + 57, 60, 160, 92, 207, 45, 88, 49, 232, 103, + 87, 46, 150, 95, 96, 28, 180, 59, 151, 208, + 148, 234, 89, 208, 97, 98, 186, 133, 235, 154, + 250, 107, 109, 111, 53, 155, 115, 103, 252, 101, + 103, 103, 103, 54, 103, 209, 152, 55, 194, 209, + 181, 62, 117, 75, 103, 76, 58, 103, 103, 78, + 187, 79, 135, 156, 251, 73, 103, 121, 63, 122, + 74, 234, 253, 136, 137, 214, 77, 140, 246, 124, + 225, 125, 80, 167, 168, 169, 149, 81, 153, 82, + 123, 141, 215, 216, 217, 142, 161, 95, 96, 143, + 144, 83, 126, 139, 84, 157, 158, 85, 46, 46, + 198, 199, 200, 201, 202, 86, 143, 144, 254, 168, + 99, 171, 172, 173, 174, 175, 179, 145, 146, 147, + 94, 166, 88, 102, 88, 108, 188, 193, 190, 110, + 112, 162, 163, 182, 113, 185, 114, 46, 46, 116, + 118, 119, 120, 132, 134, 191, 206, 127, 128, 129, + 195, 196, 130, 131, 88, 88, 159, 183, 220, 221, + 139, 192, 197, 211, 212, 46, 46, 203, 90, 13, + 14, 204, 200, 201, 202, 16, 17, 18, 19, 213, + 20, 21, 22, 23, 219, 222, 238, 224, 226, 26, + 27, 241, 227, 208, 231, 236, 243, 244, 245, 237, + 239, 240, 247, 249, 263, 264, 265, 268, 269, 266, + 242, 189, 255, 205, 257, 91, 233, 223, 248, 61, + 88, 88, 0, 0, 260, 261, 0, 0, 0, 256, + 0, 0, 0, 258, 259, 0, 1, 262, 2, 0, + 0, 0, 0, 3, 0, 4, 5, 6, 7, 0, + 0, 8, 9, 0, 0, 0, 10, 11, 0, 12, + 13, 14, 15, 0, 0, 0, 16, 17, 18, 19, + 0, 20, 21, 22, 23, 0, 0, 24, 25, 2, + 26, 27, 0, 28, 3, 29, 4, 5, 6, 7, + 0, 0, 8, 9, 0, 0, 0, 10, 11, 0, + 12, 13, 14, 15, 0, 0, 0, 16, 17, 18, + 19, 0, 20, 21, 22, 23, 0, 0, 103, 0, + 2, 26, 27, 0, 28, 3, 29, 4, 5, 6, + 7, 0, 0, 8, 9, 0, 0, 0, 10, 11, + 0, 12, 13, 14, 15, 0, 0, 0, 16, 17, + 18, 19, 0, 20, 21, 22, 23, 0, 0, 0, + 0, 2, 26, 27, 0, 28, 3, 29, 4, 5, + 6, 7, 0, 0, 8, 9, 0, 0, 0, 0, + 11, 0, 12, 13, 14, 15, 0, 0, 0, 16, + 17, 18, 19, 0, 20, 21, 22, 23, 0, 0, + 0, 0, 2, 26, 27, 0, 28, 3, 29, 4, + 5, 6, 7, 0, 0, 8, 9, 0, 0, 0, + 100, 0, 0, 12, 13, 14, 15, 0, 0, 0, + 16, 17, 18, 19, 0, 20, 21, 22, 23, 0, + 0, 0, 0, 2, 26, 27, 0, 28, 3, 29, + 4, 5, 6, 7, 0, 0, 8, 9, 0, 0, + 0, 0, 0, 0, 12, 13, 14, 15, 0, 0, + 0, 16, 17, 18, 19, 0, 20, 21, 22, 23, + 0, 0, 103, 0, 2, 26, 27, 0, 28, 3, + 29, 4, 5, 6, 7, 0, 0, 8, 9, 0, + 0, 0, 0, 0, 0, 12, 13, 14, 15, 0, + 0, 0, 16, 17, 18, 19, 0, 20, 21, 22, + 23, 0, 0, 0, 0, 0, 26, 27, 14, 28, + 0, 29, 0, 16, 17, 18, 19, 0, 20, 21, + 22, 23, 0, 0, 0, 0, 0, 26, 27, 64, + 65, 66, 67, 0, 68, 0, 69, 70, 0, 0, + 0, 0, 0, 71, 72 }; static const short yycheck[] = { 6, - 7, 9, 110, 26, 32, 0, 9, 26, 37, 9, - 0, 37, 14, 45, 43, 17, 21, 14, 21, 20, - 27, 21, 83, 21, 37, 23, 49, 50, 51, 14, - 14, 54, 17, 14, 37, 37, 44, 37, 24, 25, - 37, 43, 45, 14, 42, 45, 43, 155, 56, 21, - 39, 23, 37, 37, 17, 21, 37, 23, 43, 43, - 88, 21, 43, 21, 21, 23, 37, 90, 91, 21, - 42, 94, 43, 21, 37, 21, 42, 21, 39, 187, - 103, 21, 105, 21, 42, 46, 21, 95, 39, 112, - 97, 21, 36, 37, 38, 46, 21, 92, 93, 21, - 107, 108, 4, 93, 165, 166, 167, 168, 169, 24, - 25, 14, 24, 25, 137, 138, 139, 140, 141, 142, - 35, 36, 37, 35, 36, 148, 134, 150, 36, 148, - 153, 150, 5, 6, 7, 130, 131, 144, 36, 146, - 130, 131, 23, 5, 6, 26, 27, 28, 29, 172, - 31, 32, 33, 34, 161, 162, 14, 180, 181, 40, - 41, 180, 181, 158, 159, 24, 25, 174, 175, 159, - 45, 21, 46, 21, 21, 21, 237, 238, 239, 21, - 21, 21, 46, 44, 21, 21, 22, 23, 15, 212, - 26, 27, 28, 29, 217, 31, 32, 33, 34, 222, - 223, 224, 46, 15, 40, 41, 229, 7, 9, 30, - 15, 44, 15, 44, 221, 7, 4, 240, 15, 30, - 44, 15, 229, 246, 247, 21, 44, 246, 247, 15, - 21, 44, 15, 240, 44, 0, 0, 244, 245, 149, - 1, 248, 3, 30, 236, 172, 183, 8, 203, 10, - 11, 12, 13, 9, -1, 16, -1, 18, 19, -1, - 21, 22, 23, -1, -1, 26, 27, 28, 29, -1, - 31, 32, 33, 34, -1, -1, 37, 38, 3, 40, - 41, -1, 43, 8, 45, 10, 11, 12, 13, -1, - -1, 16, -1, 18, 19, -1, 21, 22, 23, -1, - -1, 26, 27, 28, 29, -1, 31, 32, 33, 34, - -1, -1, 37, -1, 3, 40, 41, -1, 43, 8, - 45, 10, 11, 12, 13, -1, -1, 16, -1, 18, - 19, -1, 21, 22, 23, -1, -1, 26, 27, 28, - 29, -1, 31, 32, 33, 34, -1, -1, -1, -1, - 3, 40, 41, -1, 43, 8, 45, 10, 11, 12, - 13, -1, -1, 16, -1, -1, 19, -1, 21, 22, - 23, -1, -1, 26, 27, 28, 29, -1, 31, 32, - 33, 34, -1, -1, -1, -1, 3, 40, 41, -1, - 43, 8, 45, 10, 11, 12, 13, -1, -1, 16, - -1, 18, -1, -1, 21, 22, 23, -1, -1, 26, - 27, 28, 29, -1, 31, 32, 33, 34, -1, -1, - -1, -1, 3, 40, 41, -1, 43, 8, 45, 10, - 11, 12, 13, -1, -1, 16, -1, -1, -1, -1, - 21, 22, 23, -1, -1, 26, 27, 28, 29, -1, - 31, 32, 33, 34, -1, -1, 37, -1, 3, 40, - 41, -1, 43, 8, 45, 10, 11, 12, 13, -1, - -1, 16, -1, -1, -1, -1, 21, 22, 23, -1, - -1, 26, 27, 28, 29, -1, 31, 32, 33, 34, - -1, -1, -1, -1, -1, 40, 41, -1, 43, -1, - 45, 26, 27, 28, 29, -1, 31, -1, 33, 34, - -1, -1, -1, -1, -1, 40, 41 + 7, 10, 115, 34, 9, 0, 28, 42, 9, 42, + 28, 0, 14, 29, 30, 48, 14, 28, 20, 24, + 20, 44, 29, 24, 40, 41, 14, 88, 51, 14, + 14, 53, 54, 55, 24, 20, 58, 42, 14, 48, + 42, 42, 42, 24, 42, 50, 48, 24, 161, 50, + 48, 23, 61, 24, 42, 26, 24, 42, 42, 24, + 48, 26, 93, 48, 48, 24, 42, 24, 50, 26, + 24, 44, 48, 95, 96, 24, 47, 99, 51, 24, + 193, 26, 47, 5, 6, 7, 108, 24, 110, 24, + 47, 100, 41, 42, 43, 102, 118, 29, 30, 29, + 30, 24, 47, 98, 24, 112, 113, 24, 97, 98, + 171, 172, 173, 174, 175, 24, 29, 30, 5, 6, + 44, 143, 144, 145, 146, 147, 148, 40, 41, 42, + 42, 140, 154, 4, 156, 41, 154, 159, 156, 41, + 14, 136, 137, 150, 14, 152, 50, 136, 137, 18, + 51, 24, 24, 49, 51, 15, 178, 24, 24, 24, + 167, 168, 24, 24, 186, 187, 51, 24, 186, 187, + 165, 15, 7, 180, 181, 164, 165, 9, 24, 25, + 26, 35, 243, 244, 245, 31, 32, 33, 34, 15, + 36, 37, 38, 39, 49, 15, 218, 49, 7, 45, + 46, 223, 4, 24, 35, 15, 228, 229, 230, 49, + 15, 49, 24, 235, 15, 49, 15, 0, 0, 49, + 227, 155, 242, 178, 246, 32, 209, 189, 235, 10, + 252, 253, -1, -1, 252, 253, -1, -1, -1, 246, + -1, -1, -1, 250, 251, -1, 1, 254, 3, -1, + -1, -1, -1, 8, -1, 10, 11, 12, 13, -1, + -1, 16, 17, -1, -1, -1, 21, 22, -1, 24, + 25, 26, 27, -1, -1, -1, 31, 32, 33, 34, + -1, 36, 37, 38, 39, -1, -1, 42, 43, 3, + 45, 46, -1, 48, 8, 50, 10, 11, 12, 13, + -1, -1, 16, 17, -1, -1, -1, 21, 22, -1, + 24, 25, 26, 27, -1, -1, -1, 31, 32, 33, + 34, -1, 36, 37, 38, 39, -1, -1, 42, -1, + 3, 45, 46, -1, 48, 8, 50, 10, 11, 12, + 13, -1, -1, 16, 17, -1, -1, -1, 21, 22, + -1, 24, 25, 26, 27, -1, -1, -1, 31, 32, + 33, 34, -1, 36, 37, 38, 39, -1, -1, -1, + -1, 3, 45, 46, -1, 48, 8, 50, 10, 11, + 12, 13, -1, -1, 16, 17, -1, -1, -1, -1, + 22, -1, 24, 25, 26, 27, -1, -1, -1, 31, + 32, 33, 34, -1, 36, 37, 38, 39, -1, -1, + -1, -1, 3, 45, 46, -1, 48, 8, 50, 10, + 11, 12, 13, -1, -1, 16, 17, -1, -1, -1, + 21, -1, -1, 24, 25, 26, 27, -1, -1, -1, + 31, 32, 33, 34, -1, 36, 37, 38, 39, -1, + -1, -1, -1, 3, 45, 46, -1, 48, 8, 50, + 10, 11, 12, 13, -1, -1, 16, 17, -1, -1, + -1, -1, -1, -1, 24, 25, 26, 27, -1, -1, + -1, 31, 32, 33, 34, -1, 36, 37, 38, 39, + -1, -1, 42, -1, 3, 45, 46, -1, 48, 8, + 50, 10, 11, 12, 13, -1, -1, 16, 17, -1, + -1, -1, -1, -1, -1, 24, 25, 26, 27, -1, + -1, -1, 31, 32, 33, 34, -1, 36, 37, 38, + 39, -1, -1, -1, -1, -1, 45, 46, 26, 48, + -1, 50, -1, 31, 32, 33, 34, -1, 36, 37, + 38, 39, -1, -1, -1, -1, -1, 45, 46, 31, + 32, 33, 34, -1, 36, -1, 38, 39, -1, -1, + -1, -1, -1, 45, 46 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/local/lib/bison.simple" +#line 3 "/usr/share/misc/bison.simple" /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. @@ -766,7 +800,7 @@ __yy_memcpy (char *to, char *from, int count) #endif #endif -#line 196 "/usr/local/lib/bison.simple" +#line 196 "/usr/share/misc/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. @@ -1071,7 +1105,7 @@ yyreduce: switch (yyn) { case 1: -#line 215 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 233 "/usr/homes/chet/src/bash/src/parse.y" { /* Case of regular command. Discard the error safety net,and return the command just parsed. */ @@ -1082,7 +1116,7 @@ case 1: ; break;} case 2: -#line 224 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 242 "/usr/homes/chet/src/bash/src/parse.y" { /* Case of regular command, but not a very interesting one. Return a NULL command. */ @@ -1091,7 +1125,7 @@ case 2: ; break;} case 3: -#line 231 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 249 "/usr/homes/chet/src/bash/src/parse.y" { /* Error during parsing. Return NULL command. */ global_command = (COMMAND *)NULL; @@ -1108,7 +1142,7 @@ case 3: ; break;} case 4: -#line 246 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 264 "/usr/homes/chet/src/bash/src/parse.y" { /* Case of EOF seen by itself. Do ignoreeof or not. */ @@ -1118,57 +1152,57 @@ case 4: ; break;} case 5: -#line 256 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 274 "/usr/homes/chet/src/bash/src/parse.y" { yyval.word_list = make_word_list (yyvsp[0].word, (WORD_LIST *)NULL); ; break;} case 6: -#line 258 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 276 "/usr/homes/chet/src/bash/src/parse.y" { yyval.word_list = make_word_list (yyvsp[0].word, yyvsp[-1].word_list); ; break;} case 7: -#line 262 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 280 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (1, r_output_direction, redir); ; break;} case 8: -#line 267 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 285 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (0, r_input_direction, redir); ; break;} case 9: -#line 272 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 290 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (yyvsp[-2].number, r_output_direction, redir); ; break;} case 10: -#line 277 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 295 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (yyvsp[-2].number, r_input_direction, redir); ; break;} case 11: -#line 282 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 300 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (1, r_appending_to, redir); ; break;} case 12: -#line 287 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 305 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (yyvsp[-2].number, r_appending_to, redir); ; break;} case 13: -#line 292 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 310 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (0, r_reading_until, redir); @@ -1176,7 +1210,7 @@ case 13: ; break;} case 14: -#line 298 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 316 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (yyvsp[-2].number, r_reading_until, redir); @@ -1184,63 +1218,63 @@ case 14: ; break;} case 15: -#line 304 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 322 "/usr/homes/chet/src/bash/src/parse.y" { redir.dest = yyvsp[0].number; yyval.redirect = make_redirection (0, r_duplicating_input, redir); ; break;} case 16: -#line 309 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 327 "/usr/homes/chet/src/bash/src/parse.y" { redir.dest = yyvsp[0].number; yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_input, redir); ; break;} case 17: -#line 314 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 332 "/usr/homes/chet/src/bash/src/parse.y" { redir.dest = yyvsp[0].number; yyval.redirect = make_redirection (1, r_duplicating_output, redir); ; break;} case 18: -#line 319 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 337 "/usr/homes/chet/src/bash/src/parse.y" { redir.dest = yyvsp[0].number; yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_output, redir); ; break;} case 19: -#line 324 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 342 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (0, r_duplicating_input_word, redir); ; break;} case 20: -#line 329 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 347 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_input_word, redir); ; break;} case 21: -#line 334 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 352 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (1, r_duplicating_output_word, redir); ; break;} case 22: -#line 339 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 357 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_output_word, redir); ; break;} case 23: -#line 344 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 362 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection @@ -1249,7 +1283,7 @@ case 23: ; break;} case 24: -#line 351 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 369 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection @@ -1258,88 +1292,88 @@ case 24: ; break;} case 25: -#line 358 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 376 "/usr/homes/chet/src/bash/src/parse.y" { redir.dest = 0L; yyval.redirect = make_redirection (1, r_close_this, redir); ; break;} case 26: -#line 363 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 381 "/usr/homes/chet/src/bash/src/parse.y" { redir.dest = 0L; yyval.redirect = make_redirection (yyvsp[-2].number, r_close_this, redir); ; break;} case 27: -#line 368 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 386 "/usr/homes/chet/src/bash/src/parse.y" { redir.dest = 0L; yyval.redirect = make_redirection (0, r_close_this, redir); ; break;} case 28: -#line 373 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 391 "/usr/homes/chet/src/bash/src/parse.y" { redir.dest = 0L; yyval.redirect = make_redirection (yyvsp[-2].number, r_close_this, redir); ; break;} case 29: -#line 378 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 396 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (1, r_err_and_out, redir); ; break;} case 30: -#line 383 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 401 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (yyvsp[-2].number, r_input_output, redir); ; break;} case 31: -#line 388 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 406 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (0, r_input_output, redir); ; break;} case 32: -#line 393 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 411 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (1, r_output_force, redir); ; break;} case 33: -#line 398 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 416 "/usr/homes/chet/src/bash/src/parse.y" { redir.filename = yyvsp[0].word; yyval.redirect = make_redirection (yyvsp[-2].number, r_output_force, redir); ; break;} case 34: -#line 405 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 423 "/usr/homes/chet/src/bash/src/parse.y" { yyval.element.word = yyvsp[0].word; yyval.element.redirect = 0; ; break;} case 35: -#line 407 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 425 "/usr/homes/chet/src/bash/src/parse.y" { yyval.element.word = yyvsp[0].word; yyval.element.redirect = 0; ; break;} case 36: -#line 409 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 427 "/usr/homes/chet/src/bash/src/parse.y" { yyval.element.redirect = yyvsp[0].redirect; yyval.element.word = 0; ; break;} case 37: -#line 413 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 431 "/usr/homes/chet/src/bash/src/parse.y" { yyval.redirect = yyvsp[0].redirect; ; break;} case 38: -#line 417 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 435 "/usr/homes/chet/src/bash/src/parse.y" { register REDIRECT *t; @@ -1350,23 +1384,23 @@ case 38: ; break;} case 39: -#line 428 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 446 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_simple_command (yyvsp[0].element, (COMMAND *)NULL); ; break;} case 40: -#line 430 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 448 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_simple_command (yyvsp[0].element, yyvsp[-1].command); ; break;} case 41: -#line 434 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 452 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = clean_simple_command (yyvsp[0].command); ; break;} case 42: -#line 436 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 454 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} case 43: -#line 438 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 456 "/usr/homes/chet/src/bash/src/parse.y" { COMMAND *tc; @@ -1395,205 +1429,221 @@ case 43: ; break;} case 44: -#line 467 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 485 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} case 45: -#line 469 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 487 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} case 46: -#line 471 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 489 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_while_command (yyvsp[-3].command, yyvsp[-1].command); ; break;} case 47: -#line 473 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 491 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_until_command (yyvsp[-3].command, yyvsp[-1].command); ; break;} case 48: -#line 475 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 493 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} case 49: -#line 477 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 495 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} case 50: -#line 479 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 497 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} case 51: -#line 481 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 499 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} case 52: -#line 483 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 501 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} case 53: -#line 487 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" -{ yyval.command = make_for_command (yyvsp[-4].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); ; +#line 503 "/usr/homes/chet/src/bash/src/parse.y" +{ yyval.command = yyvsp[0].command; ; break;} case 54: -#line 489 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" -{ yyval.command = make_for_command (yyvsp[-4].word, add_string_to_list ("$@", (WORD_LIST *)NULL), yyvsp[-1].command); ; +#line 505 "/usr/homes/chet/src/bash/src/parse.y" +{ yyval.command = yyvsp[0].command; ; break;} case 55: -#line 491 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" -{ yyval.command = make_for_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); ; +#line 509 "/usr/homes/chet/src/bash/src/parse.y" +{ yyval.command = make_for_command (yyvsp[-4].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); ; break;} case 56: -#line 493 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" -{ yyval.command = make_for_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); ; +#line 511 "/usr/homes/chet/src/bash/src/parse.y" +{ yyval.command = make_for_command (yyvsp[-4].word, add_string_to_list ("$@", (WORD_LIST *)NULL), yyvsp[-1].command); ; break;} case 57: -#line 495 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" -{ yyval.command = make_for_command (yyvsp[-8].word, REVERSE_LIST (yyvsp[-5].word_list, WORD_LIST *), yyvsp[-1].command); ; +#line 513 "/usr/homes/chet/src/bash/src/parse.y" +{ yyval.command = make_for_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); ; break;} case 58: -#line 497 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" -{ yyval.command = make_for_command (yyvsp[-8].word, REVERSE_LIST (yyvsp[-5].word_list, WORD_LIST *), yyvsp[-1].command); ; +#line 515 "/usr/homes/chet/src/bash/src/parse.y" +{ yyval.command = make_for_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); ; break;} case 59: -#line 501 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 517 "/usr/homes/chet/src/bash/src/parse.y" +{ yyval.command = make_for_command (yyvsp[-8].word, REVERSE_LIST (yyvsp[-5].word_list, WORD_LIST *), yyvsp[-1].command); ; + break;} +case 60: +#line 519 "/usr/homes/chet/src/bash/src/parse.y" +{ yyval.command = make_for_command (yyvsp[-8].word, REVERSE_LIST (yyvsp[-5].word_list, WORD_LIST *), yyvsp[-1].command); ; + break;} +case 61: +#line 523 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_select_command (yyvsp[-4].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); ; break;} -case 60: -#line 505 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 62: +#line 527 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_select_command (yyvsp[-4].word, add_string_to_list ("$@", (WORD_LIST *)NULL), yyvsp[-1].command); ; break;} -case 61: -#line 509 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 63: +#line 531 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_select_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); ; break;} -case 62: -#line 513 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 64: +#line 535 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_select_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); ; break;} -case 63: -#line 517 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 65: +#line 539 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_select_command (yyvsp[-8].word, (WORD_LIST *)reverse_list (yyvsp[-5].word_list), yyvsp[-1].command); ; break;} -case 64: -#line 521 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 66: +#line 543 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_select_command (yyvsp[-8].word, (WORD_LIST *)reverse_list (yyvsp[-5].word_list), yyvsp[-1].command); ; break;} -case 65: -#line 527 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 67: +#line 549 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_case_command (yyvsp[-4].word, (PATTERN_LIST *)NULL); ; break;} -case 66: -#line 529 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 68: +#line 551 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_case_command (yyvsp[-5].word, yyvsp[-2].pattern); ; break;} -case 67: -#line 531 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 69: +#line 553 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_case_command (yyvsp[-4].word, yyvsp[-1].pattern); ; break;} -case 68: -#line 535 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 70: +#line 557 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_function_def (yyvsp[-4].word, yyvsp[0].command, function_dstart, function_bstart); ; break;} -case 69: -#line 539 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 71: +#line 561 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_function_def (yyvsp[-4].word, yyvsp[0].command, function_dstart, function_bstart); ; break;} -case 70: -#line 542 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 72: +#line 564 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_function_def (yyvsp[-2].word, yyvsp[0].command, function_dstart, function_bstart); ; break;} -case 71: -#line 546 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 73: +#line 568 "/usr/homes/chet/src/bash/src/parse.y" { yyvsp[-1].command->flags |= CMD_WANT_SUBSHELL; yyval.command = yyvsp[-1].command; ; break;} -case 72: -#line 550 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 74: +#line 572 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_if_command (yyvsp[-3].command, yyvsp[-1].command, (COMMAND *)NULL); ; break;} -case 73: -#line 552 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 75: +#line 574 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_if_command (yyvsp[-5].command, yyvsp[-3].command, yyvsp[-1].command); ; break;} -case 74: -#line 554 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 76: +#line 576 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_if_command (yyvsp[-4].command, yyvsp[-2].command, yyvsp[-1].command); ; break;} -case 75: -#line 559 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 77: +#line 581 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_group_command (yyvsp[-1].command); ; break;} -case 76: -#line 563 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 78: +#line 585 "/usr/homes/chet/src/bash/src/parse.y" +{ yyval.command = make_arith_command (yyvsp[0].word_list); ; + break;} +case 79: +#line 589 "/usr/homes/chet/src/bash/src/parse.y" +{ yyval.command = yyvsp[-1].command; ; + break;} +case 80: +#line 593 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_if_command (yyvsp[-2].command, yyvsp[0].command, (COMMAND *)NULL); ; break;} -case 77: -#line 565 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 81: +#line 595 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_if_command (yyvsp[-4].command, yyvsp[-2].command, yyvsp[0].command); ; break;} -case 78: -#line 567 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 82: +#line 597 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = make_if_command (yyvsp[-3].command, yyvsp[-1].command, yyvsp[0].command); ; break;} -case 80: -#line 572 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 84: +#line 602 "/usr/homes/chet/src/bash/src/parse.y" { yyvsp[0].pattern->next = yyvsp[-1].pattern; yyval.pattern = yyvsp[0].pattern; ; break;} -case 81: -#line 576 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 85: +#line 606 "/usr/homes/chet/src/bash/src/parse.y" { yyval.pattern = make_pattern_list (yyvsp[-2].word_list, yyvsp[0].command); ; break;} -case 82: -#line 578 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 86: +#line 608 "/usr/homes/chet/src/bash/src/parse.y" { yyval.pattern = make_pattern_list (yyvsp[-2].word_list, (COMMAND *)NULL); ; break;} -case 83: -#line 580 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 87: +#line 610 "/usr/homes/chet/src/bash/src/parse.y" { yyval.pattern = make_pattern_list (yyvsp[-2].word_list, yyvsp[0].command); ; break;} -case 84: -#line 582 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 88: +#line 612 "/usr/homes/chet/src/bash/src/parse.y" { yyval.pattern = make_pattern_list (yyvsp[-2].word_list, (COMMAND *)NULL); ; break;} -case 86: -#line 587 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 90: +#line 617 "/usr/homes/chet/src/bash/src/parse.y" { yyvsp[-1].pattern->next = yyvsp[-2].pattern; yyval.pattern = yyvsp[-1].pattern; ; break;} -case 87: -#line 591 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 91: +#line 621 "/usr/homes/chet/src/bash/src/parse.y" { yyval.word_list = make_word_list (yyvsp[0].word, (WORD_LIST *)NULL); ; break;} -case 88: -#line 593 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 92: +#line 623 "/usr/homes/chet/src/bash/src/parse.y" { yyval.word_list = make_word_list (yyvsp[0].word, yyvsp[-2].word_list); ; break;} -case 89: -#line 602 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 93: +#line 632 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; if (need_here_doc) gather_here_documents (); ; break;} -case 91: -#line 611 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 95: +#line 641 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} -case 93: -#line 618 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 97: +#line 648 "/usr/homes/chet/src/bash/src/parse.y" { if (yyvsp[-2].command->type == cm_connection) yyval.command = connect_async_list (yyvsp[-2].command, (COMMAND *)NULL, '&'); @@ -1601,16 +1651,16 @@ case 93: yyval.command = command_connect (yyvsp[-2].command, (COMMAND *)NULL, '&'); ; break;} -case 95: -#line 629 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 99: +#line 659 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, AND_AND); ; break;} -case 96: -#line 631 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 100: +#line 661 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, OR_OR); ; break;} -case 97: -#line 633 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 101: +#line 663 "/usr/homes/chet/src/bash/src/parse.y" { if (yyvsp[-3].command->type == cm_connection) yyval.command = connect_async_list (yyvsp[-3].command, yyvsp[0].command, '&'); @@ -1618,28 +1668,28 @@ case 97: yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, '&'); ; break;} -case 98: -#line 640 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 102: +#line 670 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, ';'); ; break;} -case 99: -#line 642 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 103: +#line 672 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, ';'); ; break;} -case 100: -#line 644 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 104: +#line 674 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} -case 106: -#line 663 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 110: +#line 693 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; if (need_here_doc) gather_here_documents (); ; break;} -case 107: -#line 669 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 111: +#line 699 "/usr/homes/chet/src/bash/src/parse.y" { if (yyvsp[-1].command->type == cm_connection) yyval.command = connect_async_list (yyvsp[-1].command, (COMMAND *)NULL, '&'); @@ -1649,24 +1699,24 @@ case 107: gather_here_documents (); ; break;} -case 108: -#line 678 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 112: +#line 708 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[-1].command; if (need_here_doc) gather_here_documents (); ; break;} -case 109: -#line 686 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 113: +#line 716 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, AND_AND); ; break;} -case 110: -#line 688 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 114: +#line 718 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, OR_OR); ; break;} -case 111: -#line 690 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 115: +#line 720 "/usr/homes/chet/src/bash/src/parse.y" { if (yyvsp[-2].command->type == cm_connection) yyval.command = connect_async_list (yyvsp[-2].command, yyvsp[0].command, '&'); @@ -1674,65 +1724,65 @@ case 111: yyval.command = command_connect (yyvsp[-2].command, yyvsp[0].command, '&'); ; break;} -case 112: -#line 697 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 116: +#line 727 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = command_connect (yyvsp[-2].command, yyvsp[0].command, ';'); ; break;} -case 113: -#line 700 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 117: +#line 730 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} -case 114: -#line 704 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 118: +#line 734 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} -case 115: -#line 706 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 119: +#line 736 "/usr/homes/chet/src/bash/src/parse.y" { yyvsp[0].command->flags |= CMD_INVERT_RETURN; yyval.command = yyvsp[0].command; ; break;} -case 116: -#line 711 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 120: +#line 741 "/usr/homes/chet/src/bash/src/parse.y" { yyvsp[0].command->flags |= yyvsp[-1].number; yyval.command = yyvsp[0].command; ; break;} -case 117: -#line 716 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 121: +#line 746 "/usr/homes/chet/src/bash/src/parse.y" { yyvsp[0].command->flags |= yyvsp[-2].number; yyval.command = yyvsp[0].command; ; break;} -case 118: -#line 721 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 122: +#line 751 "/usr/homes/chet/src/bash/src/parse.y" { yyvsp[0].command->flags |= yyvsp[-1].number|CMD_INVERT_RETURN; yyval.command = yyvsp[0].command; ; break;} -case 119: -#line 729 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 123: +#line 759 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, '|'); ; break;} -case 120: -#line 731 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 124: +#line 761 "/usr/homes/chet/src/bash/src/parse.y" { yyval.command = yyvsp[0].command; ; break;} -case 121: -#line 735 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 125: +#line 765 "/usr/homes/chet/src/bash/src/parse.y" { yyval.number = CMD_TIME_PIPELINE; ; break;} -case 122: -#line 737 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +case 126: +#line 767 "/usr/homes/chet/src/bash/src/parse.y" { yyval.number = CMD_TIME_PIPELINE|CMD_TIME_POSIX; ; break;} } /* the action file gets copied in in place of this dollarsign */ -#line 498 "/usr/local/lib/bison.simple" +#line 498 "/usr/share/misc/bison.simple" yyvsp -= yylen; yyssp -= yylen; @@ -1928,7 +1978,7 @@ yyerrhandle: yystate = yyn; goto yynewstate; } -#line 739 "/usr/homes/chet/src/bash/bash-2.01.1/parse.y" +#line 769 "/usr/homes/chet/src/bash/src/parse.y" /* Possible states for the parser that require it to do special things. */ @@ -1940,6 +1990,8 @@ yyerrhandle: #define PST_SUBSHELL 0x020 /* ( ... ) subshell */ #define PST_CMDSUBST 0x040 /* $( ... ) command substitution */ #define PST_CASESTMT 0x080 /* parsing a case statement */ +#define PST_CONDCMD 0x100 /* parsing a [[...]] command */ +#define PST_CONDEXPR 0x200 /* parsing the guts of [[...]] */ /* Initial size to allocate for tokens, and the amount to grow them by. */ @@ -2277,6 +2329,11 @@ typedef struct stream_saver { /* The globally known line number. */ int line_number = 0; +#if defined (COND_COMMAND) +static int cond_lineno; +static int cond_token; +#endif + STREAM_SAVER *stream_list = (STREAM_SAVER *)NULL; void @@ -2291,10 +2348,8 @@ push_stream (reset_lineno) saver->bstream = (BUFFERED_STREAM *)NULL; /* If we have a buffered stream, clear out buffers[fd]. */ if (bash_input.type == st_bstream && bash_input.location.buffered_fd >= 0) - { - saver->bstream = buffers[bash_input.location.buffered_fd]; - buffers[bash_input.location.buffered_fd] = (BUFFERED_STREAM *)NULL; - } + saver->bstream = set_buffered_stream (bash_input.location.buffered_fd, + (BUFFERED_STREAM *)NULL); #endif /* BUFFERED_INPUT */ saver->line = line_number; @@ -2340,7 +2395,7 @@ pop_stream () saver->bstream->b_fd = default_buffered_input; } } - buffers[bash_input.location.buffered_fd] = saver->bstream; + set_buffered_stream (bash_input.location.buffered_fd, saver->bstream); } #endif /* BUFFERED_INPUT */ @@ -2373,7 +2428,11 @@ stream_on_stack (type) * everything between a `;;' and the next `)' or `esac' */ -#if defined (ALIAS) +#if defined (ALIAS) || defined (DPAREN_ARITHMETIC) + +#if !defined (ALIAS) +typedef void *alias_t; +#endif #define END_OF_ALIAS 0 @@ -2390,7 +2449,9 @@ typedef struct string_saver { struct string_saver *next; int expand_alias; /* Value to set expand_alias to when string is popped. */ char *saved_line; +#if defined (ALIAS) alias_t *expander; /* alias that caused this line to be pushed. */ +#endif int saved_line_size, saved_line_index, saved_line_terminator; } STRING_SAVER; @@ -2417,12 +2478,16 @@ push_string (s, expand, ap) temp->saved_line_size = shell_input_line_size; temp->saved_line_index = shell_input_line_index; temp->saved_line_terminator = shell_input_line_terminator; +#if defined (ALIAS) temp->expander = ap; +#endif temp->next = pushed_string_list; pushed_string_list = temp; +#if defined (ALIAS) if (ap) ap->flags |= AL_BEINGEXPANDED; +#endif shell_input_line = s; shell_input_line_size = strlen (s); @@ -2456,8 +2521,10 @@ pop_string () t = pushed_string_list; pushed_string_list = pushed_string_list->next; +#if defined (ALIAS) if (t->expander) t->expander->flags &= ~AL_BEINGEXPANDED; +#endif free ((char *)t); } @@ -2471,14 +2538,17 @@ free_string_list () { t1 = t->next; FREE (t->saved_line); - t->expander->flags &= ~AL_BEINGEXPANDED; +#if defined (ALIAS) + if (t->expander) + t->expander->flags &= ~AL_BEINGEXPANDED; +#endif free ((char *)t); t = t1; } pushed_string_list = (STRING_SAVER *)NULL; } -#endif /* ALIAS */ +#endif /* ALIAS || DPAREN_ARITHMETIC */ /* Return a line of text, taken from wherever yylex () reads input. If there is no more input, then we return NULL. If REMOVE_QUOTED_NEWLINE @@ -2603,6 +2673,10 @@ STRING_INT_ALIST word_token_alist[] = { { "{", '{' }, { "}", '}' }, { "!", BANG }, +#if defined (COND_COMMAND) + { "[[", COND_START }, + { "]]", COND_END }, +#endif { (char *)NULL, 0} }; @@ -2650,16 +2724,16 @@ shell_getc (remove_quoted_newline) QUIT; -#if defined (ALIAS) +#if defined (ALIAS) || defined (DPAREN_ARITHMETIC) /* If shell_input_line[shell_input_line_index] == 0, but there is something on the pushed list of strings, then we don't want to go off and get another line. We let the code down below handle it. */ if (!shell_input_line || ((!shell_input_line[shell_input_line_index]) && (pushed_string_list == (STRING_SAVER *)NULL))) -#else /* !ALIAS */ +#else /* !ALIAS && !DPAREN_ARITHMETIC */ if (!shell_input_line || !shell_input_line[shell_input_line_index]) -#endif /* !ALIAS */ +#endif /* !ALIAS && !DPAREN_ARITHMETIC */ { line_number++; @@ -2810,7 +2884,7 @@ shell_getc (remove_quoted_newline) goto restart_read; } -#if defined (ALIAS) +#if defined (ALIAS) || defined (DPAREN_ARITHMETIC) /* If C is NULL, we have reached the end of the current input string. If pushed_string_list is non-empty, it's time to pop to the previous string because we have fully consumed the result of the last alias expansion. @@ -2832,7 +2906,7 @@ shell_getc (remove_quoted_newline) c = ' '; } } -#endif /* ALIAS */ +#endif /* ALIAS || DPAREN_ARITHMETIC */ if (!c && shell_input_line_terminator == EOF) return ((shell_input_line_index != 0) ? '\n' : EOF); @@ -2983,10 +3057,16 @@ static int open_brace_count; { \ if ((parser_state & PST_CASEPAT) && (word_token_alist[i].token != ESAC)) \ break; \ + if (word_token_alist[i].token == TIME) \ + break; \ if (word_token_alist[i].token == ESAC) \ parser_state &= ~(PST_CASEPAT|PST_CASESTMT); \ else if (word_token_alist[i].token == CASE) \ parser_state |= PST_CASESTMT; \ + else if (word_token_alist[i].token == COND_END) \ + parser_state &= ~(PST_CONDCMD|PST_CONDEXPR); \ + else if (word_token_alist[i].token == COND_START) \ + parser_state |= PST_CONDCMD; \ else if (word_token_alist[i].token == '{') \ open_brace_count++; \ else if (word_token_alist[i].token == '}' && open_brace_count) \ @@ -3040,6 +3120,27 @@ alias_expand_token (token) } #endif /* ALIAS */ +static int +time_command_acceptable () +{ +#if defined (COMMAND_TIMING) + switch (last_read_token) + { + case 0: + case ';': + case '\n': + case AND_AND: + case OR_OR: + case '&': + return 1; + default: + return 0; + } +#else + return 0; +#endif /* COMMAND_TIMING */ +} + /* Handle special cases of token recognition: IN is recognized if the last token was WORD and the token before that was FOR or CASE or SELECT. @@ -3054,6 +3155,14 @@ alias_expand_token (token) before that was FUNCTION. `}' is recognized if there is an unclosed `{' prsent. + + `-p' is returned as TIMEOPT if the last read token was TIME. + + ']]' is returned as COND_END if the parser is currently parsing + a conditional expression ((parser_state & PST_CONDEXPR) != 0) + + `time' is returned as TIME if and only if it is immediately + preceded by one of `;', `\n', `||', `&&', or `&'. */ static int @@ -3119,9 +3228,21 @@ special_case_tokens (token) return ('}'); } +#if defined (COMMAND_TIMING) /* Handle -p after `time'. */ if (last_read_token == TIME && token[0] == '-' && token[1] == 'p' && !token[2]) return (TIMEOPT); +#endif + +#if defined (COMMAND_TIMING) + if (STREQ (token, "time") && time_command_acceptable ()) + return (TIME); +#endif /* COMMAND_TIMING */ + +#if defined (COND_COMMAND) /* [[ */ + if ((parser_state & PST_CONDEXPR) && token[0] == ']' && token[1] == ']' && token[2] == '\0') + return (COND_END); +#endif return (-1); } @@ -3136,13 +3257,10 @@ reset_parser () parser_state = 0; -#if defined (ALIAS) +#if defined (ALIAS) || defined (DPAREN_ARITHMETIC) if (pushed_string_list) - { - free_string_list (); - pushed_string_list = (STRING_SAVER *)NULL; - } -#endif /* ALIAS */ + free_string_list (); +#endif /* ALIAS || DPAREN_ARITHMETIC */ if (shell_input_line) { @@ -3186,6 +3304,26 @@ read_token (command) return (result); } +#if defined (COND_COMMAND) + if ((parser_state & (PST_CONDCMD|PST_CONDEXPR)) == PST_CONDCMD) + { + cond_lineno = line_number; + parser_state |= PST_CONDEXPR; + yylval.command = parse_cond_command (); + if (cond_token != COND_END) + { + if (EOF_Reached && cond_token != COND_ERROR) /* [[ */ + parser_error (cond_lineno, "unexpected EOF while looking for `]]'"); + else if (cond_token != COND_ERROR) + parser_error (cond_lineno, "syntax error in conditional expression"); + return (-1); + } + token_to_read = COND_END; + parser_state &= ~(PST_CONDEXPR|PST_CONDCMD); + return (COND_CMD); + } +#endif + #if defined (ALIAS) /* This is a place to jump back to once we have successfully expanded a token with an alias and pushed the string with push_string () */ @@ -3273,17 +3411,17 @@ read_token (command) { int cmdtyp, sline; char *wval; + WORD_DESC *wd; sline = line_number; cmdtyp = parse_arith_cmd (&wval); if (cmdtyp == 1) /* arithmetic command */ { - word_desc_to_read = make_word (wval); - word_desc_to_read->flags = W_QUOTED; - token_to_read = WORD; - free (wval); - yylval.word = make_word ("let"); - return (WORD); + wd = make_word (wval); + wd->flags = W_QUOTED; + yylval.word_list = make_word_list (wd, (WORD_LIST *)NULL); + free (wval); /* make_word copies it */ + return (ARITH_CMD); } else if (cmdtyp == 0) /* nested subshell */ { @@ -3555,6 +3693,175 @@ parse_arith_cmd (ep) } #endif /* DPAREN_ARITHMETIC */ +#if defined (COND_COMMAND) +static COND_COM *cond_term (); +static COND_COM *cond_and (); +static COND_COM *cond_or (); +static COND_COM *cond_expr (); + +static COND_COM * +cond_expr () +{ + return (cond_or ()); +} + +static COND_COM * +cond_or () +{ + COND_COM *l, *r; + + l = cond_and (); + if (cond_token == OR_OR) + { + r = cond_or (); + l = make_cond_node (COND_OR, (WORD_DESC *)NULL, l, r); + } + return l; +} + +static COND_COM * +cond_and () +{ + COND_COM *l, *r; + + l = cond_term (); + if (cond_token == AND_AND) + { + r = cond_and (); + l = make_cond_node (COND_AND, (WORD_DESC *)NULL, l, r); + } + return l; +} + +static int +cond_skip_newlines () +{ + while ((cond_token = read_token (READ)) == '\n') + { + if (interactive && (bash_input.type == st_stdin || bash_input.type == st_stream)) + prompt_again (); + } + return (cond_token); +} + +#define COND_RETURN_ERROR() \ + do { cond_token = COND_ERROR; return ((COND_COM *)NULL); } while (0) + +static COND_COM * +cond_term () +{ + WORD_DESC *op; + COND_COM *term, *tleft, *tright; + int tok, lineno; + + /* Read a token. It can be a left paren, a `!', a unary operator, or a + word that should be the first argument of a binary operator. Start by + skipping newlines, since this is a compound command. */ + tok = cond_skip_newlines (); + lineno = line_number; + if (tok == COND_END) + { + COND_RETURN_ERROR (); + } + else if (tok == '(') + { + term = cond_expr (); + if (cond_token != ')') + { + if (term) + dispose_cond_node (term); /* ( */ + parser_error (lineno, "expected `)'"); + COND_RETURN_ERROR (); + } + term = make_cond_node (COND_EXPR, (WORD_DESC *)NULL, term, (COND_COM *)NULL); + (void)cond_skip_newlines (); + } + else if (tok == BANG || (tok == WORD && (yylval.word->word[0] == '!' && yylval.word->word[1] == '\0'))) + { + if (tok == WORD) + dispose_word (yylval.word); /* not needed */ + term = cond_term (); + if (term) + term->flags |= CMD_INVERT_RETURN; + } + else if (tok == WORD && test_unop (yylval.word->word)) + { + op = yylval.word; + tok = read_token (READ); + if (tok == WORD) + { + tleft = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL); + term = make_cond_node (COND_UNARY, op, tleft, (COND_COM *)NULL); + } + else + { + dispose_word (op); + parser_error (line_number, "unexpected argument to conditional unary operator"); + COND_RETURN_ERROR (); + } + + (void)cond_skip_newlines (); + } + else /* left argument to binary operator */ + { + /* lhs */ + tleft = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL); + + /* binop */ + tok = read_token (READ); + if (tok == WORD && test_binop (yylval.word->word)) + op = yylval.word; + else if (tok == '<' || tok == '>') + op = make_word_from_token (tok); + else if (tok == COND_END || tok == AND_AND || tok == OR_OR) + { + /* Special case. [[ x ]] is equivalent to [[ -n x ]], just like + the test command. Similarly for [[ x && expr ]] or + [[ x || expr ]] */ + op = make_word ("-n"); + term = make_cond_node (COND_UNARY, op, tleft, (COND_COM *)NULL); + cond_token = tok; + return (term); + } + else + { + parser_error (line_number, "conditional binary operator expected"); + dispose_cond_node (tleft); + COND_RETURN_ERROR (); + } + + /* rhs */ + tok = read_token (READ); + if (tok == WORD) + { + tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL); + term = make_cond_node (COND_BINARY, op, tleft, tright); + } + else + { + parser_error (line_number, "unexpected argument to conditional binary operator"); + dispose_cond_node (tleft); + dispose_word (op); + COND_RETURN_ERROR (); + } + + (void)cond_skip_newlines (); + } + return (term); +} + +/* This is kind of bogus -- we slip a mini recursive-descent parser in + here to handle the conditional statement syntax. */ +static COMMAND * +parse_cond_command () +{ + COND_COM *cexp; + + cexp = cond_expr (); + return (make_cond_command (cexp)); +} +#endif + static int read_token_word (character) int character; @@ -3651,6 +3958,34 @@ read_token_word (character) goto next_character; } +#ifdef EXTENDED_GLOB + /* Parse a ksh-style extended pattern matching specification. */ + if (extended_glob && PATTERN_CHAR(character)) + { + peek_char = shell_getc (1); + if (peek_char == '(') /* ) */ + { + push_delimiter (dstack, peek_char); + ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0); + pop_delimiter (dstack); + if (ttok == &matched_pair_error) + return -1; /* Bail immediately. */ + RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2, + token_buffer_size, + TOKEN_DEFAULT_GROW_SIZE); + token[token_index++] = character; + token[token_index++] = peek_char; + strcpy (token + token_index, ttok); + token_index += ttoklen; + FREE (ttok); + dollar_present = all_digits = 0; + goto next_character; + } + else + shell_ungetc (peek_char); + } +#endif /* EXTENDED_GLOB */ + /* If the delimiter character is not single quote, parse some of the shell expansions that must be read as a single word. */ #if defined (PROCESS_SUBSTITUTION) @@ -3696,13 +4031,16 @@ read_token_word (character) /* This handles $'...' and $"..." new-style quoted strings. */ else if (character == '$' && (peek_char == '\'' || peek_char == '"')) { + int first_line; + + first_line = line_number; ttok = parse_matched_pair (peek_char, peek_char, peek_char, &ttoklen, 0); if (ttok == &matched_pair_error) return -1; if (peek_char == '\'') ttrans = ansiexpand (ttok, 0, ttoklen - 1, &ttranslen); else - ttrans = localeexpand (ttok, 0, ttoklen - 1, &ttranslen); + ttrans = localeexpand (ttok, 0, ttoklen - 1, first_line, &ttranslen); free (ttok); RESIZE_MALLOCED_BUFFER (token, token_index, ttranslen + 2, token_buffer_size, @@ -3894,9 +4232,9 @@ ansiexpand (string, start, end, lenp) by the caller. The length of the translated string is returned in LENP, if non-null. */ static char * -localeexpand (string, start, end, lenp) +localeexpand (string, start, end, lineno, lenp) char *string; - int start, end, *lenp; + int start, end, lineno, *lenp; { int len, tlen; char *temp, *t; @@ -3909,7 +4247,11 @@ localeexpand (string, start, end, lenp) /* If we're just dumping translatable strings, don't do anything. */ if (dump_translatable_strings) { - printf ("\"%s\"\n", temp); + if (dump_po_strings) + printf ("#: %s:%d\nmsgid \"%s\"\nmsgstr \"\"\n", + (bash_input.name ? bash_input.name : "stdin"), lineno, temp); + else + printf ("\"%s\"\n", temp); if (lenp) *lenp = tlen; return (temp); @@ -4042,6 +4384,8 @@ history_delimiting_chars () else return "; "; /* (...) subshell */ } + else if (token_before_that == WORD && two_tokens_ago == FUNCTION) + return " "; /* function def using `function name' without `()' */ for (i = 0; no_semi_successors[i]; i++) { @@ -4244,6 +4588,12 @@ decode_prompt_string (string) } goto add_string; + case 'r': + temp = xmalloc (2); + temp[0] = '\r'; + temp[1] = '\0'; + goto add_string; + case 'n': temp = xmalloc (3); temp[0] = no_line_editing ? '\n' : '\r'; |