aboutsummaryrefslogtreecommitdiffstats
path: root/y.tab.c
diff options
context:
space:
mode:
authorChet Ramey <chet.ramey@case.edu>2011-11-21 20:51:19 -0500
committerChet Ramey <chet.ramey@case.edu>2011-11-21 20:51:19 -0500
commit0001803f0b9523c94fa2ede48eaecb047fef4524 (patch)
treef334332811e033ff966d94f6268f0629a94304b3 /y.tab.c
parent89a92869e56aba4e4cab2d639c00a86f0545c862 (diff)
downloadandroid_external_bash-0001803f0b9523c94fa2ede48eaecb047fef4524.tar.gz
android_external_bash-0001803f0b9523c94fa2ede48eaecb047fef4524.tar.bz2
android_external_bash-0001803f0b9523c94fa2ede48eaecb047fef4524.zip
Bash-4.1 distribution source
Diffstat (limited to 'y.tab.c')
-rw-r--r--y.tab.c1934
1 files changed, 1134 insertions, 800 deletions
diff --git a/y.tab.c b/y.tab.c
index 7fbd86e..d702554 100644
--- a/y.tab.c
+++ b/y.tab.c
@@ -90,27 +90,28 @@
TIMEOPT = 279,
WORD = 280,
ASSIGNMENT_WORD = 281,
- NUMBER = 282,
- ARITH_CMD = 283,
- ARITH_FOR_EXPRS = 284,
- COND_CMD = 285,
- AND_AND = 286,
- OR_OR = 287,
- GREATER_GREATER = 288,
- LESS_LESS = 289,
- LESS_AND = 290,
- LESS_LESS_LESS = 291,
- GREATER_AND = 292,
- SEMI_SEMI = 293,
- SEMI_AND = 294,
- SEMI_SEMI_AND = 295,
- LESS_LESS_MINUS = 296,
- AND_GREATER = 297,
- AND_GREATER_GREATER = 298,
- LESS_GREATER = 299,
- GREATER_BAR = 300,
- BAR_AND = 301,
- yacc_EOF = 302
+ REDIR_WORD = 282,
+ NUMBER = 283,
+ ARITH_CMD = 284,
+ ARITH_FOR_EXPRS = 285,
+ COND_CMD = 286,
+ AND_AND = 287,
+ OR_OR = 288,
+ GREATER_GREATER = 289,
+ LESS_LESS = 290,
+ LESS_AND = 291,
+ LESS_LESS_LESS = 292,
+ GREATER_AND = 293,
+ SEMI_SEMI = 294,
+ SEMI_AND = 295,
+ SEMI_SEMI_AND = 296,
+ LESS_LESS_MINUS = 297,
+ AND_GREATER = 298,
+ AND_GREATER_GREATER = 299,
+ LESS_GREATER = 300,
+ GREATER_BAR = 301,
+ BAR_AND = 302,
+ yacc_EOF = 303
};
#endif
/* Tokens. */
@@ -138,27 +139,28 @@
#define TIMEOPT 279
#define WORD 280
#define ASSIGNMENT_WORD 281
-#define NUMBER 282
-#define ARITH_CMD 283
-#define ARITH_FOR_EXPRS 284
-#define COND_CMD 285
-#define AND_AND 286
-#define OR_OR 287
-#define GREATER_GREATER 288
-#define LESS_LESS 289
-#define LESS_AND 290
-#define LESS_LESS_LESS 291
-#define GREATER_AND 292
-#define SEMI_SEMI 293
-#define SEMI_AND 294
-#define SEMI_SEMI_AND 295
-#define LESS_LESS_MINUS 296
-#define AND_GREATER 297
-#define AND_GREATER_GREATER 298
-#define LESS_GREATER 299
-#define GREATER_BAR 300
-#define BAR_AND 301
-#define yacc_EOF 302
+#define REDIR_WORD 282
+#define NUMBER 283
+#define ARITH_CMD 284
+#define ARITH_FOR_EXPRS 285
+#define COND_CMD 286
+#define AND_AND 287
+#define OR_OR 288
+#define GREATER_GREATER 289
+#define LESS_LESS 290
+#define LESS_AND 291
+#define LESS_LESS_LESS 292
+#define GREATER_AND 293
+#define SEMI_SEMI 294
+#define SEMI_AND 295
+#define SEMI_SEMI_AND 296
+#define LESS_LESS_MINUS 297
+#define AND_GREATER 298
+#define AND_GREATER_GREATER 299
+#define LESS_GREATER 300
+#define GREATER_BAR 301
+#define BAR_AND 302
+#define yacc_EOF 303
@@ -265,6 +267,7 @@ extern int current_command_number;
extern int sourcelevel, parse_and_execute_level;
extern int posixly_correct;
extern int last_command_exit_value;
+extern pid_t last_command_subst_pid;
extern char *shell_name, *current_host_name;
extern char *dist_version;
extern int patch_level;
@@ -393,10 +396,6 @@ int promptvars = 1;
quotes. */
int extended_quote = 1;
-/* The decoded prompt string. Used if READLINE is not defined or if
- editing is turned off. Analogous to current_readline_prompt. */
-static char *current_decoded_prompt;
-
/* The number of lines read from input while creating the current command. */
int current_command_line_count;
@@ -406,6 +405,9 @@ int shell_eof_token;
/* The token currently being read. */
int current_token;
+/* The current parser state. */
+int parser_state;
+
/* Variables to manage the task of reading here documents, because we need to
defer the reading until after a complete command has been collected. */
static REDIRECT *redir_stack[10];
@@ -430,8 +432,9 @@ static int function_bstart;
/* The line number in a script at which an arithmetic for command starts. */
static int arith_for_lineno;
-/* The current parser state. */
-static int parser_state;
+/* The decoded prompt string. Used if READLINE is not defined or if
+ editing is turned off. Analogous to current_readline_prompt. */
+static char *current_decoded_prompt;
/* The last read token, or NULL. read_token () uses this for context
checking. */
@@ -443,6 +446,8 @@ static int token_before_that;
/* The token read prior to token_before_that. */
static int two_tokens_ago;
+static int global_extglob;
+
/* The line number in a script where the word in a `case WORD', `select WORD'
or `for WORD' begins. This is a nested command maximum, since the array
index is decremented after a case, select, or for command is parsed. */
@@ -457,6 +462,7 @@ static int word_top = -1;
static int token_to_read;
static WORD_DESC *word_desc_to_read;
+static REDIRECTEE source;
static REDIRECTEE redir;
@@ -480,7 +486,7 @@ static REDIRECTEE redir;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
-#line 316 "/Users/chet/src/bash/src/parse.y"
+#line 320 "/Users/chet/src/bash/src/parse.y"
{
WORD_DESC *word; /* the word that we read. */
int number; /* the number that we read. */
@@ -491,7 +497,7 @@ typedef union YYSTYPE
PATTERN_LIST *pattern;
}
/* Line 187 of yacc.c. */
-#line 495 "y.tab.c"
+#line 501 "y.tab.c"
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
@@ -504,7 +510,7 @@ typedef union YYSTYPE
/* Line 216 of yacc.c. */
-#line 508 "y.tab.c"
+#line 514 "y.tab.c"
#ifdef short
# undef short
@@ -717,22 +723,22 @@ union yyalloc
#endif
/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 102
+#define YYFINAL 113
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 728
+#define YYLAST 760
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 59
+#define YYNTOKENS 60
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 38
/* YYNRULES -- Number of rules. */
-#define YYNRULES 153
+#define YYNRULES 167
/* YYNRULES -- Number of states. */
-#define YYNSTATES 319
+#define YYNSTATES 344
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 302
+#define YYMAXUTOK 303
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -741,18 +747,18 @@ union yyalloc
static const yytype_uint8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 49, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 50, 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, 47, 2,
- 57, 58, 2, 2, 2, 54, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 48,
- 53, 2, 52, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 48, 2,
+ 58, 59, 2, 2, 2, 55, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 49,
+ 54, 2, 53, 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, 55, 51, 56, 2, 2, 2, 2,
+ 2, 2, 2, 56, 52, 57, 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,
@@ -770,7 +776,7 @@ static const yytype_uint8 yytranslate[] =
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 50
+ 45, 46, 47, 51
};
#if YYDEBUG
@@ -779,110 +785,118 @@ static const yytype_uint8 yytranslate[] =
static const yytype_uint16 yyprhs[] =
{
0, 0, 3, 6, 8, 11, 13, 15, 18, 21,
- 24, 28, 32, 35, 39, 42, 46, 49, 53, 56,
- 60, 63, 67, 70, 74, 77, 81, 84, 88, 91,
- 95, 98, 102, 105, 108, 112, 115, 118, 122, 124,
- 126, 128, 130, 133, 135, 138, 140, 142, 145, 147,
- 149, 151, 153, 159, 165, 167, 169, 171, 173, 175,
- 177, 179, 186, 193, 201, 209, 220, 231, 241, 251,
- 259, 267, 273, 279, 286, 293, 301, 309, 320, 331,
- 338, 346, 353, 359, 366, 371, 373, 376, 380, 383,
- 387, 391, 396, 399, 405, 413, 420, 424, 426, 430,
- 435, 442, 448, 450, 453, 458, 463, 469, 475, 478,
- 482, 485, 489, 492, 496, 498, 502, 505, 507, 510,
- 514, 518, 522, 527, 532, 537, 542, 547, 549, 551,
- 553, 555, 557, 559, 560, 563, 565, 568, 571, 576,
- 581, 585, 589, 591, 593, 596, 599, 603, 607, 610,
- 615, 620, 622, 624
+ 24, 28, 32, 36, 40, 43, 47, 51, 54, 58,
+ 62, 65, 69, 73, 76, 80, 84, 87, 91, 95,
+ 98, 102, 106, 109, 113, 117, 120, 124, 128, 131,
+ 135, 139, 142, 146, 150, 153, 157, 161, 164, 168,
+ 172, 175, 178, 180, 182, 184, 186, 189, 191, 194,
+ 196, 198, 201, 203, 205, 207, 209, 215, 221, 223,
+ 225, 227, 229, 231, 233, 235, 242, 249, 257, 265,
+ 276, 287, 297, 307, 315, 323, 329, 335, 342, 349,
+ 357, 365, 376, 387, 394, 402, 409, 415, 422, 427,
+ 429, 432, 436, 439, 443, 447, 452, 455, 461, 469,
+ 476, 480, 482, 486, 491, 498, 504, 506, 509, 514,
+ 519, 525, 531, 534, 538, 541, 545, 548, 552, 554,
+ 558, 561, 563, 566, 570, 574, 578, 583, 588, 593,
+ 598, 603, 605, 607, 609, 611, 613, 615, 616, 619,
+ 621, 624, 627, 632, 637, 641, 645, 647, 649, 652,
+ 655, 659, 663, 666, 671, 676, 678, 680
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const yytype_int8 yyrhs[] =
{
- 60, 0, -1, 92, 89, -1, 49, -1, 1, 49,
- -1, 50, -1, 25, -1, 61, 25, -1, 52, 25,
- -1, 53, 25, -1, 27, 52, 25, -1, 27, 53,
- 25, -1, 33, 25, -1, 27, 33, 25, -1, 34,
- 25, -1, 27, 34, 25, -1, 36, 25, -1, 27,
- 36, 25, -1, 35, 27, -1, 27, 35, 27, -1,
- 37, 27, -1, 27, 37, 27, -1, 35, 25, -1,
- 27, 35, 25, -1, 37, 25, -1, 27, 37, 25,
- -1, 41, 25, -1, 27, 41, 25, -1, 37, 54,
- -1, 27, 37, 54, -1, 35, 54, -1, 27, 35,
- 54, -1, 42, 25, -1, 43, 25, -1, 27, 44,
- 25, -1, 44, 25, -1, 45, 25, -1, 27, 45,
- 25, -1, 25, -1, 26, -1, 62, -1, 62, -1,
- 64, 62, -1, 63, -1, 65, 63, -1, 65, -1,
- 67, -1, 67, 64, -1, 72, -1, 75, -1, 68,
- -1, 71, -1, 12, 86, 14, 86, 15, -1, 13,
- 86, 14, 86, 15, -1, 70, -1, 76, -1, 74,
- -1, 77, -1, 78, -1, 79, -1, 69, -1, 10,
- 25, 91, 14, 86, 15, -1, 10, 25, 91, 55,
- 86, 56, -1, 10, 25, 48, 91, 14, 86, 15,
- -1, 10, 25, 48, 91, 55, 86, 56, -1, 10,
- 25, 91, 21, 61, 90, 91, 14, 86, 15, -1,
- 10, 25, 91, 21, 61, 90, 91, 55, 86, 56,
- -1, 10, 25, 91, 21, 90, 91, 14, 86, 15,
- -1, 10, 25, 91, 21, 90, 91, 55, 86, 56,
- -1, 10, 29, 90, 91, 14, 86, 15, -1, 10,
- 29, 90, 91, 55, 86, 56, -1, 10, 29, 14,
- 86, 15, -1, 10, 29, 55, 86, 56, -1, 11,
- 25, 91, 14, 85, 15, -1, 11, 25, 91, 55,
- 85, 56, -1, 11, 25, 48, 91, 14, 85, 15,
- -1, 11, 25, 48, 91, 55, 85, 56, -1, 11,
- 25, 91, 21, 61, 90, 91, 14, 85, 15, -1,
- 11, 25, 91, 21, 61, 90, 91, 55, 85, 56,
- -1, 8, 25, 91, 21, 91, 9, -1, 8, 25,
- 91, 21, 83, 91, 9, -1, 8, 25, 91, 21,
- 81, 9, -1, 25, 57, 58, 91, 73, -1, 16,
- 25, 57, 58, 91, 73, -1, 16, 25, 91, 73,
- -1, 67, -1, 67, 64, -1, 57, 86, 58, -1,
- 17, 67, -1, 17, 67, 64, -1, 17, 25, 67,
- -1, 17, 25, 67, 64, -1, 17, 65, -1, 3,
- 86, 4, 86, 7, -1, 3, 86, 4, 86, 5,
- 86, 7, -1, 3, 86, 4, 86, 80, 7, -1,
- 55, 86, 56, -1, 28, -1, 18, 30, 19, -1,
- 6, 86, 4, 86, -1, 6, 86, 4, 86, 5,
- 86, -1, 6, 86, 4, 86, 80, -1, 82, -1,
- 83, 82, -1, 91, 84, 58, 86, -1, 91, 84,
- 58, 91, -1, 91, 57, 84, 58, 86, -1, 91,
- 57, 84, 58, 91, -1, 82, 38, -1, 83, 82,
- 38, -1, 82, 39, -1, 83, 82, 39, -1, 82,
- 40, -1, 83, 82, 40, -1, 25, -1, 84, 51,
- 25, -1, 91, 87, -1, 85, -1, 91, 88, -1,
- 88, 49, 91, -1, 88, 47, 91, -1, 88, 48,
- 91, -1, 88, 31, 91, 88, -1, 88, 32, 91,
- 88, -1, 88, 47, 91, 88, -1, 88, 48, 91,
- 88, -1, 88, 49, 91, 88, -1, 94, -1, 49,
- -1, 50, -1, 49, -1, 48, -1, 50, -1, -1,
- 91, 49, -1, 93, -1, 93, 47, -1, 93, 48,
- -1, 93, 31, 91, 93, -1, 93, 32, 91, 93,
- -1, 93, 47, 93, -1, 93, 48, 93, -1, 94,
- -1, 95, -1, 22, 95, -1, 96, 95, -1, 96,
- 22, 95, -1, 22, 96, 95, -1, 96, 90, -1,
- 95, 51, 91, 95, -1, 95, 46, 91, 95, -1,
- 66, -1, 23, -1, 23, 24, -1
+ 61, 0, -1, 93, 90, -1, 50, -1, 1, 50,
+ -1, 51, -1, 25, -1, 62, 25, -1, 53, 25,
+ -1, 54, 25, -1, 28, 53, 25, -1, 28, 54,
+ 25, -1, 27, 53, 25, -1, 27, 54, 25, -1,
+ 34, 25, -1, 28, 34, 25, -1, 27, 34, 25,
+ -1, 46, 25, -1, 28, 46, 25, -1, 27, 46,
+ 25, -1, 45, 25, -1, 28, 45, 25, -1, 27,
+ 45, 25, -1, 35, 25, -1, 28, 35, 25, -1,
+ 27, 35, 25, -1, 42, 25, -1, 28, 42, 25,
+ -1, 27, 42, 25, -1, 37, 25, -1, 28, 37,
+ 25, -1, 27, 37, 25, -1, 36, 28, -1, 28,
+ 36, 28, -1, 27, 36, 28, -1, 38, 28, -1,
+ 28, 38, 28, -1, 27, 38, 28, -1, 36, 25,
+ -1, 28, 36, 25, -1, 27, 36, 25, -1, 38,
+ 25, -1, 28, 38, 25, -1, 27, 38, 25, -1,
+ 38, 55, -1, 28, 38, 55, -1, 27, 38, 55,
+ -1, 36, 55, -1, 28, 36, 55, -1, 27, 36,
+ 55, -1, 43, 25, -1, 44, 25, -1, 25, -1,
+ 26, -1, 63, -1, 63, -1, 65, 63, -1, 64,
+ -1, 66, 64, -1, 66, -1, 68, -1, 68, 65,
+ -1, 73, -1, 76, -1, 69, -1, 72, -1, 12,
+ 87, 14, 87, 15, -1, 13, 87, 14, 87, 15,
+ -1, 71, -1, 77, -1, 75, -1, 78, -1, 79,
+ -1, 80, -1, 70, -1, 10, 25, 92, 14, 87,
+ 15, -1, 10, 25, 92, 56, 87, 57, -1, 10,
+ 25, 49, 92, 14, 87, 15, -1, 10, 25, 49,
+ 92, 56, 87, 57, -1, 10, 25, 92, 21, 62,
+ 91, 92, 14, 87, 15, -1, 10, 25, 92, 21,
+ 62, 91, 92, 56, 87, 57, -1, 10, 25, 92,
+ 21, 91, 92, 14, 87, 15, -1, 10, 25, 92,
+ 21, 91, 92, 56, 87, 57, -1, 10, 30, 91,
+ 92, 14, 87, 15, -1, 10, 30, 91, 92, 56,
+ 87, 57, -1, 10, 30, 14, 87, 15, -1, 10,
+ 30, 56, 87, 57, -1, 11, 25, 92, 14, 86,
+ 15, -1, 11, 25, 92, 56, 86, 57, -1, 11,
+ 25, 49, 92, 14, 86, 15, -1, 11, 25, 49,
+ 92, 56, 86, 57, -1, 11, 25, 92, 21, 62,
+ 91, 92, 14, 86, 15, -1, 11, 25, 92, 21,
+ 62, 91, 92, 56, 86, 57, -1, 8, 25, 92,
+ 21, 92, 9, -1, 8, 25, 92, 21, 84, 92,
+ 9, -1, 8, 25, 92, 21, 82, 9, -1, 25,
+ 58, 59, 92, 74, -1, 16, 25, 58, 59, 92,
+ 74, -1, 16, 25, 92, 74, -1, 68, -1, 68,
+ 65, -1, 58, 87, 59, -1, 17, 68, -1, 17,
+ 68, 65, -1, 17, 25, 68, -1, 17, 25, 68,
+ 65, -1, 17, 66, -1, 3, 87, 4, 87, 7,
+ -1, 3, 87, 4, 87, 5, 87, 7, -1, 3,
+ 87, 4, 87, 81, 7, -1, 56, 87, 57, -1,
+ 29, -1, 18, 31, 19, -1, 6, 87, 4, 87,
+ -1, 6, 87, 4, 87, 5, 87, -1, 6, 87,
+ 4, 87, 81, -1, 83, -1, 84, 83, -1, 92,
+ 85, 59, 87, -1, 92, 85, 59, 92, -1, 92,
+ 58, 85, 59, 87, -1, 92, 58, 85, 59, 92,
+ -1, 83, 39, -1, 84, 83, 39, -1, 83, 40,
+ -1, 84, 83, 40, -1, 83, 41, -1, 84, 83,
+ 41, -1, 25, -1, 85, 52, 25, -1, 92, 88,
+ -1, 86, -1, 92, 89, -1, 89, 50, 92, -1,
+ 89, 48, 92, -1, 89, 49, 92, -1, 89, 32,
+ 92, 89, -1, 89, 33, 92, 89, -1, 89, 48,
+ 92, 89, -1, 89, 49, 92, 89, -1, 89, 50,
+ 92, 89, -1, 95, -1, 50, -1, 51, -1, 50,
+ -1, 49, -1, 51, -1, -1, 92, 50, -1, 94,
+ -1, 94, 48, -1, 94, 49, -1, 94, 32, 92,
+ 94, -1, 94, 33, 92, 94, -1, 94, 48, 94,
+ -1, 94, 49, 94, -1, 95, -1, 96, -1, 22,
+ 96, -1, 97, 96, -1, 97, 22, 96, -1, 22,
+ 97, 96, -1, 97, 91, -1, 96, 52, 92, 96,
+ -1, 96, 47, 92, 96, -1, 67, -1, 23, -1,
+ 23, 24, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 369, 369, 380, 389, 404, 414, 416, 420, 425,
- 430, 435, 440, 445, 450, 456, 462, 467, 472, 477,
- 482, 487, 492, 497, 502, 507, 512, 519, 526, 531,
- 536, 541, 546, 551, 556, 561, 566, 571, 578, 580,
- 582, 586, 590, 601, 603, 607, 609, 611, 627, 629,
- 633, 635, 637, 639, 641, 643, 645, 647, 649, 651,
- 653, 657, 662, 667, 672, 677, 682, 687, 692, 699,
- 704, 709, 714, 721, 726, 731, 736, 741, 746, 753,
- 758, 763, 770, 773, 776, 780, 782, 813, 820, 825,
- 842, 847, 864, 871, 873, 875, 880, 884, 888, 892,
- 894, 896, 900, 901, 905, 907, 909, 911, 915, 917,
- 919, 921, 923, 925, 929, 931, 940, 948, 949, 955,
- 956, 963, 967, 969, 971, 978, 980, 982, 986, 987,
- 990, 992, 994, 998, 999, 1008, 1021, 1037, 1052, 1054,
- 1056, 1063, 1066, 1070, 1072, 1078, 1084, 1090, 1096, 1116,
- 1118, 1140, 1144, 1146
+ 0, 373, 373, 384, 393, 408, 418, 420, 424, 430,
+ 436, 442, 448, 454, 460, 466, 472, 478, 484, 490,
+ 496, 502, 508, 514, 521, 528, 535, 542, 549, 556,
+ 562, 568, 574, 580, 586, 592, 598, 604, 610, 616,
+ 622, 628, 634, 640, 646, 652, 658, 664, 670, 676,
+ 682, 688, 696, 698, 700, 704, 708, 719, 721, 725,
+ 727, 729, 745, 747, 751, 753, 755, 757, 759, 761,
+ 763, 765, 767, 769, 771, 775, 780, 785, 790, 795,
+ 800, 805, 810, 817, 822, 827, 832, 839, 844, 849,
+ 854, 859, 864, 871, 876, 881, 888, 891, 894, 898,
+ 900, 931, 938, 943, 960, 965, 982, 989, 991, 993,
+ 998, 1002, 1006, 1010, 1012, 1014, 1018, 1019, 1023, 1025,
+ 1027, 1029, 1033, 1035, 1037, 1039, 1041, 1043, 1047, 1049,
+ 1058, 1066, 1067, 1073, 1074, 1081, 1085, 1087, 1089, 1096,
+ 1098, 1100, 1104, 1105, 1108, 1110, 1112, 1116, 1117, 1126,
+ 1139, 1155, 1170, 1172, 1174, 1181, 1184, 1188, 1190, 1196,
+ 1202, 1208, 1214, 1234, 1236, 1259, 1263, 1265
};
#endif
@@ -894,8 +908,8 @@ static const char *const yytname[] =
"$end", "error", "$undefined", "IF", "THEN", "ELSE", "ELIF", "FI",
"CASE", "ESAC", "FOR", "SELECT", "WHILE", "UNTIL", "DO", "DONE",
"FUNCTION", "COPROC", "COND_START", "COND_END", "COND_ERROR", "IN",
- "BANG", "TIME", "TIMEOPT", "WORD", "ASSIGNMENT_WORD", "NUMBER",
- "ARITH_CMD", "ARITH_FOR_EXPRS", "COND_CMD", "AND_AND", "OR_OR",
+ "BANG", "TIME", "TIMEOPT", "WORD", "ASSIGNMENT_WORD", "REDIR_WORD",
+ "NUMBER", "ARITH_CMD", "ARITH_FOR_EXPRS", "COND_CMD", "AND_AND", "OR_OR",
"GREATER_GREATER", "LESS_LESS", "LESS_AND", "LESS_LESS_LESS",
"GREATER_AND", "SEMI_SEMI", "SEMI_AND", "SEMI_SEMI_AND",
"LESS_LESS_MINUS", "AND_GREATER", "AND_GREATER_GREATER", "LESS_GREATER",
@@ -922,51 +936,53 @@ static const yytype_uint16 yytoknum[] =
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, 301, 38, 59, 10,
- 302, 124, 62, 60, 45, 123, 125, 40, 41
+ 295, 296, 297, 298, 299, 300, 301, 302, 38, 59,
+ 10, 303, 124, 62, 60, 45, 123, 125, 40, 41
};
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 59, 60, 60, 60, 60, 61, 61, 62, 62,
- 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 62, 62, 62, 62, 62, 62, 62, 63, 63,
- 63, 64, 64, 65, 65, 66, 66, 66, 66, 66,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 68, 68, 68, 68, 68, 68, 68, 68, 69,
- 69, 69, 69, 70, 70, 70, 70, 70, 70, 71,
- 71, 71, 72, 72, 72, 73, 73, 74, 75, 75,
- 75, 75, 75, 76, 76, 76, 77, 78, 79, 80,
- 80, 80, 81, 81, 82, 82, 82, 82, 83, 83,
- 83, 83, 83, 83, 84, 84, 85, 86, 86, 87,
- 87, 87, 88, 88, 88, 88, 88, 88, 89, 89,
- 90, 90, 90, 91, 91, 92, 92, 92, 93, 93,
- 93, 93, 93, 94, 94, 94, 94, 94, 94, 95,
- 95, 95, 96, 96
+ 0, 60, 61, 61, 61, 61, 62, 62, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 64, 64, 64, 65, 65, 66, 66, 67,
+ 67, 67, 67, 67, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 69, 69, 69, 69, 69,
+ 69, 69, 69, 70, 70, 70, 70, 71, 71, 71,
+ 71, 71, 71, 72, 72, 72, 73, 73, 73, 74,
+ 74, 75, 76, 76, 76, 76, 76, 77, 77, 77,
+ 78, 79, 80, 81, 81, 81, 82, 82, 83, 83,
+ 83, 83, 84, 84, 84, 84, 84, 84, 85, 85,
+ 86, 87, 87, 88, 88, 88, 89, 89, 89, 89,
+ 89, 89, 90, 90, 91, 91, 91, 92, 92, 93,
+ 93, 93, 94, 94, 94, 94, 94, 95, 95, 95,
+ 95, 95, 95, 96, 96, 96, 97, 97
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
static const yytype_uint8 yyr2[] =
{
0, 2, 2, 1, 2, 1, 1, 2, 2, 2,
- 3, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 2, 3, 2, 2, 3, 1, 1,
- 1, 1, 2, 1, 2, 1, 1, 2, 1, 1,
- 1, 1, 5, 5, 1, 1, 1, 1, 1, 1,
- 1, 6, 6, 7, 7, 10, 10, 9, 9, 7,
- 7, 5, 5, 6, 6, 7, 7, 10, 10, 6,
- 7, 6, 5, 6, 4, 1, 2, 3, 2, 3,
- 3, 4, 2, 5, 7, 6, 3, 1, 3, 4,
- 6, 5, 1, 2, 4, 4, 5, 5, 2, 3,
- 2, 3, 2, 3, 1, 3, 2, 1, 2, 3,
- 3, 3, 4, 4, 4, 4, 4, 1, 1, 1,
- 1, 1, 1, 0, 2, 1, 2, 2, 4, 4,
- 3, 3, 1, 1, 2, 2, 3, 3, 2, 4,
- 4, 1, 1, 2
+ 3, 3, 3, 3, 2, 3, 3, 2, 3, 3,
+ 2, 3, 3, 2, 3, 3, 2, 3, 3, 2,
+ 3, 3, 2, 3, 3, 2, 3, 3, 2, 3,
+ 3, 2, 3, 3, 2, 3, 3, 2, 3, 3,
+ 2, 2, 1, 1, 1, 1, 2, 1, 2, 1,
+ 1, 2, 1, 1, 1, 1, 5, 5, 1, 1,
+ 1, 1, 1, 1, 1, 6, 6, 7, 7, 10,
+ 10, 9, 9, 7, 7, 5, 5, 6, 6, 7,
+ 7, 10, 10, 6, 7, 6, 5, 6, 4, 1,
+ 2, 3, 2, 3, 3, 4, 2, 5, 7, 6,
+ 3, 1, 3, 4, 6, 5, 1, 2, 4, 4,
+ 5, 5, 2, 3, 2, 3, 2, 3, 1, 3,
+ 2, 1, 2, 3, 3, 3, 4, 4, 4, 4,
+ 4, 1, 1, 1, 1, 1, 1, 0, 2, 1,
+ 2, 2, 4, 4, 3, 3, 1, 1, 2, 2,
+ 3, 3, 2, 4, 4, 1, 1, 2
};
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -974,95 +990,101 @@ static const yytype_uint8 yyr2[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
- 0, 0, 133, 0, 0, 0, 133, 133, 0, 0,
- 0, 0, 152, 38, 39, 0, 97, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 5, 0,
- 0, 133, 133, 0, 40, 43, 45, 151, 46, 50,
- 60, 54, 51, 48, 56, 49, 55, 57, 58, 59,
- 0, 135, 142, 143, 0, 4, 117, 0, 0, 133,
- 133, 0, 133, 0, 0, 133, 38, 92, 88, 0,
- 144, 0, 153, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 12, 14, 22, 18, 30, 16,
- 24, 20, 28, 26, 32, 33, 35, 36, 8, 9,
- 0, 0, 1, 38, 44, 41, 47, 128, 129, 2,
- 133, 133, 136, 137, 133, 133, 0, 131, 130, 132,
- 148, 145, 133, 134, 116, 118, 127, 0, 133, 0,
- 133, 133, 133, 133, 0, 133, 133, 0, 0, 90,
- 89, 98, 147, 133, 13, 15, 23, 19, 31, 17,
- 25, 21, 29, 27, 34, 37, 10, 11, 96, 87,
- 42, 0, 0, 140, 141, 0, 0, 146, 0, 133,
- 133, 133, 133, 133, 133, 0, 133, 0, 133, 0,
- 0, 0, 0, 133, 0, 133, 0, 0, 133, 85,
- 84, 91, 0, 138, 139, 0, 0, 150, 149, 133,
- 133, 93, 0, 0, 0, 120, 121, 119, 0, 102,
- 133, 0, 133, 133, 0, 6, 0, 133, 0, 71,
- 72, 133, 133, 133, 133, 0, 0, 0, 0, 52,
- 53, 0, 86, 82, 0, 0, 95, 122, 123, 124,
- 125, 126, 81, 108, 110, 112, 103, 0, 79, 114,
- 0, 0, 0, 0, 61, 7, 133, 0, 62, 0,
- 0, 0, 0, 73, 0, 133, 74, 83, 94, 133,
- 133, 133, 133, 109, 111, 113, 80, 0, 0, 133,
- 63, 64, 0, 133, 133, 69, 70, 75, 76, 0,
- 99, 0, 0, 0, 133, 115, 104, 105, 133, 133,
- 0, 0, 133, 133, 133, 101, 106, 107, 0, 0,
- 67, 68, 0, 0, 100, 65, 66, 77, 78
+ 0, 0, 147, 0, 0, 0, 147, 147, 0, 0,
+ 0, 0, 166, 52, 53, 0, 0, 111, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 5,
+ 0, 0, 147, 147, 0, 54, 57, 59, 165, 60,
+ 64, 74, 68, 65, 62, 70, 63, 69, 71, 72,
+ 73, 0, 149, 156, 157, 0, 4, 131, 0, 0,
+ 147, 147, 0, 147, 0, 0, 147, 52, 106, 102,
+ 0, 158, 0, 167, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 14, 23, 38, 32, 47,
+ 29, 41, 35, 44, 26, 50, 51, 20, 17, 8,
+ 9, 0, 0, 1, 52, 58, 55, 61, 142, 143,
+ 2, 147, 147, 150, 151, 147, 147, 0, 145, 144,
+ 146, 162, 159, 147, 148, 130, 132, 141, 0, 147,
+ 0, 147, 147, 147, 147, 0, 147, 147, 0, 0,
+ 104, 103, 112, 161, 147, 16, 25, 40, 34, 49,
+ 31, 43, 37, 46, 28, 22, 19, 12, 13, 15,
+ 24, 39, 33, 48, 30, 42, 36, 45, 27, 21,
+ 18, 10, 11, 110, 101, 56, 0, 0, 154, 155,
+ 0, 0, 160, 0, 147, 147, 147, 147, 147, 147,
+ 0, 147, 0, 147, 0, 0, 0, 0, 147, 0,
+ 147, 0, 0, 147, 99, 98, 105, 0, 152, 153,
+ 0, 0, 164, 163, 147, 147, 107, 0, 0, 0,
+ 134, 135, 133, 0, 116, 147, 0, 147, 147, 0,
+ 6, 0, 147, 0, 85, 86, 147, 147, 147, 147,
+ 0, 0, 0, 0, 66, 67, 0, 100, 96, 0,
+ 0, 109, 136, 137, 138, 139, 140, 95, 122, 124,
+ 126, 117, 0, 93, 128, 0, 0, 0, 0, 75,
+ 7, 147, 0, 76, 0, 0, 0, 0, 87, 0,
+ 147, 88, 97, 108, 147, 147, 147, 147, 123, 125,
+ 127, 94, 0, 0, 147, 77, 78, 0, 147, 147,
+ 83, 84, 89, 90, 0, 113, 0, 0, 0, 147,
+ 129, 118, 119, 147, 147, 0, 0, 147, 147, 147,
+ 115, 120, 121, 0, 0, 81, 82, 0, 0, 114,
+ 79, 80, 91, 92
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 33, 216, 34, 35, 106, 36, 37, 38, 39,
- 40, 41, 42, 43, 190, 44, 45, 46, 47, 48,
- 49, 202, 208, 209, 210, 251, 56, 57, 124, 125,
- 109, 120, 58, 50, 163, 126, 53, 54
+ -1, 34, 241, 35, 36, 117, 37, 38, 39, 40,
+ 41, 42, 43, 44, 215, 45, 46, 47, 48, 49,
+ 50, 227, 233, 234, 235, 276, 57, 58, 135, 136,
+ 120, 131, 59, 51, 188, 137, 54, 55
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -188
+#define YYPACT_NINF -212
static const yytype_int16 yypact[] =
{
- 293, -26, -188, 7, 41, 43, -188, -188, 46, 629,
- -17, 485, 11, 23, -188, 675, -188, 65, 68, 96,
- 77, 119, 92, 124, 127, 140, 143, -188, -188, 149,
- 154, -188, -188, 98, -188, -188, 662, -188, 208, -188,
- -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
- 24, 12, -188, -36, 341, -188, -188, 177, 389, -188,
- 142, 8, 147, 169, 185, 148, 200, 662, 208, 181,
- -36, 581, -188, 146, 184, 189, 130, 192, 135, 197,
- 198, 202, 207, 209, -188, -188, -188, -188, -188, -188,
- -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
- 180, 167, -188, -188, -188, -188, 208, -188, -188, -188,
- -188, -188, 437, 437, -188, -188, 581, -188, -188, -188,
- -188, -36, -188, -188, -188, 227, -188, -12, -188, 20,
- -188, -188, -188, -188, 122, -188, -188, 179, 37, 208,
- 208, -188, -36, -188, -188, -188, -188, -188, -188, -188,
- -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
- -188, 389, 389, 53, 53, 533, 533, -36, 224, -188,
- -188, -188, -188, -188, -188, 40, -188, 171, -188, 233,
- 190, 48, 73, -188, 247, -188, 239, 267, -188, 208,
- -188, 208, 37, -188, -188, 437, 437, -36, -36, -188,
- -188, -188, 276, 389, 389, 389, 389, 389, 275, 226,
- -188, 42, -188, -188, 270, -188, 231, -188, 230, -188,
- -188, -188, -188, -188, -188, 272, 389, 231, 234, -188,
- -188, 37, 208, -188, 282, 287, -188, -188, -188, 76,
- 76, 76, -188, -188, -188, -188, 229, 63, -188, -188,
- 274, -27, 280, 241, -188, -188, -188, 99, -188, 285,
- 246, 292, 252, -188, 227, -188, -188, -188, -188, -188,
- -188, -188, -188, -188, -188, -188, -188, -22, 288, -188,
- -188, -188, 131, -188, -188, -188, -188, -188, -188, 133,
- 129, 389, 389, 389, -188, -188, -188, 389, -188, -188,
- 297, 258, -188, -188, -188, -188, -188, 389, 302, 266,
- -188, -188, 308, 268, -188, -188, -188, -188, -188
+ 318, -40, -212, 11, 10, 32, -212, -212, 34, 661,
+ 39, 514, 52, 21, -212, 255, 706, -212, 65, 79,
+ 47, 98, 55, 133, 134, 139, 151, 152, -212, -212,
+ 156, 157, -212, -212, 142, -212, -212, 232, -212, 693,
+ -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
+ -212, 49, 213, -212, -28, 367, -212, -212, 150, 416,
+ -212, 135, -3, 137, 184, 194, 158, 31, 232, 693,
+ 191, -28, 612, -212, 166, 199, 202, 69, 209, 128,
+ 210, 214, 218, 219, 225, 227, 247, 165, 248, 181,
+ 256, 257, 258, 259, 262, -212, -212, -212, -212, -212,
+ -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
+ -212, 237, 236, -212, -212, -212, -212, 693, -212, -212,
+ -212, -212, -212, 465, 465, -212, -212, 612, -212, -212,
+ -212, -212, -28, -212, -212, -212, 205, -212, -13, -212,
+ 116, -212, -212, -212, -212, 117, -212, -212, 240, 53,
+ 693, 693, -212, -28, -212, -212, -212, -212, -212, -212,
+ -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
+ -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
+ -212, -212, -212, -212, -212, -212, 416, 416, 75, 75,
+ 563, 563, -28, 15, -212, -212, -212, -212, -212, -212,
+ 72, -212, 120, -212, 281, 249, 105, 118, -212, 279,
+ -212, 290, 292, -212, 693, -212, 693, 53, -212, -212,
+ 465, 465, -28, -28, -212, -212, -212, 303, 416, 416,
+ 416, 416, 416, 302, 174, -212, 0, -212, -212, 297,
+ -212, 179, -212, 263, -212, -212, -212, -212, -212, -212,
+ 299, 416, 179, 265, -212, -212, 53, 693, -212, 308,
+ 312, -212, -212, -212, 80, 80, 80, -212, -212, -212,
+ -212, 224, 43, -212, -212, 300, 33, 309, 270, -212,
+ -212, -212, 129, -212, 317, 276, 322, 282, -212, 205,
+ -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
+ -212, -212, 46, 313, -212, -212, -212, 149, -212, -212,
+ -212, -212, -212, -212, 161, 115, 416, 416, 416, -212,
+ -212, -212, 416, -212, -212, 327, 291, -212, -212, -212,
+ -212, -212, 416, 334, 293, -212, -212, 336, 301, -212,
+ -212, -212, -212, -212
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -188, -188, 141, -30, -25, -62, 322, -188, -5, -188,
- -188, -188, -188, -188, -185, -188, -188, -188, -188, -188,
- -188, 49, -188, 123, -188, 82, -171, -6, -188, -187,
- -188, -58, -32, -188, 5, 2, 10, 329
+ -212, -212, 148, -36, 1, -62, 350, -212, -5, -212,
+ -212, -212, -212, -212, -211, -212, -212, -212, -212, -212,
+ -212, 50, -212, 131, -212, 92, -194, -6, -212, -200,
+ -212, -45, -48, -212, 5, 2, 12, 362
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
@@ -1072,156 +1094,164 @@ static const yytype_int16 yypgoto[] =
#define YYTABLE_NINF -1
static const yytype_uint16 yytable[] =
{
- 63, 64, 52, 132, 68, 51, 140, 233, 105, 174,
- 114, 104, 225, 69, 228, 115, 237, 238, 239, 240,
- 241, 70, 130, 55, 278, 100, 101, 127, 129, 278,
- 134, 279, 59, 138, 176, 72, 294, 123, 105, 264,
- 2, 177, 104, 110, 111, 3, 267, 4, 5, 6,
- 7, 248, 261, 262, 212, 10, 117, 118, 119, 112,
- 113, 139, 221, 131, 121, 16, 60, 249, 62, 123,
- 61, 65, 276, 107, 108, 178, 160, 191, 161, 162,
- 73, 142, 165, 166, 110, 111, 123, 223, 249, 123,
- 84, 123, 31, 85, 32, 213, 175, 123, 102, 250,
- 181, 182, 89, 222, 239, 240, 241, 169, 170, 105,
- 160, 192, 123, 283, 52, 52, 168, 93, 164, 217,
- 250, 86, 123, 87, 179, 180, 167, 232, 224, 186,
- 187, 312, 313, 189, 304, 200, 183, 203, 204, 205,
- 206, 207, 211, 184, 90, 298, 91, 302, 123, 94,
- 88, 226, 95, 226, 284, 146, 231, 147, 256, 105,
- 150, 160, 151, 52, 52, 96, 193, 194, 97, 265,
- 214, 123, 218, 92, 98, 197, 198, 185, 247, 99,
- 123, 122, 123, 135, 148, 257, 299, 189, 303, 152,
- 128, 226, 226, 234, 235, 133, 215, 52, 52, 136,
- 141, 164, 160, 2, 143, 137, 252, 253, 3, 144,
- 4, 5, 6, 7, 145, 259, 260, 149, 10, 117,
- 118, 119, 153, 154, 282, 159, 189, 155, 16, 199,
- 200, 201, 156, 289, 157, 15, 158, 188, 291, 292,
- 293, 17, 18, 19, 20, 21, 220, 297, 219, 22,
- 23, 24, 25, 26, 229, 31, 255, 32, 169, 170,
- 29, 30, 307, 290, 243, 244, 245, 273, 274, 275,
- 226, 226, 215, 296, 171, 172, 173, 300, 301, 117,
- 118, 119, 230, 236, 242, 254, 258, 263, 306, 268,
- 266, 269, 308, 309, 1, 280, 2, 281, 314, 249,
- 285, 3, 286, 4, 5, 6, 7, 287, 288, 8,
- 9, 10, 310, 295, 311, 11, 12, 315, 13, 14,
- 15, 16, 316, 317, 318, 227, 17, 18, 19, 20,
- 21, 67, 277, 246, 22, 23, 24, 25, 26, 305,
- 71, 0, 27, 28, 2, 29, 30, 0, 31, 3,
- 32, 4, 5, 6, 7, 0, 0, 8, 9, 10,
- 0, 0, 0, 116, 0, 0, 13, 14, 15, 16,
- 0, 0, 0, 0, 17, 18, 19, 20, 21, 0,
- 0, 0, 22, 23, 24, 25, 26, 0, 0, 117,
- 118, 119, 2, 29, 30, 0, 31, 3, 32, 4,
- 5, 6, 7, 0, 0, 8, 9, 10, 0, 0,
- 0, 11, 12, 0, 13, 14, 15, 16, 0, 0,
- 0, 0, 17, 18, 19, 20, 21, 0, 0, 0,
- 22, 23, 24, 25, 26, 0, 0, 0, 123, 0,
- 2, 29, 30, 0, 31, 3, 32, 4, 5, 6,
- 7, 0, 0, 8, 9, 10, 0, 0, 0, 11,
- 12, 0, 13, 14, 15, 16, 0, 0, 0, 0,
- 17, 18, 19, 20, 21, 0, 0, 0, 22, 23,
- 24, 25, 26, 0, 0, 0, 0, 0, 2, 29,
- 30, 0, 31, 3, 32, 4, 5, 6, 7, 0,
- 0, 8, 9, 10, 0, 0, 0, 0, 12, 0,
- 13, 14, 15, 16, 0, 0, 0, 0, 17, 18,
- 19, 20, 21, 0, 0, 0, 22, 23, 24, 25,
- 26, 0, 0, 0, 0, 0, 2, 29, 30, 0,
- 31, 3, 32, 4, 5, 6, 7, 0, 0, 8,
+ 64, 65, 53, 116, 69, 52, 258, 151, 199, 273,
+ 56, 141, 138, 140, 250, 145, 253, 143, 149, 125,
+ 224, 225, 226, 71, 126, 274, 111, 112, 262, 263,
+ 264, 265, 266, 116, 2, 61, 60, 134, 115, 3,
+ 62, 4, 5, 6, 7, 292, 128, 129, 130, 10,
+ 134, 289, 301, 142, 286, 287, 2, 63, 275, 66,
+ 17, 3, 150, 4, 5, 6, 7, 132, 274, 115,
+ 70, 10, 97, 186, 187, 98, 73, 190, 191, 74,
+ 101, 185, 17, 102, 153, 303, 237, 32, 216, 33,
+ 95, 200, 304, 134, 157, 206, 207, 158, 303, 118,
+ 119, 275, 99, 134, 96, 319, 217, 121, 122, 32,
+ 103, 33, 194, 195, 116, 185, 264, 265, 266, 246,
+ 329, 225, 134, 100, 159, 53, 53, 193, 238, 189,
+ 201, 208, 248, 337, 338, 204, 205, 202, 209, 192,
+ 211, 212, 113, 308, 214, 240, 228, 229, 230, 231,
+ 232, 236, 257, 161, 133, 134, 162, 242, 104, 105,
+ 251, 247, 251, 323, 106, 256, 134, 134, 134, 128,
+ 129, 130, 203, 210, 249, 327, 107, 108, 116, 134,
+ 185, 109, 110, 163, 139, 309, 144, 272, 53, 53,
+ 171, 218, 219, 172, 282, 239, 281, 243, 146, 134,
+ 251, 251, 222, 223, 280, 324, 175, 290, 147, 176,
+ 152, 134, 214, 268, 269, 270, 148, 328, 259, 260,
+ 173, 185, 53, 53, 155, 154, 189, 156, 128, 129,
+ 130, 277, 278, 307, 160, 164, 177, 194, 195, 165,
+ 284, 285, 314, 166, 167, 121, 122, 316, 317, 318,
+ 168, 214, 169, 196, 197, 198, 322, 114, 14, 15,
+ 16, 123, 124, 298, 299, 300, 18, 19, 20, 21,
+ 22, 332, 170, 174, 23, 24, 25, 26, 27, 251,
+ 251, 178, 179, 180, 181, 30, 31, 182, 315, 75,
+ 76, 77, 78, 79, 183, 184, 244, 80, 321, 213,
+ 81, 82, 325, 326, 240, 254, 245, 255, 83, 84,
+ 261, 267, 279, 331, 288, 293, 294, 333, 334, 1,
+ 283, 2, 291, 339, 305, 274, 3, 306, 4, 5,
+ 6, 7, 310, 311, 8, 9, 10, 312, 320, 313,
+ 11, 12, 335, 13, 14, 15, 16, 17, 336, 340,
+ 341, 342, 18, 19, 20, 21, 22, 252, 343, 68,
+ 23, 24, 25, 26, 27, 330, 271, 302, 28, 29,
+ 2, 30, 31, 72, 32, 3, 33, 4, 5, 6,
+ 7, 0, 0, 8, 9, 10, 0, 0, 0, 127,
+ 0, 0, 13, 14, 15, 16, 17, 0, 0, 0,
+ 0, 18, 19, 20, 21, 22, 0, 0, 0, 23,
+ 24, 25, 26, 27, 0, 0, 128, 129, 130, 2,
+ 30, 31, 0, 32, 3, 33, 4, 5, 6, 7,
+ 0, 0, 8, 9, 10, 0, 0, 0, 11, 12,
+ 0, 13, 14, 15, 16, 17, 0, 0, 0, 0,
+ 18, 19, 20, 21, 22, 0, 0, 0, 23, 24,
+ 25, 26, 27, 0, 0, 0, 134, 0, 2, 30,
+ 31, 0, 32, 3, 33, 4, 5, 6, 7, 0,
+ 0, 8, 9, 10, 0, 0, 0, 11, 12, 0,
+ 13, 14, 15, 16, 17, 0, 0, 0, 0, 18,
+ 19, 20, 21, 22, 0, 0, 0, 23, 24, 25,
+ 26, 27, 0, 0, 0, 0, 0, 2, 30, 31,
+ 0, 32, 3, 33, 4, 5, 6, 7, 0, 0,
+ 8, 9, 10, 0, 0, 0, 0, 12, 0, 13,
+ 14, 15, 16, 17, 0, 0, 0, 0, 18, 19,
+ 20, 21, 22, 0, 0, 0, 23, 24, 25, 26,
+ 27, 0, 0, 0, 0, 0, 2, 30, 31, 0,
+ 32, 3, 33, 4, 5, 6, 7, 0, 0, 8,
9, 10, 0, 0, 0, 0, 0, 0, 13, 14,
- 15, 16, 0, 0, 0, 0, 17, 18, 19, 20,
- 21, 0, 0, 0, 22, 23, 24, 25, 26, 0,
- 0, 0, 123, 0, 2, 29, 30, 0, 31, 3,
- 32, 4, 5, 6, 7, 0, 0, 8, 9, 10,
- 0, 0, 0, 0, 0, 0, 13, 14, 15, 16,
- 0, 0, 0, 0, 17, 18, 19, 20, 21, 0,
- 0, 0, 22, 23, 24, 25, 26, 0, 0, 0,
- 0, 0, 2, 29, 30, 0, 31, 3, 32, 4,
- 5, 6, 7, 0, 0, 0, 0, 10, 0, 0,
- 0, 0, 0, 0, 66, 14, 15, 16, 0, 0,
- 0, 0, 17, 18, 19, 20, 21, 0, 0, 0,
- 22, 23, 24, 25, 26, 0, 0, 0, 0, 0,
- 0, 29, 30, 0, 31, 0, 32, 103, 14, 15,
- 0, 0, 0, 0, 0, 17, 18, 19, 20, 21,
- 0, 0, 0, 22, 23, 24, 25, 26, 74, 75,
- 76, 77, 78, 0, 29, 30, 79, 0, 0, 80,
- 81, 0, 0, 0, 0, 0, 0, 82, 83
+ 15, 16, 17, 0, 0, 0, 0, 18, 19, 20,
+ 21, 22, 0, 0, 0, 23, 24, 25, 26, 27,
+ 0, 0, 0, 134, 0, 2, 30, 31, 0, 32,
+ 3, 33, 4, 5, 6, 7, 0, 0, 8, 9,
+ 10, 0, 0, 0, 0, 0, 0, 13, 14, 15,
+ 16, 17, 0, 0, 0, 0, 18, 19, 20, 21,
+ 22, 0, 0, 0, 23, 24, 25, 26, 27, 0,
+ 0, 0, 0, 0, 2, 30, 31, 0, 32, 3,
+ 33, 4, 5, 6, 7, 0, 0, 0, 0, 10,
+ 0, 0, 0, 0, 0, 0, 67, 14, 15, 16,
+ 17, 0, 0, 0, 0, 18, 19, 20, 21, 22,
+ 0, 0, 0, 23, 24, 25, 26, 27, 0, 0,
+ 0, 0, 0, 0, 30, 31, 0, 32, 0, 33,
+ 15, 16, 0, 0, 0, 0, 0, 18, 19, 20,
+ 21, 22, 0, 0, 0, 23, 24, 25, 26, 27,
+ 85, 86, 87, 88, 89, 0, 30, 31, 90, 0,
+ 0, 91, 92, 0, 0, 0, 0, 0, 0, 93,
+ 94
};
static const yytype_int16 yycheck[] =
{
- 6, 7, 0, 61, 9, 0, 68, 192, 38, 21,
- 46, 36, 183, 30, 185, 51, 203, 204, 205, 206,
- 207, 11, 14, 49, 51, 31, 32, 59, 60, 51,
- 62, 58, 25, 65, 14, 24, 58, 49, 68, 226,
- 3, 21, 67, 31, 32, 8, 231, 10, 11, 12,
- 13, 9, 223, 224, 14, 18, 48, 49, 50, 47,
- 48, 66, 14, 55, 54, 28, 25, 25, 25, 49,
- 29, 25, 9, 49, 50, 55, 106, 139, 110, 111,
- 57, 71, 114, 115, 31, 32, 49, 14, 25, 49,
- 25, 49, 55, 25, 57, 55, 128, 49, 0, 57,
- 132, 133, 25, 55, 291, 292, 293, 31, 32, 139,
- 140, 143, 49, 14, 112, 113, 122, 25, 113, 177,
- 57, 25, 49, 27, 130, 131, 116, 189, 55, 135,
- 136, 302, 303, 138, 5, 6, 14, 169, 170, 171,
- 172, 173, 174, 21, 25, 14, 27, 14, 49, 25,
- 54, 183, 25, 185, 55, 25, 188, 27, 216, 189,
- 25, 191, 27, 161, 162, 25, 161, 162, 25, 227,
- 176, 49, 178, 54, 25, 165, 166, 55, 210, 25,
- 49, 4, 49, 14, 54, 217, 55, 192, 55, 54,
- 48, 223, 224, 199, 200, 48, 25, 195, 196, 14,
- 19, 196, 232, 3, 58, 57, 212, 213, 8, 25,
- 10, 11, 12, 13, 25, 221, 222, 25, 18, 48,
- 49, 50, 25, 25, 256, 58, 231, 25, 28, 5,
- 6, 7, 25, 265, 25, 27, 56, 58, 270, 271,
- 272, 33, 34, 35, 36, 37, 56, 279, 15, 41,
- 42, 43, 44, 45, 15, 55, 25, 57, 31, 32,
- 52, 53, 294, 269, 38, 39, 40, 38, 39, 40,
- 302, 303, 25, 279, 47, 48, 49, 283, 284, 48,
- 49, 50, 15, 7, 9, 15, 56, 15, 294, 7,
- 56, 4, 298, 299, 1, 15, 3, 56, 304, 25,
- 15, 8, 56, 10, 11, 12, 13, 15, 56, 16,
- 17, 18, 15, 25, 56, 22, 23, 15, 25, 26,
- 27, 28, 56, 15, 56, 184, 33, 34, 35, 36,
- 37, 9, 250, 210, 41, 42, 43, 44, 45, 290,
- 11, -1, 49, 50, 3, 52, 53, -1, 55, 8,
- 57, 10, 11, 12, 13, -1, -1, 16, 17, 18,
- -1, -1, -1, 22, -1, -1, 25, 26, 27, 28,
- -1, -1, -1, -1, 33, 34, 35, 36, 37, -1,
- -1, -1, 41, 42, 43, 44, 45, -1, -1, 48,
- 49, 50, 3, 52, 53, -1, 55, 8, 57, 10,
- 11, 12, 13, -1, -1, 16, 17, 18, -1, -1,
- -1, 22, 23, -1, 25, 26, 27, 28, -1, -1,
- -1, -1, 33, 34, 35, 36, 37, -1, -1, -1,
- 41, 42, 43, 44, 45, -1, -1, -1, 49, -1,
- 3, 52, 53, -1, 55, 8, 57, 10, 11, 12,
+ 6, 7, 0, 39, 9, 0, 217, 69, 21, 9,
+ 50, 14, 60, 61, 208, 63, 210, 62, 66, 47,
+ 5, 6, 7, 11, 52, 25, 32, 33, 228, 229,
+ 230, 231, 232, 69, 3, 25, 25, 50, 37, 8,
+ 30, 10, 11, 12, 13, 256, 49, 50, 51, 18,
+ 50, 251, 9, 56, 248, 249, 3, 25, 58, 25,
+ 29, 8, 67, 10, 11, 12, 13, 55, 25, 68,
+ 31, 18, 25, 121, 122, 28, 24, 125, 126, 58,
+ 25, 117, 29, 28, 72, 52, 14, 56, 150, 58,
+ 25, 139, 59, 50, 25, 143, 144, 28, 52, 50,
+ 51, 58, 55, 50, 25, 59, 154, 32, 33, 56,
+ 55, 58, 32, 33, 150, 151, 316, 317, 318, 14,
+ 5, 6, 50, 25, 55, 123, 124, 133, 56, 124,
+ 14, 14, 14, 327, 328, 141, 142, 21, 21, 127,
+ 146, 147, 0, 14, 149, 25, 194, 195, 196, 197,
+ 198, 199, 214, 25, 4, 50, 28, 202, 25, 25,
+ 208, 56, 210, 14, 25, 213, 50, 50, 50, 49,
+ 50, 51, 56, 56, 56, 14, 25, 25, 214, 50,
+ 216, 25, 25, 55, 49, 56, 49, 235, 186, 187,
+ 25, 186, 187, 28, 242, 201, 241, 203, 14, 50,
+ 248, 249, 190, 191, 25, 56, 25, 252, 14, 28,
+ 19, 50, 217, 39, 40, 41, 58, 56, 224, 225,
+ 55, 257, 220, 221, 25, 59, 221, 25, 49, 50,
+ 51, 237, 238, 281, 25, 25, 55, 32, 33, 25,
+ 246, 247, 290, 25, 25, 32, 33, 295, 296, 297,
+ 25, 256, 25, 48, 49, 50, 304, 25, 26, 27,
+ 28, 48, 49, 39, 40, 41, 34, 35, 36, 37,
+ 38, 319, 25, 25, 42, 43, 44, 45, 46, 327,
+ 328, 25, 25, 25, 25, 53, 54, 25, 294, 34,
+ 35, 36, 37, 38, 57, 59, 15, 42, 304, 59,
+ 45, 46, 308, 309, 25, 15, 57, 15, 53, 54,
+ 7, 9, 15, 319, 15, 7, 4, 323, 324, 1,
+ 57, 3, 57, 329, 15, 25, 8, 57, 10, 11,
+ 12, 13, 15, 57, 16, 17, 18, 15, 25, 57,
+ 22, 23, 15, 25, 26, 27, 28, 29, 57, 15,
+ 57, 15, 34, 35, 36, 37, 38, 209, 57, 9,
+ 42, 43, 44, 45, 46, 315, 235, 275, 50, 51,
+ 3, 53, 54, 11, 56, 8, 58, 10, 11, 12,
13, -1, -1, 16, 17, 18, -1, -1, -1, 22,
- 23, -1, 25, 26, 27, 28, -1, -1, -1, -1,
- 33, 34, 35, 36, 37, -1, -1, -1, 41, 42,
- 43, 44, 45, -1, -1, -1, -1, -1, 3, 52,
- 53, -1, 55, 8, 57, 10, 11, 12, 13, -1,
- -1, 16, 17, 18, -1, -1, -1, -1, 23, -1,
- 25, 26, 27, 28, -1, -1, -1, -1, 33, 34,
- 35, 36, 37, -1, -1, -1, 41, 42, 43, 44,
- 45, -1, -1, -1, -1, -1, 3, 52, 53, -1,
- 55, 8, 57, 10, 11, 12, 13, -1, -1, 16,
+ -1, -1, 25, 26, 27, 28, 29, -1, -1, -1,
+ -1, 34, 35, 36, 37, 38, -1, -1, -1, 42,
+ 43, 44, 45, 46, -1, -1, 49, 50, 51, 3,
+ 53, 54, -1, 56, 8, 58, 10, 11, 12, 13,
+ -1, -1, 16, 17, 18, -1, -1, -1, 22, 23,
+ -1, 25, 26, 27, 28, 29, -1, -1, -1, -1,
+ 34, 35, 36, 37, 38, -1, -1, -1, 42, 43,
+ 44, 45, 46, -1, -1, -1, 50, -1, 3, 53,
+ 54, -1, 56, 8, 58, 10, 11, 12, 13, -1,
+ -1, 16, 17, 18, -1, -1, -1, 22, 23, -1,
+ 25, 26, 27, 28, 29, -1, -1, -1, -1, 34,
+ 35, 36, 37, 38, -1, -1, -1, 42, 43, 44,
+ 45, 46, -1, -1, -1, -1, -1, 3, 53, 54,
+ -1, 56, 8, 58, 10, 11, 12, 13, -1, -1,
+ 16, 17, 18, -1, -1, -1, -1, 23, -1, 25,
+ 26, 27, 28, 29, -1, -1, -1, -1, 34, 35,
+ 36, 37, 38, -1, -1, -1, 42, 43, 44, 45,
+ 46, -1, -1, -1, -1, -1, 3, 53, 54, -1,
+ 56, 8, 58, 10, 11, 12, 13, -1, -1, 16,
17, 18, -1, -1, -1, -1, -1, -1, 25, 26,
- 27, 28, -1, -1, -1, -1, 33, 34, 35, 36,
- 37, -1, -1, -1, 41, 42, 43, 44, 45, -1,
- -1, -1, 49, -1, 3, 52, 53, -1, 55, 8,
- 57, 10, 11, 12, 13, -1, -1, 16, 17, 18,
+ 27, 28, 29, -1, -1, -1, -1, 34, 35, 36,
+ 37, 38, -1, -1, -1, 42, 43, 44, 45, 46,
+ -1, -1, -1, 50, -1, 3, 53, 54, -1, 56,
+ 8, 58, 10, 11, 12, 13, -1, -1, 16, 17,
+ 18, -1, -1, -1, -1, -1, -1, 25, 26, 27,
+ 28, 29, -1, -1, -1, -1, 34, 35, 36, 37,
+ 38, -1, -1, -1, 42, 43, 44, 45, 46, -1,
+ -1, -1, -1, -1, 3, 53, 54, -1, 56, 8,
+ 58, 10, 11, 12, 13, -1, -1, -1, -1, 18,
-1, -1, -1, -1, -1, -1, 25, 26, 27, 28,
- -1, -1, -1, -1, 33, 34, 35, 36, 37, -1,
- -1, -1, 41, 42, 43, 44, 45, -1, -1, -1,
- -1, -1, 3, 52, 53, -1, 55, 8, 57, 10,
- 11, 12, 13, -1, -1, -1, -1, 18, -1, -1,
- -1, -1, -1, -1, 25, 26, 27, 28, -1, -1,
- -1, -1, 33, 34, 35, 36, 37, -1, -1, -1,
- 41, 42, 43, 44, 45, -1, -1, -1, -1, -1,
- -1, 52, 53, -1, 55, -1, 57, 25, 26, 27,
- -1, -1, -1, -1, -1, 33, 34, 35, 36, 37,
- -1, -1, -1, 41, 42, 43, 44, 45, 33, 34,
- 35, 36, 37, -1, 52, 53, 41, -1, -1, 44,
- 45, -1, -1, -1, -1, -1, -1, 52, 53
+ 29, -1, -1, -1, -1, 34, 35, 36, 37, 38,
+ -1, -1, -1, 42, 43, 44, 45, 46, -1, -1,
+ -1, -1, -1, -1, 53, 54, -1, 56, -1, 58,
+ 27, 28, -1, -1, -1, -1, -1, 34, 35, 36,
+ 37, 38, -1, -1, -1, 42, 43, 44, 45, 46,
+ 34, 35, 36, 37, 38, -1, 53, 54, 42, -1,
+ -1, 45, 46, -1, -1, -1, -1, -1, -1, 53,
+ 54
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1229,37 +1259,40 @@ static const yytype_int16 yycheck[] =
static const yytype_uint8 yystos[] =
{
0, 1, 3, 8, 10, 11, 12, 13, 16, 17,
- 18, 22, 23, 25, 26, 27, 28, 33, 34, 35,
- 36, 37, 41, 42, 43, 44, 45, 49, 50, 52,
- 53, 55, 57, 60, 62, 63, 65, 66, 67, 68,
- 69, 70, 71, 72, 74, 75, 76, 77, 78, 79,
- 92, 93, 94, 95, 96, 49, 85, 86, 91, 25,
- 25, 29, 25, 86, 86, 25, 25, 65, 67, 30,
- 95, 96, 24, 57, 33, 34, 35, 36, 37, 41,
- 44, 45, 52, 53, 25, 25, 25, 27, 54, 25,
- 25, 27, 54, 25, 25, 25, 25, 25, 25, 25,
- 86, 86, 0, 25, 63, 62, 64, 49, 50, 89,
- 31, 32, 47, 48, 46, 51, 22, 48, 49, 50,
- 90, 95, 4, 49, 87, 88, 94, 91, 48, 91,
- 14, 55, 90, 48, 91, 14, 14, 57, 91, 67,
- 64, 19, 95, 58, 25, 25, 25, 27, 54, 25,
- 25, 27, 54, 25, 25, 25, 25, 25, 56, 58,
- 62, 91, 91, 93, 93, 91, 91, 95, 86, 31,
- 32, 47, 48, 49, 21, 91, 14, 21, 55, 86,
- 86, 91, 91, 14, 21, 55, 86, 86, 58, 67,
- 73, 64, 91, 93, 93, 47, 48, 95, 95, 5,
- 6, 7, 80, 91, 91, 91, 91, 91, 81, 82,
- 83, 91, 14, 55, 86, 25, 61, 90, 86, 15,
- 56, 14, 55, 14, 55, 85, 91, 61, 85, 15,
- 15, 91, 64, 73, 86, 86, 7, 88, 88, 88,
- 88, 88, 9, 38, 39, 40, 82, 91, 9, 25,
- 57, 84, 86, 86, 15, 25, 90, 91, 56, 86,
- 86, 85, 85, 15, 88, 90, 56, 73, 7, 4,
- 47, 48, 49, 38, 39, 40, 9, 84, 51, 58,
- 15, 56, 91, 14, 55, 15, 56, 15, 56, 91,
- 86, 91, 91, 91, 58, 25, 86, 91, 14, 55,
- 86, 86, 14, 55, 5, 80, 86, 91, 86, 86,
- 15, 56, 85, 85, 86, 15, 56, 15, 56
+ 18, 22, 23, 25, 26, 27, 28, 29, 34, 35,
+ 36, 37, 38, 42, 43, 44, 45, 46, 50, 51,
+ 53, 54, 56, 58, 61, 63, 64, 66, 67, 68,
+ 69, 70, 71, 72, 73, 75, 76, 77, 78, 79,
+ 80, 93, 94, 95, 96, 97, 50, 86, 87, 92,
+ 25, 25, 30, 25, 87, 87, 25, 25, 66, 68,
+ 31, 96, 97, 24, 58, 34, 35, 36, 37, 38,
+ 42, 45, 46, 53, 54, 34, 35, 36, 37, 38,
+ 42, 45, 46, 53, 54, 25, 25, 25, 28, 55,
+ 25, 25, 28, 55, 25, 25, 25, 25, 25, 25,
+ 25, 87, 87, 0, 25, 64, 63, 65, 50, 51,
+ 90, 32, 33, 48, 49, 47, 52, 22, 49, 50,
+ 51, 91, 96, 4, 50, 88, 89, 95, 92, 49,
+ 92, 14, 56, 91, 49, 92, 14, 14, 58, 92,
+ 68, 65, 19, 96, 59, 25, 25, 25, 28, 55,
+ 25, 25, 28, 55, 25, 25, 25, 25, 25, 25,
+ 25, 25, 28, 55, 25, 25, 28, 55, 25, 25,
+ 25, 25, 25, 57, 59, 63, 92, 92, 94, 94,
+ 92, 92, 96, 87, 32, 33, 48, 49, 50, 21,
+ 92, 14, 21, 56, 87, 87, 92, 92, 14, 21,
+ 56, 87, 87, 59, 68, 74, 65, 92, 94, 94,
+ 48, 49, 96, 96, 5, 6, 7, 81, 92, 92,
+ 92, 92, 92, 82, 83, 84, 92, 14, 56, 87,
+ 25, 62, 91, 87, 15, 57, 14, 56, 14, 56,
+ 86, 92, 62, 86, 15, 15, 92, 65, 74, 87,
+ 87, 7, 89, 89, 89, 89, 89, 9, 39, 40,
+ 41, 83, 92, 9, 25, 58, 85, 87, 87, 15,
+ 25, 91, 92, 57, 87, 87, 86, 86, 15, 89,
+ 91, 57, 74, 7, 4, 48, 49, 50, 39, 40,
+ 41, 9, 85, 52, 59, 15, 57, 92, 14, 56,
+ 15, 57, 15, 57, 92, 87, 92, 92, 92, 59,
+ 25, 87, 92, 14, 56, 87, 87, 14, 56, 5,
+ 81, 87, 92, 87, 87, 15, 57, 86, 86, 87,
+ 15, 57, 15, 57
};
#define yyerrok (yyerrstatus = 0)
@@ -2074,7 +2107,7 @@ yyreduce:
switch (yyn)
{
case 2:
-#line 370 "/Users/chet/src/bash/src/parse.y"
+#line 374 "/Users/chet/src/bash/src/parse.y"
{
/* Case of regular command. Discard the error
safety net,and return the command just parsed. */
@@ -2088,7 +2121,7 @@ yyreduce:
break;
case 3:
-#line 381 "/Users/chet/src/bash/src/parse.y"
+#line 385 "/Users/chet/src/bash/src/parse.y"
{
/* Case of regular command, but not a very
interesting one. Return a NULL command. */
@@ -2100,7 +2133,7 @@ yyreduce:
break;
case 4:
-#line 390 "/Users/chet/src/bash/src/parse.y"
+#line 394 "/Users/chet/src/bash/src/parse.y"
{
/* Error during parsing. Return NULL command. */
global_command = (COMMAND *)NULL;
@@ -2118,7 +2151,7 @@ yyreduce:
break;
case 5:
-#line 405 "/Users/chet/src/bash/src/parse.y"
+#line 409 "/Users/chet/src/bash/src/parse.y"
{
/* Case of EOF seen by itself. Do ignoreeof or
not. */
@@ -2129,285 +2162,441 @@ yyreduce:
break;
case 6:
-#line 415 "/Users/chet/src/bash/src/parse.y"
+#line 419 "/Users/chet/src/bash/src/parse.y"
{ (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
break;
case 7:
-#line 417 "/Users/chet/src/bash/src/parse.y"
+#line 421 "/Users/chet/src/bash/src/parse.y"
{ (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
break;
case 8:
-#line 421 "/Users/chet/src/bash/src/parse.y"
+#line 425 "/Users/chet/src/bash/src/parse.y"
{
+ source.dest = 1;
redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (1, r_output_direction, redir);
+ (yyval.redirect) = make_redirection (source, r_output_direction, redir, 0);
}
break;
case 9:
-#line 426 "/Users/chet/src/bash/src/parse.y"
+#line 431 "/Users/chet/src/bash/src/parse.y"
{
+ source.dest = 0;
redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (0, r_input_direction, redir);
+ (yyval.redirect) = make_redirection (source, r_input_direction, redir, 0);
}
break;
case 10:
-#line 431 "/Users/chet/src/bash/src/parse.y"
+#line 437 "/Users/chet/src/bash/src/parse.y"
{
+ source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_output_direction, redir);
+ (yyval.redirect) = make_redirection (source, r_output_direction, redir, 0);
}
break;
case 11:
-#line 436 "/Users/chet/src/bash/src/parse.y"
+#line 443 "/Users/chet/src/bash/src/parse.y"
{
+ source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_input_direction, redir);
+ (yyval.redirect) = make_redirection (source, r_input_direction, redir, 0);
}
break;
case 12:
-#line 441 "/Users/chet/src/bash/src/parse.y"
+#line 449 "/Users/chet/src/bash/src/parse.y"
{
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (1, r_appending_to, redir);
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_output_direction, redir, REDIR_VARASSIGN);
}
break;
case 13:
-#line 446 "/Users/chet/src/bash/src/parse.y"
+#line 455 "/Users/chet/src/bash/src/parse.y"
{
+ source.filename = (yyvsp[(1) - (3)].word);
redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_appending_to, redir);
+ (yyval.redirect) = make_redirection (source, r_input_direction, redir, REDIR_VARASSIGN);
}
break;
case 14:
-#line 451 "/Users/chet/src/bash/src/parse.y"
+#line 461 "/Users/chet/src/bash/src/parse.y"
{
+ source.dest = 1;
redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (0, r_reading_until, redir);
- redir_stack[need_here_doc++] = (yyval.redirect);
+ (yyval.redirect) = make_redirection (source, r_appending_to, redir, 0);
}
break;
case 15:
-#line 457 "/Users/chet/src/bash/src/parse.y"
+#line 467 "/Users/chet/src/bash/src/parse.y"
{
+ source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_reading_until, redir);
- redir_stack[need_here_doc++] = (yyval.redirect);
+ (yyval.redirect) = make_redirection (source, r_appending_to, redir, 0);
}
break;
case 16:
-#line 463 "/Users/chet/src/bash/src/parse.y"
+#line 473 "/Users/chet/src/bash/src/parse.y"
{
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (0, r_reading_string, redir);
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_appending_to, redir, REDIR_VARASSIGN);
}
break;
case 17:
-#line 468 "/Users/chet/src/bash/src/parse.y"
+#line 479 "/Users/chet/src/bash/src/parse.y"
{
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_reading_string, redir);
+ source.dest = 1;
+ redir.filename = (yyvsp[(2) - (2)].word);
+ (yyval.redirect) = make_redirection (source, r_output_force, redir, 0);
}
break;
case 18:
-#line 473 "/Users/chet/src/bash/src/parse.y"
+#line 485 "/Users/chet/src/bash/src/parse.y"
{
- redir.dest = (yyvsp[(2) - (2)].number);
- (yyval.redirect) = make_redirection (0, r_duplicating_input, redir);
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_output_force, redir, 0);
}
break;
case 19:
-#line 478 "/Users/chet/src/bash/src/parse.y"
+#line 491 "/Users/chet/src/bash/src/parse.y"
{
- redir.dest = (yyvsp[(3) - (3)].number);
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_duplicating_input, redir);
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_output_force, redir, REDIR_VARASSIGN);
}
break;
case 20:
-#line 483 "/Users/chet/src/bash/src/parse.y"
+#line 497 "/Users/chet/src/bash/src/parse.y"
{
- redir.dest = (yyvsp[(2) - (2)].number);
- (yyval.redirect) = make_redirection (1, r_duplicating_output, redir);
+ source.dest = 0;
+ redir.filename = (yyvsp[(2) - (2)].word);
+ (yyval.redirect) = make_redirection (source, r_input_output, redir, 0);
}
break;
case 21:
-#line 488 "/Users/chet/src/bash/src/parse.y"
+#line 503 "/Users/chet/src/bash/src/parse.y"
{
- redir.dest = (yyvsp[(3) - (3)].number);
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_duplicating_output, redir);
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_input_output, redir, 0);
}
break;
case 22:
-#line 493 "/Users/chet/src/bash/src/parse.y"
+#line 509 "/Users/chet/src/bash/src/parse.y"
{
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (0, r_duplicating_input_word, redir);
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_input_output, redir, REDIR_VARASSIGN);
}
break;
case 23:
-#line 498 "/Users/chet/src/bash/src/parse.y"
+#line 515 "/Users/chet/src/bash/src/parse.y"
{
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_duplicating_input_word, redir);
+ source.dest = 0;
+ redir.filename = (yyvsp[(2) - (2)].word);
+ (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
+ redir_stack[need_here_doc++] = (yyval.redirect);
}
break;
case 24:
-#line 503 "/Users/chet/src/bash/src/parse.y"
+#line 522 "/Users/chet/src/bash/src/parse.y"
{
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (1, r_duplicating_output_word, redir);
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
+ redir_stack[need_here_doc++] = (yyval.redirect);
}
break;
case 25:
-#line 508 "/Users/chet/src/bash/src/parse.y"
+#line 529 "/Users/chet/src/bash/src/parse.y"
{
+ source.filename = (yyvsp[(1) - (3)].word);
redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_duplicating_output_word, redir);
+ (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
+ redir_stack[need_here_doc++] = (yyval.redirect);
}
break;
case 26:
-#line 513 "/Users/chet/src/bash/src/parse.y"
+#line 536 "/Users/chet/src/bash/src/parse.y"
{
+ source.dest = 0;
redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection
- (0, r_deblank_reading_until, redir);
+ (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
redir_stack[need_here_doc++] = (yyval.redirect);
}
break;
case 27:
-#line 520 "/Users/chet/src/bash/src/parse.y"
+#line 543 "/Users/chet/src/bash/src/parse.y"
{
+ source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection
- ((yyvsp[(1) - (3)].number), r_deblank_reading_until, redir);
+ (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
redir_stack[need_here_doc++] = (yyval.redirect);
}
break;
case 28:
-#line 527 "/Users/chet/src/bash/src/parse.y"
+#line 550 "/Users/chet/src/bash/src/parse.y"
{
- redir.dest = 0;
- (yyval.redirect) = make_redirection (1, r_close_this, redir);
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
+ redir_stack[need_here_doc++] = (yyval.redirect);
}
break;
case 29:
-#line 532 "/Users/chet/src/bash/src/parse.y"
+#line 557 "/Users/chet/src/bash/src/parse.y"
{
- redir.dest = 0;
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_close_this, redir);
+ source.dest = 0;
+ redir.filename = (yyvsp[(2) - (2)].word);
+ (yyval.redirect) = make_redirection (source, r_reading_string, redir, 0);
}
break;
case 30:
-#line 537 "/Users/chet/src/bash/src/parse.y"
+#line 563 "/Users/chet/src/bash/src/parse.y"
{
- redir.dest = 0;
- (yyval.redirect) = make_redirection (0, r_close_this, redir);
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_reading_string, redir, 0);
}
break;
case 31:
-#line 542 "/Users/chet/src/bash/src/parse.y"
+#line 569 "/Users/chet/src/bash/src/parse.y"
{
- redir.dest = 0;
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_close_this, redir);
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_reading_string, redir, REDIR_VARASSIGN);
}
break;
case 32:
-#line 547 "/Users/chet/src/bash/src/parse.y"
+#line 575 "/Users/chet/src/bash/src/parse.y"
{
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (1, r_err_and_out, redir);
+ source.dest = 0;
+ redir.dest = (yyvsp[(2) - (2)].number);
+ (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, 0);
}
break;
case 33:
-#line 552 "/Users/chet/src/bash/src/parse.y"
+#line 581 "/Users/chet/src/bash/src/parse.y"
{
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (1, r_append_err_and_out, redir);
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.dest = (yyvsp[(3) - (3)].number);
+ (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, 0);
}
break;
case 34:
-#line 557 "/Users/chet/src/bash/src/parse.y"
+#line 587 "/Users/chet/src/bash/src/parse.y"
{
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_input_output, redir);
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.dest = (yyvsp[(3) - (3)].number);
+ (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, REDIR_VARASSIGN);
}
break;
case 35:
-#line 562 "/Users/chet/src/bash/src/parse.y"
+#line 593 "/Users/chet/src/bash/src/parse.y"
{
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (0, r_input_output, redir);
+ source.dest = 1;
+ redir.dest = (yyvsp[(2) - (2)].number);
+ (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, 0);
}
break;
case 36:
-#line 567 "/Users/chet/src/bash/src/parse.y"
+#line 599 "/Users/chet/src/bash/src/parse.y"
{
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (1, r_output_force, redir);
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.dest = (yyvsp[(3) - (3)].number);
+ (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, 0);
}
break;
case 37:
-#line 572 "/Users/chet/src/bash/src/parse.y"
+#line 605 "/Users/chet/src/bash/src/parse.y"
{
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection ((yyvsp[(1) - (3)].number), r_output_force, redir);
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.dest = (yyvsp[(3) - (3)].number);
+ (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, REDIR_VARASSIGN);
}
break;
case 38:
-#line 579 "/Users/chet/src/bash/src/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
+#line 611 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.dest = 0;
+ redir.filename = (yyvsp[(2) - (2)].word);
+ (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, 0);
+ }
break;
case 39:
-#line 581 "/Users/chet/src/bash/src/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
+#line 617 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, 0);
+ }
break;
case 40:
-#line 583 "/Users/chet/src/bash/src/parse.y"
- { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
+#line 623 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, REDIR_VARASSIGN);
+ }
break;
case 41:
-#line 587 "/Users/chet/src/bash/src/parse.y"
+#line 629 "/Users/chet/src/bash/src/parse.y"
{
- (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
+ source.dest = 1;
+ redir.filename = (yyvsp[(2) - (2)].word);
+ (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, 0);
}
break;
case 42:
-#line 591 "/Users/chet/src/bash/src/parse.y"
+#line 635 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, 0);
+ }
+ break;
+
+ case 43:
+#line 641 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.filename = (yyvsp[(3) - (3)].word);
+ (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, REDIR_VARASSIGN);
+ }
+ break;
+
+ case 44:
+#line 647 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.dest = 1;
+ redir.dest = 0;
+ (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
+ }
+ break;
+
+ case 45:
+#line 653 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.dest = 0;
+ (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
+ }
+ break;
+
+ case 46:
+#line 659 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.dest = 0;
+ (yyval.redirect) = make_redirection (source, r_close_this, redir, REDIR_VARASSIGN);
+ }
+ break;
+
+ case 47:
+#line 665 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.dest = 0;
+ redir.dest = 0;
+ (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
+ }
+ break;
+
+ case 48:
+#line 671 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.dest = (yyvsp[(1) - (3)].number);
+ redir.dest = 0;
+ (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
+ }
+ break;
+
+ case 49:
+#line 677 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.filename = (yyvsp[(1) - (3)].word);
+ redir.dest = 0;
+ (yyval.redirect) = make_redirection (source, r_close_this, redir, REDIR_VARASSIGN);
+ }
+ break;
+
+ case 50:
+#line 683 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.dest = 1;
+ redir.filename = (yyvsp[(2) - (2)].word);
+ (yyval.redirect) = make_redirection (source, r_err_and_out, redir, 0);
+ }
+ break;
+
+ case 51:
+#line 689 "/Users/chet/src/bash/src/parse.y"
+ {
+ source.dest = 1;
+ redir.filename = (yyvsp[(2) - (2)].word);
+ (yyval.redirect) = make_redirection (source, r_append_err_and_out, redir, 0);
+ }
+ break;
+
+ case 52:
+#line 697 "/Users/chet/src/bash/src/parse.y"
+ { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
+ break;
+
+ case 53:
+#line 699 "/Users/chet/src/bash/src/parse.y"
+ { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
+ break;
+
+ case 54:
+#line 701 "/Users/chet/src/bash/src/parse.y"
+ { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
+ break;
+
+ case 55:
+#line 705 "/Users/chet/src/bash/src/parse.y"
+ {
+ (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
+ }
+ break;
+
+ case 56:
+#line 709 "/Users/chet/src/bash/src/parse.y"
{
register REDIRECT *t;
@@ -2418,28 +2607,28 @@ yyreduce:
}
break;
- case 43:
-#line 602 "/Users/chet/src/bash/src/parse.y"
+ case 57:
+#line 720 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
break;
- case 44:
-#line 604 "/Users/chet/src/bash/src/parse.y"
+ case 58:
+#line 722 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
break;
- case 45:
-#line 608 "/Users/chet/src/bash/src/parse.y"
+ case 59:
+#line 726 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
break;
- case 46:
-#line 610 "/Users/chet/src/bash/src/parse.y"
+ case 60:
+#line 728 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 47:
-#line 612 "/Users/chet/src/bash/src/parse.y"
+ case 61:
+#line 730 "/Users/chet/src/bash/src/parse.y"
{
COMMAND *tc;
@@ -2457,261 +2646,261 @@ yyreduce:
}
break;
- case 48:
-#line 628 "/Users/chet/src/bash/src/parse.y"
+ case 62:
+#line 746 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 49:
-#line 630 "/Users/chet/src/bash/src/parse.y"
+ case 63:
+#line 748 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 50:
-#line 634 "/Users/chet/src/bash/src/parse.y"
+ case 64:
+#line 752 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 51:
-#line 636 "/Users/chet/src/bash/src/parse.y"
+ case 65:
+#line 754 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 52:
-#line 638 "/Users/chet/src/bash/src/parse.y"
+ case 66:
+#line 756 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
break;
- case 53:
-#line 640 "/Users/chet/src/bash/src/parse.y"
+ case 67:
+#line 758 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
break;
- case 54:
-#line 642 "/Users/chet/src/bash/src/parse.y"
+ case 68:
+#line 760 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 55:
-#line 644 "/Users/chet/src/bash/src/parse.y"
+ case 69:
+#line 762 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 56:
-#line 646 "/Users/chet/src/bash/src/parse.y"
+ case 70:
+#line 764 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 57:
-#line 648 "/Users/chet/src/bash/src/parse.y"
+ case 71:
+#line 766 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 58:
-#line 650 "/Users/chet/src/bash/src/parse.y"
+ case 72:
+#line 768 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 59:
-#line 652 "/Users/chet/src/bash/src/parse.y"
+ case 73:
+#line 770 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 60:
-#line 654 "/Users/chet/src/bash/src/parse.y"
+ case 74:
+#line 772 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 61:
-#line 658 "/Users/chet/src/bash/src/parse.y"
+ case 75:
+#line 776 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 62:
-#line 663 "/Users/chet/src/bash/src/parse.y"
+ case 76:
+#line 781 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 63:
-#line 668 "/Users/chet/src/bash/src/parse.y"
+ case 77:
+#line 786 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 64:
-#line 673 "/Users/chet/src/bash/src/parse.y"
+ case 78:
+#line 791 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 65:
-#line 678 "/Users/chet/src/bash/src/parse.y"
+ case 79:
+#line 796 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 66:
-#line 683 "/Users/chet/src/bash/src/parse.y"
+ case 80:
+#line 801 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 67:
-#line 688 "/Users/chet/src/bash/src/parse.y"
+ case 81:
+#line 806 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 68:
-#line 693 "/Users/chet/src/bash/src/parse.y"
+ case 82:
+#line 811 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 69:
-#line 700 "/Users/chet/src/bash/src/parse.y"
+ case 83:
+#line 818 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
if (word_top > 0) word_top--;
}
break;
- case 70:
-#line 705 "/Users/chet/src/bash/src/parse.y"
+ case 84:
+#line 823 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
if (word_top > 0) word_top--;
}
break;
- case 71:
-#line 710 "/Users/chet/src/bash/src/parse.y"
+ case 85:
+#line 828 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
if (word_top > 0) word_top--;
}
break;
- case 72:
-#line 715 "/Users/chet/src/bash/src/parse.y"
+ case 86:
+#line 833 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
if (word_top > 0) word_top--;
}
break;
- case 73:
-#line 722 "/Users/chet/src/bash/src/parse.y"
+ case 87:
+#line 840 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 74:
-#line 727 "/Users/chet/src/bash/src/parse.y"
+ case 88:
+#line 845 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 75:
-#line 732 "/Users/chet/src/bash/src/parse.y"
+ case 89:
+#line 850 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 76:
-#line 737 "/Users/chet/src/bash/src/parse.y"
+ case 90:
+#line 855 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 77:
-#line 742 "/Users/chet/src/bash/src/parse.y"
+ case 91:
+#line 860 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 78:
-#line 747 "/Users/chet/src/bash/src/parse.y"
+ case 92:
+#line 865 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 79:
-#line 754 "/Users/chet/src/bash/src/parse.y"
+ case 93:
+#line 872 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 80:
-#line 759 "/Users/chet/src/bash/src/parse.y"
+ case 94:
+#line 877 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 81:
-#line 764 "/Users/chet/src/bash/src/parse.y"
+ case 95:
+#line 882 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
if (word_top > 0) word_top--;
}
break;
- case 82:
-#line 771 "/Users/chet/src/bash/src/parse.y"
+ case 96:
+#line 889 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
break;
- case 83:
-#line 774 "/Users/chet/src/bash/src/parse.y"
+ case 97:
+#line 892 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
break;
- case 84:
-#line 777 "/Users/chet/src/bash/src/parse.y"
+ case 98:
+#line 895 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
break;
- case 85:
-#line 781 "/Users/chet/src/bash/src/parse.y"
+ case 99:
+#line 899 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 86:
-#line 783 "/Users/chet/src/bash/src/parse.y"
+ case 100:
+#line 901 "/Users/chet/src/bash/src/parse.y"
{
COMMAND *tc;
@@ -2742,24 +2931,24 @@ yyreduce:
}
break;
- case 87:
-#line 814 "/Users/chet/src/bash/src/parse.y"
+ case 101:
+#line 932 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
(yyval.command)->flags |= CMD_WANT_SUBSHELL;
}
break;
- case 88:
-#line 821 "/Users/chet/src/bash/src/parse.y"
+ case 102:
+#line 939 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
(yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
}
break;
- case 89:
-#line 826 "/Users/chet/src/bash/src/parse.y"
+ case 103:
+#line 944 "/Users/chet/src/bash/src/parse.y"
{
COMMAND *tc;
@@ -2778,16 +2967,16 @@ yyreduce:
}
break;
- case 90:
-#line 843 "/Users/chet/src/bash/src/parse.y"
+ case 104:
+#line 961 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
(yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
}
break;
- case 91:
-#line 848 "/Users/chet/src/bash/src/parse.y"
+ case 105:
+#line 966 "/Users/chet/src/bash/src/parse.y"
{
COMMAND *tc;
@@ -2806,126 +2995,126 @@ yyreduce:
}
break;
- case 92:
-#line 865 "/Users/chet/src/bash/src/parse.y"
+ case 106:
+#line 983 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
(yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
}
break;
- case 93:
-#line 872 "/Users/chet/src/bash/src/parse.y"
+ case 107:
+#line 990 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
break;
- case 94:
-#line 874 "/Users/chet/src/bash/src/parse.y"
+ case 108:
+#line 992 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
break;
- case 95:
-#line 876 "/Users/chet/src/bash/src/parse.y"
+ case 109:
+#line 994 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
break;
- case 96:
-#line 881 "/Users/chet/src/bash/src/parse.y"
+ case 110:
+#line 999 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
break;
- case 97:
-#line 885 "/Users/chet/src/bash/src/parse.y"
+ case 111:
+#line 1003 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
break;
- case 98:
-#line 889 "/Users/chet/src/bash/src/parse.y"
+ case 112:
+#line 1007 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(2) - (3)].command); }
break;
- case 99:
-#line 893 "/Users/chet/src/bash/src/parse.y"
+ case 113:
+#line 1011 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
break;
- case 100:
-#line 895 "/Users/chet/src/bash/src/parse.y"
+ case 114:
+#line 1013 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
break;
- case 101:
-#line 897 "/Users/chet/src/bash/src/parse.y"
+ case 115:
+#line 1015 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
break;
- case 103:
-#line 902 "/Users/chet/src/bash/src/parse.y"
+ case 117:
+#line 1020 "/Users/chet/src/bash/src/parse.y"
{ (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
break;
- case 104:
-#line 906 "/Users/chet/src/bash/src/parse.y"
+ case 118:
+#line 1024 "/Users/chet/src/bash/src/parse.y"
{ (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
break;
- case 105:
-#line 908 "/Users/chet/src/bash/src/parse.y"
+ case 119:
+#line 1026 "/Users/chet/src/bash/src/parse.y"
{ (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
break;
- case 106:
-#line 910 "/Users/chet/src/bash/src/parse.y"
+ case 120:
+#line 1028 "/Users/chet/src/bash/src/parse.y"
{ (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
break;
- case 107:
-#line 912 "/Users/chet/src/bash/src/parse.y"
+ case 121:
+#line 1030 "/Users/chet/src/bash/src/parse.y"
{ (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
break;
- case 108:
-#line 916 "/Users/chet/src/bash/src/parse.y"
+ case 122:
+#line 1034 "/Users/chet/src/bash/src/parse.y"
{ (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
break;
- case 109:
-#line 918 "/Users/chet/src/bash/src/parse.y"
+ case 123:
+#line 1036 "/Users/chet/src/bash/src/parse.y"
{ (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
break;
- case 110:
-#line 920 "/Users/chet/src/bash/src/parse.y"
+ case 124:
+#line 1038 "/Users/chet/src/bash/src/parse.y"
{ (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
break;
- case 111:
-#line 922 "/Users/chet/src/bash/src/parse.y"
+ case 125:
+#line 1040 "/Users/chet/src/bash/src/parse.y"
{ (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
break;
- case 112:
-#line 924 "/Users/chet/src/bash/src/parse.y"
+ case 126:
+#line 1042 "/Users/chet/src/bash/src/parse.y"
{ (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
break;
- case 113:
-#line 926 "/Users/chet/src/bash/src/parse.y"
+ case 127:
+#line 1044 "/Users/chet/src/bash/src/parse.y"
{ (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
break;
- case 114:
-#line 930 "/Users/chet/src/bash/src/parse.y"
+ case 128:
+#line 1048 "/Users/chet/src/bash/src/parse.y"
{ (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
break;
- case 115:
-#line 932 "/Users/chet/src/bash/src/parse.y"
+ case 129:
+#line 1050 "/Users/chet/src/bash/src/parse.y"
{ (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
break;
- case 116:
-#line 941 "/Users/chet/src/bash/src/parse.y"
+ case 130:
+#line 1059 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = (yyvsp[(2) - (2)].command);
if (need_here_doc)
@@ -2933,15 +3122,15 @@ yyreduce:
}
break;
- case 118:
-#line 950 "/Users/chet/src/bash/src/parse.y"
+ case 132:
+#line 1068 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = (yyvsp[(2) - (2)].command);
}
break;
- case 120:
-#line 957 "/Users/chet/src/bash/src/parse.y"
+ case 134:
+#line 1075 "/Users/chet/src/bash/src/parse.y"
{
if ((yyvsp[(1) - (3)].command)->type == cm_connection)
(yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (COMMAND *)NULL, '&');
@@ -2950,18 +3139,18 @@ yyreduce:
}
break;
- case 122:
-#line 968 "/Users/chet/src/bash/src/parse.y"
+ case 136:
+#line 1086 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
break;
- case 123:
-#line 970 "/Users/chet/src/bash/src/parse.y"
+ case 137:
+#line 1088 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
break;
- case 124:
-#line 972 "/Users/chet/src/bash/src/parse.y"
+ case 138:
+#line 1090 "/Users/chet/src/bash/src/parse.y"
{
if ((yyvsp[(1) - (4)].command)->type == cm_connection)
(yyval.command) = connect_async_list ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '&');
@@ -2970,38 +3159,38 @@ yyreduce:
}
break;
- case 125:
-#line 979 "/Users/chet/src/bash/src/parse.y"
+ case 139:
+#line 1097 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
break;
- case 126:
-#line 981 "/Users/chet/src/bash/src/parse.y"
+ case 140:
+#line 1099 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
break;
- case 127:
-#line 983 "/Users/chet/src/bash/src/parse.y"
+ case 141:
+#line 1101 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 130:
-#line 991 "/Users/chet/src/bash/src/parse.y"
+ case 144:
+#line 1109 "/Users/chet/src/bash/src/parse.y"
{ (yyval.number) = '\n'; }
break;
- case 131:
-#line 993 "/Users/chet/src/bash/src/parse.y"
+ case 145:
+#line 1111 "/Users/chet/src/bash/src/parse.y"
{ (yyval.number) = ';'; }
break;
- case 132:
-#line 995 "/Users/chet/src/bash/src/parse.y"
+ case 146:
+#line 1113 "/Users/chet/src/bash/src/parse.y"
{ (yyval.number) = yacc_EOF; }
break;
- case 135:
-#line 1009 "/Users/chet/src/bash/src/parse.y"
+ case 149:
+#line 1127 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = (yyvsp[(1) - (1)].command);
if (need_here_doc)
@@ -3016,8 +3205,8 @@ yyreduce:
}
break;
- case 136:
-#line 1022 "/Users/chet/src/bash/src/parse.y"
+ case 150:
+#line 1140 "/Users/chet/src/bash/src/parse.y"
{
if ((yyvsp[(1) - (2)].command)->type == cm_connection)
(yyval.command) = connect_async_list ((yyvsp[(1) - (2)].command), (COMMAND *)NULL, '&');
@@ -3035,8 +3224,8 @@ yyreduce:
}
break;
- case 137:
-#line 1038 "/Users/chet/src/bash/src/parse.y"
+ case 151:
+#line 1156 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = (yyvsp[(1) - (2)].command);
if (need_here_doc)
@@ -3051,18 +3240,18 @@ yyreduce:
}
break;
- case 138:
-#line 1053 "/Users/chet/src/bash/src/parse.y"
+ case 152:
+#line 1171 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
break;
- case 139:
-#line 1055 "/Users/chet/src/bash/src/parse.y"
+ case 153:
+#line 1173 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
break;
- case 140:
-#line 1057 "/Users/chet/src/bash/src/parse.y"
+ case 154:
+#line 1175 "/Users/chet/src/bash/src/parse.y"
{
if ((yyvsp[(1) - (3)].command)->type == cm_connection)
(yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), '&');
@@ -3071,23 +3260,23 @@ yyreduce:
}
break;
- case 141:
-#line 1064 "/Users/chet/src/bash/src/parse.y"
+ case 155:
+#line 1182 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
break;
- case 142:
-#line 1067 "/Users/chet/src/bash/src/parse.y"
+ case 156:
+#line 1185 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 143:
-#line 1071 "/Users/chet/src/bash/src/parse.y"
+ case 157:
+#line 1189 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 144:
-#line 1073 "/Users/chet/src/bash/src/parse.y"
+ case 158:
+#line 1191 "/Users/chet/src/bash/src/parse.y"
{
if ((yyvsp[(2) - (2)].command))
(yyvsp[(2) - (2)].command)->flags |= CMD_INVERT_RETURN;
@@ -3095,8 +3284,8 @@ yyreduce:
}
break;
- case 145:
-#line 1079 "/Users/chet/src/bash/src/parse.y"
+ case 159:
+#line 1197 "/Users/chet/src/bash/src/parse.y"
{
if ((yyvsp[(2) - (2)].command))
(yyvsp[(2) - (2)].command)->flags |= (yyvsp[(1) - (2)].number);
@@ -3104,8 +3293,8 @@ yyreduce:
}
break;
- case 146:
-#line 1085 "/Users/chet/src/bash/src/parse.y"
+ case 160:
+#line 1203 "/Users/chet/src/bash/src/parse.y"
{
if ((yyvsp[(3) - (3)].command))
(yyvsp[(3) - (3)].command)->flags |= (yyvsp[(1) - (3)].number)|CMD_INVERT_RETURN;
@@ -3113,8 +3302,8 @@ yyreduce:
}
break;
- case 147:
-#line 1091 "/Users/chet/src/bash/src/parse.y"
+ case 161:
+#line 1209 "/Users/chet/src/bash/src/parse.y"
{
if ((yyvsp[(3) - (3)].command))
(yyvsp[(3) - (3)].command)->flags |= (yyvsp[(2) - (3)].number)|CMD_INVERT_RETURN;
@@ -3122,8 +3311,8 @@ yyreduce:
}
break;
- case 148:
-#line 1097 "/Users/chet/src/bash/src/parse.y"
+ case 162:
+#line 1215 "/Users/chet/src/bash/src/parse.y"
{
ELEMENT x;
@@ -3142,22 +3331,23 @@ yyreduce:
}
break;
- case 149:
-#line 1117 "/Users/chet/src/bash/src/parse.y"
+ case 163:
+#line 1235 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
break;
- case 150:
-#line 1119 "/Users/chet/src/bash/src/parse.y"
+ case 164:
+#line 1237 "/Users/chet/src/bash/src/parse.y"
{
/* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
COMMAND *tc;
- REDIRECTEE rd;
+ REDIRECTEE rd, sd;
REDIRECT *r;
- tc = (yyvsp[(1) - (4)].command);
+ tc = (yyvsp[(1) - (4)].command)->type == cm_simple ? (COMMAND *)(yyvsp[(1) - (4)].command)->value.Simple : (yyvsp[(1) - (4)].command);
+ sd.dest = 2;
rd.dest = 1;
- r = make_redirection (2, r_duplicating_output, rd);
+ r = make_redirection (sd, r_duplicating_output, rd, 0);
if (tc->redirects)
{
register REDIRECT *t;
@@ -3172,24 +3362,24 @@ yyreduce:
}
break;
- case 151:
-#line 1141 "/Users/chet/src/bash/src/parse.y"
+ case 165:
+#line 1260 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 152:
-#line 1145 "/Users/chet/src/bash/src/parse.y"
+ case 166:
+#line 1264 "/Users/chet/src/bash/src/parse.y"
{ (yyval.number) = CMD_TIME_PIPELINE; }
break;
- case 153:
-#line 1147 "/Users/chet/src/bash/src/parse.y"
+ case 167:
+#line 1266 "/Users/chet/src/bash/src/parse.y"
{ (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
break;
/* Line 1267 of yacc.c. */
-#line 3193 "y.tab.c"
+#line 3383 "y.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3403,7 +3593,7 @@ yyreturn:
}
-#line 1149 "/Users/chet/src/bash/src/parse.y"
+#line 1268 "/Users/chet/src/bash/src/parse.y"
/* Initial size to allocate for tokens, and the
@@ -3873,10 +4063,11 @@ save_token_state ()
{
int *ret;
- ret = (int *)xmalloc (3 * sizeof (int));
+ ret = (int *)xmalloc (4 * sizeof (int));
ret[0] = last_read_token;
ret[1] = token_before_that;
ret[2] = two_tokens_ago;
+ ret[3] = current_token;
return ret;
}
@@ -3889,6 +4080,7 @@ restore_token_state (ts)
last_read_token = ts[0];
token_before_that = ts[1];
two_tokens_ago = ts[2];
+ current_token = ts[3];
}
/*
@@ -4042,7 +4234,7 @@ read_a_line (remove_quoted_newline)
{
static char *line_buffer = (char *)NULL;
static int buffer_size = 0;
- int indx = 0, c, peekc, pass_next;
+ int indx, c, peekc, pass_next;
#if defined (READLINE)
if (no_line_editing && SHOULD_PROMPT ())
@@ -4051,7 +4243,7 @@ read_a_line (remove_quoted_newline)
#endif
print_prompt ();
- pass_next = 0;
+ pass_next = indx = 0;
while (1)
{
/* Allow immediate exit if interrupted during input. */
@@ -4135,7 +4327,7 @@ read_secondary_line (remove_quoted_newline)
prompt_again ();
ret = read_a_line (remove_quoted_newline);
#if defined (HISTORY)
- if (remember_on_history && (parser_state & PST_HEREDOC))
+ if (ret && remember_on_history && (parser_state & PST_HEREDOC))
{
/* To make adding the the here-document body right, we need to rely
on history_delimiting_chars() returning \n for the first line of
@@ -4491,6 +4683,7 @@ shell_getc (remove_quoted_newline)
because we have fully consumed the result of the last alias expansion.
Do it transparently; just return the next character of the string popped
to. */
+pop_alias:
if (!uc && (pushed_string_list != (STRING_SAVER *)NULL))
{
pop_string ();
@@ -4505,6 +4698,17 @@ shell_getc (remove_quoted_newline)
if (SHOULD_PROMPT ())
prompt_again ();
line_number++;
+ /* XXX - what do we do here if we're expanding an alias whose definition
+ ends with a newline? Recall that we inhibit the appending of a
+ space in mk_alexpansion() if newline is the last character. */
+#if 0 /* XXX - bash-4.2 (jonathan@claggett.org) */
+ if (expanding_alias () && shell_input_line[shell_input_line_index+1] == '\0')
+ {
+ uc = 0;
+ goto pop_alias;
+ }
+#endif
+
goto restart_read;
}
@@ -4652,7 +4856,7 @@ gather_here_documents ()
static int open_brace_count;
#define command_token_position(token) \
- (((token) == ASSIGNMENT_WORD) || \
+ (((token) == ASSIGNMENT_WORD) || (parser_state&PST_REDIRLIST) || \
((token) != SEMI_SEMI && (token) != SEMI_AND && (token) != SEMI_SEMI_AND && reserved_word_acceptable(token)))
#define assignment_acceptable(token) \
@@ -4715,7 +4919,11 @@ mk_alexpansion (s)
l = strlen (s);
r = xmalloc (l + 2);
strcpy (r, s);
+#if 0 /* XXX - bash-4.2 */
+ if (r[l -1] != ' ' && r[l -1] != '\n')
+#else
if (r[l -1] != ' ')
+#endif
r[l++] = ' ';
r[l] = '\0';
return r;
@@ -4909,6 +5117,12 @@ reset_parser ()
dstack.delimiter_depth = 0; /* No delimiters found so far. */
open_brace_count = 0;
+#if defined (EXTENDED_GLOB)
+ /* Reset to global value of extended glob */
+ if (parser_state & PST_EXTPAT)
+ extended_glob = global_extglob;
+#endif
+
parser_state = 0;
#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
@@ -4926,6 +5140,7 @@ reset_parser ()
FREE (word_desc_to_read);
word_desc_to_read = (WORD_DESC *)NULL;
+ current_token = '\n'; /* XXX */
last_read_token = '\n';
token_to_read = '\n';
}
@@ -5173,6 +5388,7 @@ tokword:
#define P_DQUOTE 0x04
#define P_COMMAND 0x08 /* parsing a command, so look for comments */
#define P_BACKQUOTE 0x10 /* parsing a backquoted command substitution */
+#define P_ARRAYSUB 0x20 /* parsing a [...] array subscript for assignment */
/* Lexical state while parsing a grouping construct or $(...). */
#define LEX_WASDOL 0x001
@@ -5185,6 +5401,7 @@ tokword:
#define LEX_INHEREDOC 0x080
#define LEX_HEREDELIM 0x100 /* reading here-doc delimiter */
#define LEX_STRIPDOC 0x200 /* <<- strip tabs from here doc delim */
+#define LEX_INWORD 0x400
#define COMSUB_META(ch) ((ch) == ';' || (ch) == '&' || (ch) == '|')
@@ -5220,7 +5437,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
char *ret, *nestret, *ttrans;
int retind, retsize, rflags;
-/* itrace("parse_matched_pair: open = %c close = %c flags = %d", open, close, flags); */
+/*itrace("parse_matched_pair[%d]: open = %c close = %c flags = %d", line_number, open, close, flags);*/
count = 1;
tflags = 0;
@@ -5387,6 +5604,8 @@ parse_matched_pair (qc, open, close, lenp, flags)
APPEND_NESTRET ();
FREE (nestret);
}
+ else if ((flags & P_ARRAYSUB) && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '[')) /* ) } ] */
+ goto parse_dollar_word;
}
/* Parse an old-style command substitution within double quotes as a
single word. */
@@ -5403,6 +5622,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
else if MBTEST(open != '`' && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '[')) /* ) } ] */
/* check for $(), $[], or ${} inside quoted string. */
{
+parse_dollar_word:
if (open == ch) /* undo previous increment */
count--;
if (ch == '(') /* ) */
@@ -5426,6 +5646,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
ret[retind] = '\0';
if (lenp)
*lenp = retind;
+/*itrace("parse_matched_pair[%d]: returning %s", line_number, ret);*/
return ret;
}
@@ -5437,7 +5658,7 @@ parse_comsub (qc, open, close, lenp, flags)
int open, close;
int *lenp, flags;
{
- int count, ch, peekc, tflags, lex_rwlen, lex_firstind;
+ int count, ch, peekc, tflags, lex_rwlen, lex_wlen, lex_firstind;
int nestlen, ttranslen, start_lineno;
char *ret, *nestret, *ttrans, *heredelim;
int retind, retsize, rflags, hdlen;
@@ -5458,7 +5679,7 @@ parse_comsub (qc, open, close, lenp, flags)
retind = 0;
start_lineno = line_number;
- lex_rwlen = 0;
+ lex_rwlen = lex_wlen = 0;
heredelim = 0;
lex_firstind = -1;
@@ -5501,6 +5722,8 @@ eof_error:
{
tflags &= ~(LEX_STRIPDOC|LEX_INHEREDOC);
/*itrace("parse_comsub:%d: found here doc end `%s'", line_number, ret + tind);*/
+ free (heredelim);
+ heredelim = 0;
lex_firstind = -1;
}
else
@@ -5512,6 +5735,25 @@ eof_error:
if (ch == '\n' && SHOULD_PROMPT ())
prompt_again ();
+ /* XXX -- possibly allow here doc to be delimited by ending right
+ paren. */
+ if ((tflags & LEX_INHEREDOC) && ch == close && count == 1)
+ {
+ int tind;
+/*itrace("parse_comsub: in here doc, ch == close, retind - firstind = %d hdlen = %d retind = %d", retind-lex_firstind, hdlen, retind);*/
+ tind = lex_firstind;
+ while ((tflags & LEX_STRIPDOC) && ret[tind] == '\t')
+ tind++;
+ if (retind-tind == hdlen && STREQN (ret + tind, heredelim, hdlen))
+ {
+ tflags &= ~(LEX_STRIPDOC|LEX_INHEREDOC);
+/*itrace("parse_comsub:%d: found here doc end `%s'", line_number, ret + tind);*/
+ free (heredelim);
+ heredelim = 0;
+ lex_firstind = -1;
+ }
+ }
+
/* Don't bother counting parens or doing anything else if in a comment */
if (tflags & (LEX_INCOMMENT|LEX_INHEREDOC))
{
@@ -5520,11 +5762,54 @@ eof_error:
ret[retind++] = ch;
if ((tflags & LEX_INCOMMENT) && ch == '\n')
+{
+/*itrace("parse_comsub:%d: lex_incomment -> 0 ch = `%c'", line_number, ch);*/
tflags &= ~LEX_INCOMMENT;
+}
continue;
}
+ if (tflags & LEX_PASSNEXT) /* last char was backslash */
+ {
+/*itrace("parse_comsub:%d: lex_passnext -> 0 ch = `%c' (%d)", line_number, ch, __LINE__);*/
+ tflags &= ~LEX_PASSNEXT;
+ if (qc != '\'' && ch == '\n') /* double-quoted \<newline> disappears. */
+ {
+ if (retind > 0)
+ retind--; /* swallow previously-added backslash */
+ continue;
+ }
+
+ RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
+ if MBTEST(ch == CTLESC || ch == CTLNUL)
+ ret[retind++] = CTLESC;
+ ret[retind++] = ch;
+ continue;
+ }
+
+ /* If this is a shell break character, we are not in a word. If not,
+ we either start or continue a word. */
+ if MBTEST(shellbreak (ch))
+ {
+ tflags &= ~LEX_INWORD;
+/*itrace("parse_comsub:%d: lex_inword -> 0 ch = `%c' (%d)", line_number, ch, __LINE__);*/
+ }
+ else
+ {
+ if (tflags & LEX_INWORD)
+ {
+ lex_wlen++;
+/*itrace("parse_comsub:%d: lex_inword == 1 ch = `%c' lex_wlen = %d (%d)", line_number, ch, lex_wlen, __LINE__);*/
+ }
+ else
+ {
+/*itrace("parse_comsub:%d: lex_inword -> 1 ch = `%c' (%d)", line_number, ch, __LINE__);*/
+ tflags |= LEX_INWORD;
+ lex_wlen = 0;
+ }
+ }
+
/* Skip whitespace */
if MBTEST(shellblank (ch) && lex_rwlen == 0)
{
@@ -5545,13 +5830,24 @@ eof_error:
{
if (lex_firstind == -1 && shellbreak (ch) == 0)
lex_firstind = retind;
+#if 0
+ else if (heredelim && (tflags & LEX_PASSNEXT) == 0 && ch == '\n')
+ {
+ tflags |= LEX_INHEREDOC;
+ tflags &= ~LEX_HEREDELIM;
+ lex_firstind = retind + 1;
+ }
+#endif
else if (lex_firstind >= 0 && (tflags & LEX_PASSNEXT) == 0 && shellbreak (ch))
{
- nestret = substring (ret, lex_firstind, retind);
- heredelim = string_quote_removal (nestret, 0);
- free (nestret);
- hdlen = STRLEN(heredelim);
+ if (heredelim == 0)
+ {
+ nestret = substring (ret, lex_firstind, retind);
+ heredelim = string_quote_removal (nestret, 0);
+ free (nestret);
+ hdlen = STRLEN(heredelim);
/*itrace("parse_comsub:%d: found here doc delimiter `%s' (%d)", line_number, heredelim, hdlen);*/
+ }
if (ch == '\n')
{
tflags |= LEX_INHEREDOC;
@@ -5564,7 +5860,7 @@ eof_error:
}
/* Meta-characters that can introduce a reserved word. Not perfect yet. */
- if MBTEST((tflags & LEX_RESWDOK) == 0 && (tflags & LEX_CKCASE) && (tflags & LEX_INCOMMENT) == 0 && shellmeta(ch))
+ if MBTEST((tflags & LEX_RESWDOK) == 0 && (tflags & LEX_CKCASE) && (tflags & LEX_INCOMMENT) == 0 && (shellmeta(ch) || ch == '\n'))
{
/* Add this character. */
RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
@@ -5574,7 +5870,7 @@ eof_error:
{
RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
ret[retind++] = peekc;
-/*itrace("parse_comsub:%d: set lex_reswordok = 1, ch = `%c'", line_number, ch); */
+/*itrace("parse_comsub:%d: set lex_reswordok = 1, ch = `%c'", line_number, ch);*/
tflags |= LEX_RESWDOK;
lex_rwlen = 0;
continue;
@@ -5582,8 +5878,8 @@ eof_error:
else if (ch == '\n' || COMSUB_META(ch))
{
shell_ungetc (peekc);
- tflags |= LEX_RESWDOK;
/*itrace("parse_comsub:%d: set lex_reswordok = 1, ch = `%c'", line_number, ch);*/
+ tflags |= LEX_RESWDOK;
lex_rwlen = 0;
continue;
}
@@ -5613,22 +5909,35 @@ eof_error:
if (STREQN (ret + retind - 4, "case", 4))
{
tflags |= LEX_INCASE;
-/*itrace("parse_comsub:%d: found `case', lex_incase -> 1", line_number);*/
+/*itrace("parse_comsub:%d: found `case', lex_incase -> 1 lex_reswdok -> 0", line_number);*/
}
else if (STREQN (ret + retind - 4, "esac", 4))
{
tflags &= ~LEX_INCASE;
-/*itrace("parse_comsub:%d: found `esac', lex_incase -> 0", line_number);*/
+/*itrace("parse_comsub:%d: found `esac', lex_incase -> 0 lex_reswdok -> 0", line_number);*/
}
tflags &= ~LEX_RESWDOK;
}
- else if (shellbreak (ch) == 0)
+ else if MBTEST((tflags & LEX_CKCOMMENT) && ch == '#' && (lex_rwlen == 0 || ((tflags & LEX_INWORD) && lex_wlen == 0)))
+ ; /* don't modify LEX_RESWDOK if we're starting a comment */
+ else if MBTEST((tflags & LEX_INCASE) && ch != '\n')
+ /* If we can read a reserved word and we're in case, we're at the
+ point where we can read a new pattern list or an esac. We
+ handle the esac case above. If we read a newline, we want to
+ leave LEX_RESWDOK alone. If we read anything else, we want to
+ turn off LEX_RESWDOK, since we're going to read a pattern list. */
{
- tflags &= ~LEX_RESWDOK;
+ tflags &= ~LEX_RESWDOK;
+/*itrace("parse_comsub:%d: lex_incase == 1 found `%c', lex_reswordok -> 0", line_number, ch);*/
+}
+ else if MBTEST(shellbreak (ch) == 0)
+{
+ tflags &= ~LEX_RESWDOK;
/*itrace("parse_comsub:%d: found `%c', lex_reswordok -> 0", line_number, ch);*/
}
}
+ /* Might be the start of a here-doc delimiter */
if MBTEST((tflags & LEX_INCOMMENT) == 0 && (tflags & LEX_CKCASE) && ch == '<')
{
/* Add this character. */
@@ -5652,36 +5961,23 @@ eof_error:
}
else
shell_ungetc (peekc);
- tflags |= LEX_HEREDELIM;
- lex_firstind = -1;
+ if (peekc != '<')
+ {
+ tflags |= LEX_HEREDELIM;
+ lex_firstind = -1;
+ }
continue;
}
else
- ch = peekc; /* fall through and continue XXX - this skips comments if peekc == '#' */
+ ch = peekc; /* fall through and continue XXX */
}
- /* Not exactly right yet, should handle shell metacharacters, too. If
- any changes are made to this test, make analogous changes to subst.c:
- extract_delimited_string(). */
- else if MBTEST((tflags & LEX_CKCOMMENT) && (tflags & LEX_INCOMMENT) == 0 && ch == '#' && (retind == 0 || ret[retind-1] == '\n' || shellblank (ret[retind - 1])))
+ else if MBTEST((tflags & LEX_CKCOMMENT) && (tflags & LEX_INCOMMENT) == 0 && ch == '#' && (((tflags & LEX_RESWDOK) && lex_rwlen == 0) || ((tflags & LEX_INWORD) && lex_wlen == 0)))
+{
+/*itrace("parse_comsub:%d: lex_incomment -> 1 (%d)", line_number, __LINE__);*/
tflags |= LEX_INCOMMENT;
+}
- if (tflags & LEX_PASSNEXT) /* last char was backslash */
- {
- tflags &= ~LEX_PASSNEXT;
- if (qc != '\'' && ch == '\n') /* double-quoted \<newline> disappears. */
- {
- if (retind > 0)
- retind--; /* swallow previously-added backslash */
- continue;
- }
-
- RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
- if MBTEST(ch == CTLESC || ch == CTLNUL)
- ret[retind++] = CTLESC;
- ret[retind++] = ch;
- continue;
- }
- else if MBTEST(ch == CTLESC || ch == CTLNUL) /* special shell escapes */
+ if MBTEST(ch == CTLESC || ch == CTLNUL) /* special shell escapes */
{
RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
ret[retind++] = CTLESC;
@@ -5698,7 +5994,10 @@ eof_error:
/*itrace("parse_comsub:%d: found close: count = %d", line_number, count);*/
}
else if MBTEST(((flags & P_FIRSTCLOSE) == 0) && (tflags & LEX_INCASE) == 0 && ch == open) /* nested begin */
+{
count++;
+/*itrace("parse_comsub:%d: found open: count = %d", line_number, count);*/
+}
/* Add this character. */
RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
@@ -6114,7 +6413,13 @@ cond_term ()
/* binop */
tok = read_token (READ);
if (tok == WORD && test_binop (yylval.word->word))
- op = yylval.word;
+ {
+ op = yylval.word;
+ if (op->word[0] == '=' && (op->word[1] == '\0' || (op->word[1] == '=' && op->word[2] == '\0')))
+ parser_state |= PST_EXTPAT;
+ else if (op->word[0] == '!' && op->word[1] == '=' && op->word[2] == '\0')
+ parser_state |= PST_EXTPAT;
+ }
#if defined (COND_REGEXP)
else if (tok == WORD && STREQ (yylval.word->word, "=~"))
{
@@ -6150,8 +6455,13 @@ cond_term ()
}
/* rhs */
+ if (parser_state & PST_EXTPAT)
+ extended_glob = 1;
tok = read_token (READ);
- parser_state &= ~PST_REGEXP;
+ if (parser_state & PST_EXTPAT)
+ extended_glob = global_extglob;
+ parser_state &= ~(PST_REGEXP|PST_EXTPAT);
+
if (tok == WORD)
{
tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL);
@@ -6196,6 +6506,7 @@ parse_cond_command ()
{
COND_COM *cexp;
+ global_extglob = extended_glob;
cexp = cond_expr ();
return (make_cond_command (cexp));
}
@@ -6506,7 +6817,7 @@ read_token_word (character)
((token_index > 0 && assignment_acceptable (last_read_token) && token_is_ident (token, token_index)) ||
(token_index == 0 && (parser_state&PST_COMPASSIGN))))
{
- ttok = parse_matched_pair (cd, '[', ']', &ttoklen, 0);
+ ttok = parse_matched_pair (cd, '[', ']', &ttoklen, P_ARRAYSUB);
if (ttok == &matched_pair_error)
return -1; /* Bail immediately. */
RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2,
@@ -6668,6 +6979,19 @@ got_token:
yylval.word = the_word;
+ if (token[0] == '{' && token[token_index-1] == '}' &&
+ (character == '<' || character == '>'))
+ {
+ /* can use token; already copied to the_word */
+ token[token_index-1] = '\0';
+ if (legal_identifier (token+1))
+ {
+ strcpy (the_word->word, token+1);
+/*itrace("read_token_word: returning REDIR_WORD for %s", the_word->word);*/
+ return (REDIR_WORD);
+ }
+ }
+
result = ((the_word->flags & (W_ASSIGNMENT|W_NOSPLIT)) == (W_ASSIGNMENT|W_NOSPLIT))
? ASSIGNMENT_WORD : WORD;
@@ -6707,6 +7031,7 @@ reserved_word_acceptable (toksym)
case '}': /* XXX */
case AND_AND:
case BANG:
+ case BAR_AND:
case DO:
case DONE:
case ELIF:
@@ -6857,7 +7182,7 @@ prompt_again ()
{
char *temp_prompt;
- if (interactive == 0 || expanding_alias()) /* XXX */
+ if (interactive == 0 || expanding_alias ()) /* XXX */
return;
ps1_prompt = get_string_value ("PS1");
@@ -6953,7 +7278,7 @@ decode_prompt_string (string)
WORD_LIST *list;
char *result, *t;
struct dstack save_dstack;
- int last_exit_value;
+ int last_exit_value, last_comsub_pid;
#if defined (PROMPT_STRING_DECODE)
int result_size, result_index;
int c, n, i;
@@ -7140,6 +7465,13 @@ decode_prompt_string (string)
}
t_string[tlen] = '\0';
+#if defined (MACOSX)
+ /* Convert from "fs" format to "input" format */
+ temp = fnx_fromfs (t_string, strlen (t_string));
+ if (temp != t_string)
+ strcpy (t_string, temp);
+#endif
+
#define ROOT_PATH(x) ((x)[0] == '/' && (x)[1] == 0)
#define DOUBLE_SLASH_ROOT(x) ((x)[0] == '/' && (x)[1] == '/' && (x)[2] == 0)
/* Abbreviate \W as ~ if $PWD == $HOME */
@@ -7294,11 +7626,13 @@ not_escape:
if (promptvars || posixly_correct)
{
last_exit_value = last_command_exit_value;
+ last_comsub_pid = last_command_subst_pid;
list = expand_prompt_string (result, Q_DOUBLE_QUOTES, 0);
free (result);
result = string_list (list);
dispose_words (list);
last_command_exit_value = last_exit_value;
+ last_command_subst_pid = last_comsub_pid;
}
else
{
@@ -7441,7 +7775,7 @@ report_syntax_error (message)
parser_error (line_number, "%s", message);
if (interactive && EOF_Reached)
EOF_Reached = 0;
- last_command_exit_value = EX_USAGE;
+ last_command_exit_value = parse_and_execute_level ? EX_BADSYNTAX : EX_BADUSAGE;
return;
}
@@ -7456,7 +7790,7 @@ report_syntax_error (message)
if (interactive == 0)
print_offending_line ();
- last_command_exit_value = EX_USAGE;
+ last_command_exit_value = parse_and_execute_level ? EX_BADSYNTAX : EX_BADUSAGE;
return;
}
@@ -7487,7 +7821,7 @@ report_syntax_error (message)
EOF_Reached = 0;
}
- last_command_exit_value = EX_USAGE;
+ last_command_exit_value = parse_and_execute_level ? EX_BADSYNTAX : EX_BADUSAGE;
}
/* ??? Needed function. ??? We have to be able to discard the constructs