summaryrefslogtreecommitdiff
path: root/y.tab.c
diff options
context:
space:
mode:
Diffstat (limited to 'y.tab.c')
-rw-r--r--y.tab.c1370
1 files changed, 860 insertions, 510 deletions
diff --git a/y.tab.c b/y.tab.c
index 6c66986d..34c9838a 100644
--- a/y.tab.c
+++ b/y.tab.c
@@ -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';