aboutsummaryrefslogtreecommitdiffstats
path: root/y.tab.c
diff options
context:
space:
mode:
Diffstat (limited to 'y.tab.c')
-rw-r--r--y.tab.c1460
1 files changed, 769 insertions, 691 deletions
diff --git a/y.tab.c b/y.tab.c
index d702554..d8280fc 100644
--- a/y.tab.c
+++ b/y.tab.c
@@ -88,30 +88,31 @@
BANG = 277,
TIME = 278,
TIMEOPT = 279,
- WORD = 280,
- ASSIGNMENT_WORD = 281,
- 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
+ TIMEIGN = 280,
+ WORD = 281,
+ ASSIGNMENT_WORD = 282,
+ REDIR_WORD = 283,
+ NUMBER = 284,
+ ARITH_CMD = 285,
+ ARITH_FOR_EXPRS = 286,
+ COND_CMD = 287,
+ AND_AND = 288,
+ OR_OR = 289,
+ GREATER_GREATER = 290,
+ LESS_LESS = 291,
+ LESS_AND = 292,
+ LESS_LESS_LESS = 293,
+ GREATER_AND = 294,
+ SEMI_SEMI = 295,
+ SEMI_AND = 296,
+ SEMI_SEMI_AND = 297,
+ LESS_LESS_MINUS = 298,
+ AND_GREATER = 299,
+ AND_GREATER_GREATER = 300,
+ LESS_GREATER = 301,
+ GREATER_BAR = 302,
+ BAR_AND = 303,
+ yacc_EOF = 304
};
#endif
/* Tokens. */
@@ -137,30 +138,31 @@
#define BANG 277
#define TIME 278
#define TIMEOPT 279
-#define WORD 280
-#define ASSIGNMENT_WORD 281
-#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
+#define TIMEIGN 280
+#define WORD 281
+#define ASSIGNMENT_WORD 282
+#define REDIR_WORD 283
+#define NUMBER 284
+#define ARITH_CMD 285
+#define ARITH_FOR_EXPRS 286
+#define COND_CMD 287
+#define AND_AND 288
+#define OR_OR 289
+#define GREATER_GREATER 290
+#define LESS_LESS 291
+#define LESS_AND 292
+#define LESS_LESS_LESS 293
+#define GREATER_AND 294
+#define SEMI_SEMI 295
+#define SEMI_AND 296
+#define SEMI_SEMI_AND 297
+#define LESS_LESS_MINUS 298
+#define AND_GREATER 299
+#define AND_GREATER_GREATER 300
+#define LESS_GREATER 301
+#define GREATER_BAR 302
+#define BAR_AND 303
+#define yacc_EOF 304
@@ -399,6 +401,9 @@ int extended_quote = 1;
/* The number of lines read from input while creating the current command. */
int current_command_line_count;
+/* The number of lines in a command saved while we run parse_and_execute */
+int saved_command_line_count;
+
/* The token that currently denotes the end of parse. */
int shell_eof_token;
@@ -486,7 +491,7 @@ static REDIRECTEE redir;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
-#line 320 "/Users/chet/src/bash/src/parse.y"
+#line 323 "/Users/chet/src/bash/src/parse.y"
{
WORD_DESC *word; /* the word that we read. */
int number; /* the number that we read. */
@@ -497,7 +502,7 @@ typedef union YYSTYPE
PATTERN_LIST *pattern;
}
/* Line 187 of yacc.c. */
-#line 501 "y.tab.c"
+#line 506 "y.tab.c"
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
@@ -510,7 +515,7 @@ typedef union YYSTYPE
/* Line 216 of yacc.c. */
-#line 514 "y.tab.c"
+#line 519 "y.tab.c"
#ifdef short
# undef short
@@ -723,22 +728,22 @@ union yyalloc
#endif
/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 113
+#define YYFINAL 116
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 760
+#define YYLAST 659
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 60
+#define YYNTOKENS 61
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 38
/* YYNRULES -- Number of rules. */
#define YYNRULES 167
/* YYNRULES -- Number of states. */
-#define YYNSTATES 344
+#define YYNSTATES 342
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 303
+#define YYMAXUTOK 304
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -747,18 +752,18 @@ union yyalloc
static const yytype_uint8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 50, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 51, 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, 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, 49, 2,
+ 59, 60, 2, 2, 2, 56, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 50,
+ 55, 2, 54, 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, 56, 52, 57, 2, 2, 2, 2,
+ 2, 2, 2, 57, 53, 58, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -776,7 +781,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, 47, 51
+ 45, 46, 47, 48, 52
};
#if YYDEBUG
@@ -800,103 +805,103 @@ static const yytype_uint16 yyprhs[] =
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
+ 655, 658, 661, 666, 671, 673, 675, 678
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const yytype_int8 yyrhs[] =
{
- 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
+ 62, 0, -1, 94, 91, -1, 51, -1, 1, 51,
+ -1, 52, -1, 26, -1, 63, 26, -1, 54, 26,
+ -1, 55, 26, -1, 29, 54, 26, -1, 29, 55,
+ 26, -1, 28, 54, 26, -1, 28, 55, 26, -1,
+ 35, 26, -1, 29, 35, 26, -1, 28, 35, 26,
+ -1, 47, 26, -1, 29, 47, 26, -1, 28, 47,
+ 26, -1, 46, 26, -1, 29, 46, 26, -1, 28,
+ 46, 26, -1, 36, 26, -1, 29, 36, 26, -1,
+ 28, 36, 26, -1, 43, 26, -1, 29, 43, 26,
+ -1, 28, 43, 26, -1, 38, 26, -1, 29, 38,
+ 26, -1, 28, 38, 26, -1, 37, 29, -1, 29,
+ 37, 29, -1, 28, 37, 29, -1, 39, 29, -1,
+ 29, 39, 29, -1, 28, 39, 29, -1, 37, 26,
+ -1, 29, 37, 26, -1, 28, 37, 26, -1, 39,
+ 26, -1, 29, 39, 26, -1, 28, 39, 26, -1,
+ 39, 56, -1, 29, 39, 56, -1, 28, 39, 56,
+ -1, 37, 56, -1, 29, 37, 56, -1, 28, 37,
+ 56, -1, 44, 26, -1, 45, 26, -1, 26, -1,
+ 27, -1, 64, -1, 64, -1, 66, 64, -1, 65,
+ -1, 67, 65, -1, 67, -1, 69, -1, 69, 66,
+ -1, 74, -1, 77, -1, 70, -1, 73, -1, 12,
+ 88, 14, 88, 15, -1, 13, 88, 14, 88, 15,
+ -1, 72, -1, 78, -1, 76, -1, 79, -1, 80,
+ -1, 81, -1, 71, -1, 10, 26, 93, 14, 88,
+ 15, -1, 10, 26, 93, 57, 88, 58, -1, 10,
+ 26, 50, 93, 14, 88, 15, -1, 10, 26, 50,
+ 93, 57, 88, 58, -1, 10, 26, 93, 21, 63,
+ 92, 93, 14, 88, 15, -1, 10, 26, 93, 21,
+ 63, 92, 93, 57, 88, 58, -1, 10, 26, 93,
+ 21, 92, 93, 14, 88, 15, -1, 10, 26, 93,
+ 21, 92, 93, 57, 88, 58, -1, 10, 31, 92,
+ 93, 14, 88, 15, -1, 10, 31, 92, 93, 57,
+ 88, 58, -1, 10, 31, 14, 88, 15, -1, 10,
+ 31, 57, 88, 58, -1, 11, 26, 93, 14, 87,
+ 15, -1, 11, 26, 93, 57, 87, 58, -1, 11,
+ 26, 50, 93, 14, 87, 15, -1, 11, 26, 50,
+ 93, 57, 87, 58, -1, 11, 26, 93, 21, 63,
+ 92, 93, 14, 87, 15, -1, 11, 26, 93, 21,
+ 63, 92, 93, 57, 87, 58, -1, 8, 26, 93,
+ 21, 93, 9, -1, 8, 26, 93, 21, 85, 93,
+ 9, -1, 8, 26, 93, 21, 83, 9, -1, 26,
+ 59, 60, 93, 75, -1, 16, 26, 59, 60, 93,
+ 75, -1, 16, 26, 93, 75, -1, 69, -1, 69,
+ 66, -1, 59, 88, 60, -1, 17, 69, -1, 17,
+ 69, 66, -1, 17, 26, 69, -1, 17, 26, 69,
+ 66, -1, 17, 67, -1, 3, 88, 4, 88, 7,
+ -1, 3, 88, 4, 88, 5, 88, 7, -1, 3,
+ 88, 4, 88, 82, 7, -1, 57, 88, 58, -1,
+ 30, -1, 18, 32, 19, -1, 6, 88, 4, 88,
+ -1, 6, 88, 4, 88, 5, 88, -1, 6, 88,
+ 4, 88, 82, -1, 84, -1, 85, 84, -1, 93,
+ 86, 60, 88, -1, 93, 86, 60, 93, -1, 93,
+ 59, 86, 60, 88, -1, 93, 59, 86, 60, 93,
+ -1, 84, 40, -1, 85, 84, 40, -1, 84, 41,
+ -1, 85, 84, 41, -1, 84, 42, -1, 85, 84,
+ 42, -1, 26, -1, 86, 53, 26, -1, 93, 89,
+ -1, 87, -1, 93, 90, -1, 90, 51, 93, -1,
+ 90, 49, 93, -1, 90, 50, 93, -1, 90, 33,
+ 93, 90, -1, 90, 34, 93, 90, -1, 90, 49,
+ 93, 90, -1, 90, 50, 93, 90, -1, 90, 51,
+ 93, 90, -1, 96, -1, 51, -1, 52, -1, 51,
+ -1, 50, -1, 52, -1, -1, 93, 51, -1, 95,
+ -1, 95, 49, -1, 95, 50, -1, 95, 33, 93,
+ 95, -1, 95, 34, 93, 95, -1, 95, 49, 95,
+ -1, 95, 50, 95, -1, 96, -1, 97, -1, 22,
+ 96, -1, 98, 96, -1, 98, 92, -1, 22, 92,
+ -1, 97, 53, 93, 97, -1, 97, 48, 93, 97,
+ -1, 68, -1, 23, -1, 23, 24, -1, 23, 24,
+ 25, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 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
+ 0, 376, 376, 387, 396, 411, 421, 423, 427, 433,
+ 439, 445, 451, 457, 463, 469, 475, 481, 487, 493,
+ 499, 505, 511, 517, 524, 531, 538, 545, 552, 559,
+ 565, 571, 577, 583, 589, 595, 601, 607, 613, 619,
+ 625, 631, 637, 643, 649, 655, 661, 667, 673, 679,
+ 685, 691, 699, 701, 703, 707, 711, 722, 724, 728,
+ 730, 732, 748, 750, 754, 756, 758, 760, 762, 764,
+ 766, 768, 770, 772, 774, 778, 783, 788, 793, 798,
+ 803, 808, 813, 820, 825, 830, 835, 842, 847, 852,
+ 857, 862, 867, 874, 879, 884, 891, 894, 897, 901,
+ 903, 934, 941, 946, 963, 968, 985, 992, 994, 996,
+ 1001, 1005, 1009, 1013, 1015, 1017, 1021, 1022, 1026, 1028,
+ 1030, 1032, 1036, 1038, 1040, 1042, 1044, 1046, 1050, 1052,
+ 1061, 1069, 1070, 1076, 1077, 1084, 1088, 1090, 1092, 1099,
+ 1101, 1103, 1107, 1108, 1111, 1113, 1115, 1119, 1120, 1129,
+ 1142, 1158, 1173, 1175, 1177, 1184, 1187, 1191, 1193, 1199,
+ 1205, 1222, 1242, 1244, 1267, 1271, 1273, 1275
};
#endif
@@ -908,22 +913,23 @@ 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", "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",
- "GREATER_BAR", "BAR_AND", "'&'", "';'", "'\\n'", "yacc_EOF", "'|'",
- "'>'", "'<'", "'-'", "'{'", "'}'", "'('", "')'", "$accept", "inputunit",
- "word_list", "redirection", "simple_command_element", "redirection_list",
- "simple_command", "command", "shell_command", "for_command",
- "arith_for_command", "select_command", "case_command", "function_def",
- "function_body", "subshell", "coproc", "if_command", "group_command",
- "arith_command", "cond_command", "elif_clause", "case_clause",
- "pattern_list", "case_clause_sequence", "pattern", "list",
- "compound_list", "list0", "list1", "simple_list_terminator",
- "list_terminator", "newline_list", "simple_list", "simple_list1",
- "pipeline_command", "pipeline", "timespec", 0
+ "BANG", "TIME", "TIMEOPT", "TIMEIGN", "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", "GREATER_BAR", "BAR_AND", "'&'", "';'", "'\\n'",
+ "yacc_EOF", "'|'", "'>'", "'<'", "'-'", "'{'", "'}'", "'('", "')'",
+ "$accept", "inputunit", "word_list", "redirection",
+ "simple_command_element", "redirection_list", "simple_command",
+ "command", "shell_command", "for_command", "arith_for_command",
+ "select_command", "case_command", "function_def", "function_body",
+ "subshell", "coproc", "if_command", "group_command", "arith_command",
+ "cond_command", "elif_clause", "case_clause", "pattern_list",
+ "case_clause_sequence", "pattern", "list", "compound_list", "list0",
+ "list1", "simple_list_terminator", "list_terminator", "newline_list",
+ "simple_list", "simple_list1", "pipeline_command", "pipeline",
+ "timespec", 0
};
#endif
@@ -936,31 +942,32 @@ 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, 302, 38, 59,
- 10, 303, 124, 62, 60, 45, 123, 125, 40, 41
+ 295, 296, 297, 298, 299, 300, 301, 302, 303, 38,
+ 59, 10, 304, 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, 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
+ 0, 61, 62, 62, 62, 62, 63, 63, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 65, 65, 65, 66, 66, 67, 67, 68,
+ 68, 68, 68, 68, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 70, 70, 70, 70, 70,
+ 70, 70, 70, 71, 71, 71, 71, 72, 72, 72,
+ 72, 72, 72, 73, 73, 73, 74, 74, 74, 75,
+ 75, 76, 77, 77, 77, 77, 77, 78, 78, 78,
+ 79, 80, 81, 82, 82, 82, 83, 83, 84, 84,
+ 84, 84, 85, 85, 85, 85, 85, 85, 86, 86,
+ 87, 88, 88, 89, 89, 89, 90, 90, 90, 90,
+ 90, 90, 91, 91, 92, 92, 92, 93, 93, 94,
+ 94, 94, 95, 95, 95, 95, 95, 96, 96, 96,
+ 96, 96, 97, 97, 97, 98, 98, 98
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -982,7 +989,7 @@ static const yytype_uint8 yyr2[] =
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
+ 2, 2, 4, 4, 1, 1, 2, 3
};
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -991,100 +998,100 @@ static const yytype_uint8 yyr2[] =
static const yytype_uint8 yydefact[] =
{
0, 0, 147, 0, 0, 0, 147, 147, 0, 0,
- 0, 0, 166, 52, 53, 0, 0, 111, 0, 0,
+ 0, 0, 165, 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,
+ 0, 0, 147, 147, 0, 54, 57, 59, 164, 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, 145, 144, 146, 161, 158, 166, 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
+ 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,
+ 160, 159, 147, 148, 130, 132, 141, 0, 147, 0,
+ 147, 147, 147, 147, 0, 147, 147, 0, 0, 104,
+ 103, 112, 167, 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, 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,
+ 163, 162, 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, 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
+ -1, 34, 239, 35, 36, 120, 37, 38, 39, 40,
+ 41, 42, 43, 44, 213, 45, 46, 47, 48, 49,
+ 50, 225, 231, 232, 233, 274, 57, 58, 134, 135,
+ 123, 74, 59, 51, 187, 136, 54, 55
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -212
+#define YYPACT_NINF -208
static const yytype_int16 yypact[] =
{
- 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
+ 296, -35, -208, -2, 38, 10, -208, -208, 24, 546,
+ 31, 346, 51, 47, -208, 591, 604, -208, 56, 71,
+ -18, 112, 130, 115, 128, 136, 143, 154, -208, -208,
+ 157, 170, -208, -208, 111, -208, -208, 229, -208, 578,
+ -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
+ -208, -12, -3, -208, 48, 346, -208, -208, 208, 396,
+ -208, 73, 15, 163, 190, 201, 160, 107, 229, 578,
+ 204, -208, -208, -208, -208, -208, 195, 165, 202, 215,
+ 152, 216, 153, 222, 227, 236, 237, 244, 245, 253,
+ 158, 254, 171, 255, 256, 259, 261, 262, -208, -208,
+ -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
+ -208, -208, -208, -208, 231, 230, -208, -208, -208, -208,
+ 578, -208, -208, -208, -208, -208, 446, 446, -208, -208,
+ -208, -208, -208, -208, -208, 210, -208, 4, -208, 65,
+ -208, -208, -208, -208, 70, -208, -208, 232, 41, 578,
+ 578, -208, -208, -208, -208, -208, -208, -208, -208, -208,
+ -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
+ -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
+ -208, -208, -208, -208, -208, 396, 396, 23, 23, 496,
+ 496, 97, -208, -208, -208, -208, -208, -208, 85, -208,
+ 185, -208, 276, 235, 100, 110, -208, 268, -208, 280,
+ 283, -208, 578, -208, 578, 41, -208, -208, 446, 446,
+ 48, 48, -208, -208, -208, 295, 396, 396, 396, 396,
+ 396, 294, 161, -208, 19, -208, -208, 290, -208, 200,
+ -208, 252, -208, -208, -208, -208, -208, -208, 302, 396,
+ 200, 269, -208, -208, 41, 578, -208, 313, 324, -208,
+ -208, -208, 55, 55, 55, -208, -208, -208, -208, 192,
+ 34, -208, -208, 303, -19, 315, 278, -208, -208, -208,
+ 114, -208, 322, 286, 323, 287, -208, 210, -208, -208,
+ -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
+ 8, 320, -208, -208, -208, 117, -208, -208, -208, -208,
+ -208, -208, 119, 167, 396, 396, 396, -208, -208, -208,
+ 396, -208, -208, 337, 307, -208, -208, -208, -208, -208,
+ 396, 345, 308, -208, -208, 352, 312, -208, -208, -208,
+ -208, -208
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -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
+ -208, -208, 164, -37, -31, -62, 368, -208, -5, -208,
+ -208, -208, -208, -208, -206, -208, -208, -208, -208, -208,
+ -208, 66, -208, 145, -208, 88, -173, -6, -208, -207,
+ -208, -45, -48, -208, 5, 3, 17, -208
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
@@ -1094,164 +1101,142 @@ static const yytype_int16 yypgoto[] =
#define YYTABLE_NINF -1
static const yytype_uint16 yytable[] =
{
- 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,
+ 64, 65, 119, 53, 69, 52, 118, 150, 100, 256,
+ 130, 101, 137, 139, 75, 144, 56, 142, 148, 260,
+ 261, 262, 263, 264, 60, 197, 114, 115, 271, 140,
+ 124, 125, 119, 248, 301, 251, 63, 118, 102, 121,
+ 122, 302, 287, 299, 2, 272, 126, 127, 290, 3,
+ 66, 4, 5, 6, 7, 133, 124, 125, 131, 10,
+ 272, 301, 149, 70, 61, 71, 72, 73, 317, 62,
+ 133, 17, 141, 284, 285, 76, 185, 186, 273, 199,
+ 189, 190, 98, 184, 206, 133, 200, 214, 192, 193,
+ 198, 207, 133, 273, 204, 205, 128, 99, 32, 235,
+ 33, 129, 222, 223, 224, 215, 77, 262, 263, 264,
+ 2, 116, 119, 184, 244, 3, 133, 4, 5, 6,
+ 7, 133, 201, 138, 246, 10, 191, 208, 306, 53,
+ 53, 321, 188, 325, 202, 203, 133, 17, 103, 209,
+ 210, 107, 236, 212, 226, 227, 228, 229, 230, 234,
+ 255, 133, 335, 336, 108, 240, 104, 245, 249, 105,
+ 249, 133, 109, 254, 32, 133, 33, 247, 133, 110,
+ 133, 307, 327, 223, 322, 119, 326, 184, 156, 160,
+ 111, 157, 161, 112, 170, 270, 106, 171, 53, 53,
+ 216, 217, 280, 237, 279, 241, 113, 174, 249, 249,
+ 175, 266, 267, 268, 145, 288, 220, 221, 158, 162,
+ 212, 238, 132, 143, 172, 146, 257, 258, 184, 147,
+ 152, 53, 53, 151, 188, 153, 278, 176, 154, 275,
+ 276, 305, 296, 297, 298, 71, 72, 73, 282, 283,
+ 312, 155, 159, 192, 193, 314, 315, 316, 163, 212,
+ 71, 72, 73, 164, 320, 117, 14, 15, 16, 194,
+ 195, 196, 165, 166, 18, 19, 20, 21, 22, 330,
+ 167, 168, 23, 24, 25, 26, 27, 249, 249, 169,
+ 173, 177, 178, 30, 31, 179, 313, 180, 181, 182,
+ 183, 242, 211, 243, 238, 252, 319, 1, 253, 2,
+ 323, 324, 259, 265, 3, 277, 4, 5, 6, 7,
+ 281, 329, 8, 9, 10, 331, 332, 286, 11, 12,
+ 291, 337, 13, 14, 15, 16, 17, 289, 292, 272,
+ 303, 18, 19, 20, 21, 22, 304, 308, 310, 23,
+ 24, 25, 26, 27, 309, 311, 318, 28, 29, 2,
+ 30, 31, 333, 32, 3, 33, 4, 5, 6, 7,
+ 338, 300, 8, 9, 10, 334, 339, 340, 11, 12,
+ 341, 250, 13, 14, 15, 16, 17, 68, 269, 328,
+ 0, 18, 19, 20, 21, 22, 0, 0, 0, 23,
+ 24, 25, 26, 27, 0, 0, 71, 72, 73, 2,
+ 30, 31, 0, 32, 3, 33, 4, 5, 6, 7,
+ 0, 0, 8, 9, 10, 0, 0, 0, 11, 12,
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,
+ 24, 25, 26, 27, 0, 0, 0, 133, 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, 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, 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
+ 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, 8, 9, 10, 0, 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, 133, 0, 2,
+ 30, 31, 0, 32, 3, 33, 4, 5, 6, 7,
+ 0, 0, 0, 0, 10, 0, 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, 78, 79, 80, 81,
+ 82, 0, 30, 31, 83, 0, 0, 84, 85, 88,
+ 89, 90, 91, 92, 0, 86, 87, 93, 0, 0,
+ 94, 95, 0, 0, 0, 0, 0, 0, 96, 97
};
static const yytype_int16 yycheck[] =
{
- 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,
- -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,
+ 6, 7, 39, 0, 9, 0, 37, 69, 26, 215,
+ 55, 29, 60, 61, 11, 63, 51, 62, 66, 226,
+ 227, 228, 229, 230, 26, 21, 32, 33, 9, 14,
+ 33, 34, 69, 206, 53, 208, 26, 68, 56, 51,
+ 52, 60, 249, 9, 3, 26, 49, 50, 254, 8,
+ 26, 10, 11, 12, 13, 51, 33, 34, 55, 18,
+ 26, 53, 67, 32, 26, 50, 51, 52, 60, 31,
+ 51, 30, 57, 246, 247, 24, 124, 125, 59, 14,
+ 128, 129, 26, 120, 14, 51, 21, 149, 33, 34,
+ 138, 21, 51, 59, 142, 143, 48, 26, 57, 14,
+ 59, 53, 5, 6, 7, 153, 59, 314, 315, 316,
+ 3, 0, 149, 150, 14, 8, 51, 10, 11, 12,
+ 13, 51, 57, 50, 14, 18, 132, 57, 14, 126,
+ 127, 14, 127, 14, 140, 141, 51, 30, 26, 145,
+ 146, 26, 57, 148, 192, 193, 194, 195, 196, 197,
+ 212, 51, 325, 326, 26, 200, 26, 57, 206, 29,
+ 208, 51, 26, 211, 57, 51, 59, 57, 51, 26,
+ 51, 57, 5, 6, 57, 212, 57, 214, 26, 26,
+ 26, 29, 29, 26, 26, 233, 56, 29, 185, 186,
+ 185, 186, 240, 199, 239, 201, 26, 26, 246, 247,
+ 29, 40, 41, 42, 14, 250, 189, 190, 56, 56,
+ 215, 26, 4, 50, 56, 14, 222, 223, 255, 59,
+ 25, 218, 219, 19, 219, 60, 26, 56, 26, 235,
+ 236, 279, 40, 41, 42, 50, 51, 52, 244, 245,
+ 288, 26, 26, 33, 34, 293, 294, 295, 26, 254,
+ 50, 51, 52, 26, 302, 26, 27, 28, 29, 49,
+ 50, 51, 26, 26, 35, 36, 37, 38, 39, 317,
+ 26, 26, 43, 44, 45, 46, 47, 325, 326, 26,
+ 26, 26, 26, 54, 55, 26, 292, 26, 26, 58,
+ 60, 15, 60, 58, 26, 15, 302, 1, 15, 3,
+ 306, 307, 7, 9, 8, 15, 10, 11, 12, 13,
+ 58, 317, 16, 17, 18, 321, 322, 15, 22, 23,
+ 7, 327, 26, 27, 28, 29, 30, 58, 4, 26,
+ 15, 35, 36, 37, 38, 39, 58, 15, 15, 43,
+ 44, 45, 46, 47, 58, 58, 26, 51, 52, 3,
+ 54, 55, 15, 57, 8, 59, 10, 11, 12, 13,
+ 15, 273, 16, 17, 18, 58, 58, 15, 22, 23,
+ 58, 207, 26, 27, 28, 29, 30, 9, 233, 313,
+ -1, 35, 36, 37, 38, 39, -1, -1, -1, 43,
+ 44, 45, 46, 47, -1, -1, 50, 51, 52, 3,
+ 54, 55, -1, 57, 8, 59, 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, 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,
- 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
+ -1, -1, 26, 27, 28, 29, 30, -1, -1, -1,
+ -1, 35, 36, 37, 38, 39, -1, -1, -1, 43,
+ 44, 45, 46, 47, -1, -1, -1, 51, -1, 3,
+ 54, 55, -1, 57, 8, 59, 10, 11, 12, 13,
+ -1, -1, 16, 17, 18, -1, -1, -1, 22, 23,
+ -1, -1, 26, 27, 28, 29, 30, -1, -1, -1,
+ -1, 35, 36, 37, 38, 39, -1, -1, -1, 43,
+ 44, 45, 46, 47, -1, -1, -1, -1, -1, 3,
+ 54, 55, -1, 57, 8, 59, 10, 11, 12, 13,
+ -1, -1, 16, 17, 18, -1, -1, -1, -1, -1,
+ -1, -1, 26, 27, 28, 29, 30, -1, -1, -1,
+ -1, 35, 36, 37, 38, 39, -1, -1, -1, 43,
+ 44, 45, 46, 47, -1, -1, -1, 51, -1, 3,
+ 54, 55, -1, 57, 8, 59, 10, 11, 12, 13,
+ -1, -1, -1, -1, 18, -1, -1, -1, -1, -1,
+ -1, -1, 26, 27, 28, 29, 30, -1, -1, -1,
+ -1, 35, 36, 37, 38, 39, -1, -1, -1, 43,
+ 44, 45, 46, 47, -1, -1, -1, -1, -1, -1,
+ 54, 55, -1, 57, -1, 59, 28, 29, -1, -1,
+ -1, -1, -1, 35, 36, 37, 38, 39, -1, -1,
+ -1, 43, 44, 45, 46, 47, 35, 36, 37, 38,
+ 39, -1, 54, 55, 43, -1, -1, 46, 47, 35,
+ 36, 37, 38, 39, -1, 54, 55, 43, -1, -1,
+ 46, 47, -1, -1, -1, -1, -1, -1, 54, 55
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1259,40 +1244,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, 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
+ 18, 22, 23, 26, 27, 28, 29, 30, 35, 36,
+ 37, 38, 39, 43, 44, 45, 46, 47, 51, 52,
+ 54, 55, 57, 59, 62, 64, 65, 67, 68, 69,
+ 70, 71, 72, 73, 74, 76, 77, 78, 79, 80,
+ 81, 94, 95, 96, 97, 98, 51, 87, 88, 93,
+ 26, 26, 31, 26, 88, 88, 26, 26, 67, 69,
+ 32, 50, 51, 52, 92, 96, 24, 59, 35, 36,
+ 37, 38, 39, 43, 46, 47, 54, 55, 35, 36,
+ 37, 38, 39, 43, 46, 47, 54, 55, 26, 26,
+ 26, 29, 56, 26, 26, 29, 56, 26, 26, 26,
+ 26, 26, 26, 26, 88, 88, 0, 26, 65, 64,
+ 66, 51, 52, 91, 33, 34, 49, 50, 48, 53,
+ 92, 96, 4, 51, 89, 90, 96, 93, 50, 93,
+ 14, 57, 92, 50, 93, 14, 14, 59, 93, 69,
+ 66, 19, 25, 60, 26, 26, 26, 29, 56, 26,
+ 26, 29, 56, 26, 26, 26, 26, 26, 26, 26,
+ 26, 29, 56, 26, 26, 29, 56, 26, 26, 26,
+ 26, 26, 58, 60, 64, 93, 93, 95, 95, 93,
+ 93, 88, 33, 34, 49, 50, 51, 21, 93, 14,
+ 21, 57, 88, 88, 93, 93, 14, 21, 57, 88,
+ 88, 60, 69, 75, 66, 93, 95, 95, 49, 50,
+ 97, 97, 5, 6, 7, 82, 93, 93, 93, 93,
+ 93, 83, 84, 85, 93, 14, 57, 88, 26, 63,
+ 92, 88, 15, 58, 14, 57, 14, 57, 87, 93,
+ 63, 87, 15, 15, 93, 66, 75, 88, 88, 7,
+ 90, 90, 90, 90, 90, 9, 40, 41, 42, 84,
+ 93, 9, 26, 59, 86, 88, 88, 15, 26, 92,
+ 93, 58, 88, 88, 87, 87, 15, 90, 92, 58,
+ 75, 7, 4, 49, 50, 51, 40, 41, 42, 9,
+ 86, 53, 60, 15, 58, 93, 14, 57, 15, 58,
+ 15, 58, 93, 88, 93, 93, 93, 60, 26, 88,
+ 93, 14, 57, 88, 88, 14, 57, 5, 82, 88,
+ 93, 88, 88, 15, 58, 87, 87, 88, 15, 58,
+ 15, 58
};
#define yyerrok (yyerrstatus = 0)
@@ -2107,7 +2092,7 @@ yyreduce:
switch (yyn)
{
case 2:
-#line 374 "/Users/chet/src/bash/src/parse.y"
+#line 377 "/Users/chet/src/bash/src/parse.y"
{
/* Case of regular command. Discard the error
safety net,and return the command just parsed. */
@@ -2121,7 +2106,7 @@ yyreduce:
break;
case 3:
-#line 385 "/Users/chet/src/bash/src/parse.y"
+#line 388 "/Users/chet/src/bash/src/parse.y"
{
/* Case of regular command, but not a very
interesting one. Return a NULL command. */
@@ -2133,7 +2118,7 @@ yyreduce:
break;
case 4:
-#line 394 "/Users/chet/src/bash/src/parse.y"
+#line 397 "/Users/chet/src/bash/src/parse.y"
{
/* Error during parsing. Return NULL command. */
global_command = (COMMAND *)NULL;
@@ -2151,7 +2136,7 @@ yyreduce:
break;
case 5:
-#line 409 "/Users/chet/src/bash/src/parse.y"
+#line 412 "/Users/chet/src/bash/src/parse.y"
{
/* Case of EOF seen by itself. Do ignoreeof or
not. */
@@ -2162,17 +2147,17 @@ yyreduce:
break;
case 6:
-#line 419 "/Users/chet/src/bash/src/parse.y"
+#line 422 "/Users/chet/src/bash/src/parse.y"
{ (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
break;
case 7:
-#line 421 "/Users/chet/src/bash/src/parse.y"
+#line 424 "/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 425 "/Users/chet/src/bash/src/parse.y"
+#line 428 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 1;
redir.filename = (yyvsp[(2) - (2)].word);
@@ -2181,7 +2166,7 @@ yyreduce:
break;
case 9:
-#line 431 "/Users/chet/src/bash/src/parse.y"
+#line 434 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 0;
redir.filename = (yyvsp[(2) - (2)].word);
@@ -2190,7 +2175,7 @@ yyreduce:
break;
case 10:
-#line 437 "/Users/chet/src/bash/src/parse.y"
+#line 440 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2199,7 +2184,7 @@ yyreduce:
break;
case 11:
-#line 443 "/Users/chet/src/bash/src/parse.y"
+#line 446 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2208,7 +2193,7 @@ yyreduce:
break;
case 12:
-#line 449 "/Users/chet/src/bash/src/parse.y"
+#line 452 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2217,7 +2202,7 @@ yyreduce:
break;
case 13:
-#line 455 "/Users/chet/src/bash/src/parse.y"
+#line 458 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2226,7 +2211,7 @@ yyreduce:
break;
case 14:
-#line 461 "/Users/chet/src/bash/src/parse.y"
+#line 464 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 1;
redir.filename = (yyvsp[(2) - (2)].word);
@@ -2235,7 +2220,7 @@ yyreduce:
break;
case 15:
-#line 467 "/Users/chet/src/bash/src/parse.y"
+#line 470 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2244,7 +2229,7 @@ yyreduce:
break;
case 16:
-#line 473 "/Users/chet/src/bash/src/parse.y"
+#line 476 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2253,7 +2238,7 @@ yyreduce:
break;
case 17:
-#line 479 "/Users/chet/src/bash/src/parse.y"
+#line 482 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 1;
redir.filename = (yyvsp[(2) - (2)].word);
@@ -2262,7 +2247,7 @@ yyreduce:
break;
case 18:
-#line 485 "/Users/chet/src/bash/src/parse.y"
+#line 488 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2271,7 +2256,7 @@ yyreduce:
break;
case 19:
-#line 491 "/Users/chet/src/bash/src/parse.y"
+#line 494 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2280,7 +2265,7 @@ yyreduce:
break;
case 20:
-#line 497 "/Users/chet/src/bash/src/parse.y"
+#line 500 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 0;
redir.filename = (yyvsp[(2) - (2)].word);
@@ -2289,7 +2274,7 @@ yyreduce:
break;
case 21:
-#line 503 "/Users/chet/src/bash/src/parse.y"
+#line 506 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2298,7 +2283,7 @@ yyreduce:
break;
case 22:
-#line 509 "/Users/chet/src/bash/src/parse.y"
+#line 512 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2307,7 +2292,7 @@ yyreduce:
break;
case 23:
-#line 515 "/Users/chet/src/bash/src/parse.y"
+#line 518 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 0;
redir.filename = (yyvsp[(2) - (2)].word);
@@ -2317,7 +2302,7 @@ yyreduce:
break;
case 24:
-#line 522 "/Users/chet/src/bash/src/parse.y"
+#line 525 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2327,7 +2312,7 @@ yyreduce:
break;
case 25:
-#line 529 "/Users/chet/src/bash/src/parse.y"
+#line 532 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2337,7 +2322,7 @@ yyreduce:
break;
case 26:
-#line 536 "/Users/chet/src/bash/src/parse.y"
+#line 539 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 0;
redir.filename = (yyvsp[(2) - (2)].word);
@@ -2347,7 +2332,7 @@ yyreduce:
break;
case 27:
-#line 543 "/Users/chet/src/bash/src/parse.y"
+#line 546 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2357,7 +2342,7 @@ yyreduce:
break;
case 28:
-#line 550 "/Users/chet/src/bash/src/parse.y"
+#line 553 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2367,7 +2352,7 @@ yyreduce:
break;
case 29:
-#line 557 "/Users/chet/src/bash/src/parse.y"
+#line 560 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 0;
redir.filename = (yyvsp[(2) - (2)].word);
@@ -2376,7 +2361,7 @@ yyreduce:
break;
case 30:
-#line 563 "/Users/chet/src/bash/src/parse.y"
+#line 566 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2385,7 +2370,7 @@ yyreduce:
break;
case 31:
-#line 569 "/Users/chet/src/bash/src/parse.y"
+#line 572 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2394,7 +2379,7 @@ yyreduce:
break;
case 32:
-#line 575 "/Users/chet/src/bash/src/parse.y"
+#line 578 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 0;
redir.dest = (yyvsp[(2) - (2)].number);
@@ -2403,7 +2388,7 @@ yyreduce:
break;
case 33:
-#line 581 "/Users/chet/src/bash/src/parse.y"
+#line 584 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.dest = (yyvsp[(3) - (3)].number);
@@ -2412,7 +2397,7 @@ yyreduce:
break;
case 34:
-#line 587 "/Users/chet/src/bash/src/parse.y"
+#line 590 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.dest = (yyvsp[(3) - (3)].number);
@@ -2421,7 +2406,7 @@ yyreduce:
break;
case 35:
-#line 593 "/Users/chet/src/bash/src/parse.y"
+#line 596 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 1;
redir.dest = (yyvsp[(2) - (2)].number);
@@ -2430,7 +2415,7 @@ yyreduce:
break;
case 36:
-#line 599 "/Users/chet/src/bash/src/parse.y"
+#line 602 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.dest = (yyvsp[(3) - (3)].number);
@@ -2439,7 +2424,7 @@ yyreduce:
break;
case 37:
-#line 605 "/Users/chet/src/bash/src/parse.y"
+#line 608 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.dest = (yyvsp[(3) - (3)].number);
@@ -2448,7 +2433,7 @@ yyreduce:
break;
case 38:
-#line 611 "/Users/chet/src/bash/src/parse.y"
+#line 614 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 0;
redir.filename = (yyvsp[(2) - (2)].word);
@@ -2457,7 +2442,7 @@ yyreduce:
break;
case 39:
-#line 617 "/Users/chet/src/bash/src/parse.y"
+#line 620 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2466,7 +2451,7 @@ yyreduce:
break;
case 40:
-#line 623 "/Users/chet/src/bash/src/parse.y"
+#line 626 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2475,7 +2460,7 @@ yyreduce:
break;
case 41:
-#line 629 "/Users/chet/src/bash/src/parse.y"
+#line 632 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 1;
redir.filename = (yyvsp[(2) - (2)].word);
@@ -2484,7 +2469,7 @@ yyreduce:
break;
case 42:
-#line 635 "/Users/chet/src/bash/src/parse.y"
+#line 638 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2493,7 +2478,7 @@ yyreduce:
break;
case 43:
-#line 641 "/Users/chet/src/bash/src/parse.y"
+#line 644 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.filename = (yyvsp[(3) - (3)].word);
@@ -2502,7 +2487,7 @@ yyreduce:
break;
case 44:
-#line 647 "/Users/chet/src/bash/src/parse.y"
+#line 650 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 1;
redir.dest = 0;
@@ -2511,7 +2496,7 @@ yyreduce:
break;
case 45:
-#line 653 "/Users/chet/src/bash/src/parse.y"
+#line 656 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.dest = 0;
@@ -2520,7 +2505,7 @@ yyreduce:
break;
case 46:
-#line 659 "/Users/chet/src/bash/src/parse.y"
+#line 662 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.dest = 0;
@@ -2529,7 +2514,7 @@ yyreduce:
break;
case 47:
-#line 665 "/Users/chet/src/bash/src/parse.y"
+#line 668 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 0;
redir.dest = 0;
@@ -2538,7 +2523,7 @@ yyreduce:
break;
case 48:
-#line 671 "/Users/chet/src/bash/src/parse.y"
+#line 674 "/Users/chet/src/bash/src/parse.y"
{
source.dest = (yyvsp[(1) - (3)].number);
redir.dest = 0;
@@ -2547,7 +2532,7 @@ yyreduce:
break;
case 49:
-#line 677 "/Users/chet/src/bash/src/parse.y"
+#line 680 "/Users/chet/src/bash/src/parse.y"
{
source.filename = (yyvsp[(1) - (3)].word);
redir.dest = 0;
@@ -2556,7 +2541,7 @@ yyreduce:
break;
case 50:
-#line 683 "/Users/chet/src/bash/src/parse.y"
+#line 686 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 1;
redir.filename = (yyvsp[(2) - (2)].word);
@@ -2565,7 +2550,7 @@ yyreduce:
break;
case 51:
-#line 689 "/Users/chet/src/bash/src/parse.y"
+#line 692 "/Users/chet/src/bash/src/parse.y"
{
source.dest = 1;
redir.filename = (yyvsp[(2) - (2)].word);
@@ -2574,29 +2559,29 @@ yyreduce:
break;
case 52:
-#line 697 "/Users/chet/src/bash/src/parse.y"
+#line 700 "/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"
+#line 702 "/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"
+#line 704 "/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"
+#line 708 "/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"
+#line 712 "/Users/chet/src/bash/src/parse.y"
{
register REDIRECT *t;
@@ -2608,27 +2593,27 @@ yyreduce:
break;
case 57:
-#line 720 "/Users/chet/src/bash/src/parse.y"
+#line 723 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
break;
case 58:
-#line 722 "/Users/chet/src/bash/src/parse.y"
+#line 725 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
break;
case 59:
-#line 726 "/Users/chet/src/bash/src/parse.y"
+#line 729 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
break;
case 60:
-#line 728 "/Users/chet/src/bash/src/parse.y"
+#line 731 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 61:
-#line 730 "/Users/chet/src/bash/src/parse.y"
+#line 733 "/Users/chet/src/bash/src/parse.y"
{
COMMAND *tc;
@@ -2647,72 +2632,72 @@ yyreduce:
break;
case 62:
-#line 746 "/Users/chet/src/bash/src/parse.y"
+#line 749 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 63:
-#line 748 "/Users/chet/src/bash/src/parse.y"
+#line 751 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 64:
-#line 752 "/Users/chet/src/bash/src/parse.y"
+#line 755 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 65:
-#line 754 "/Users/chet/src/bash/src/parse.y"
+#line 757 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 66:
-#line 756 "/Users/chet/src/bash/src/parse.y"
+#line 759 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
break;
case 67:
-#line 758 "/Users/chet/src/bash/src/parse.y"
+#line 761 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
break;
case 68:
-#line 760 "/Users/chet/src/bash/src/parse.y"
+#line 763 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 69:
-#line 762 "/Users/chet/src/bash/src/parse.y"
+#line 765 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 70:
-#line 764 "/Users/chet/src/bash/src/parse.y"
+#line 767 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 71:
-#line 766 "/Users/chet/src/bash/src/parse.y"
+#line 769 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 72:
-#line 768 "/Users/chet/src/bash/src/parse.y"
+#line 771 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 73:
-#line 770 "/Users/chet/src/bash/src/parse.y"
+#line 773 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 74:
-#line 772 "/Users/chet/src/bash/src/parse.y"
+#line 775 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 75:
-#line 776 "/Users/chet/src/bash/src/parse.y"
+#line 779 "/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--;
@@ -2720,7 +2705,7 @@ yyreduce:
break;
case 76:
-#line 781 "/Users/chet/src/bash/src/parse.y"
+#line 784 "/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--;
@@ -2728,7 +2713,7 @@ yyreduce:
break;
case 77:
-#line 786 "/Users/chet/src/bash/src/parse.y"
+#line 789 "/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--;
@@ -2736,7 +2721,7 @@ yyreduce:
break;
case 78:
-#line 791 "/Users/chet/src/bash/src/parse.y"
+#line 794 "/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--;
@@ -2744,7 +2729,7 @@ yyreduce:
break;
case 79:
-#line 796 "/Users/chet/src/bash/src/parse.y"
+#line 799 "/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--;
@@ -2752,7 +2737,7 @@ yyreduce:
break;
case 80:
-#line 801 "/Users/chet/src/bash/src/parse.y"
+#line 804 "/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--;
@@ -2760,7 +2745,7 @@ yyreduce:
break;
case 81:
-#line 806 "/Users/chet/src/bash/src/parse.y"
+#line 809 "/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--;
@@ -2768,7 +2753,7 @@ yyreduce:
break;
case 82:
-#line 811 "/Users/chet/src/bash/src/parse.y"
+#line 814 "/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--;
@@ -2776,7 +2761,7 @@ yyreduce:
break;
case 83:
-#line 818 "/Users/chet/src/bash/src/parse.y"
+#line 821 "/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--;
@@ -2784,7 +2769,7 @@ yyreduce:
break;
case 84:
-#line 823 "/Users/chet/src/bash/src/parse.y"
+#line 826 "/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--;
@@ -2792,7 +2777,7 @@ yyreduce:
break;
case 85:
-#line 828 "/Users/chet/src/bash/src/parse.y"
+#line 831 "/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--;
@@ -2800,7 +2785,7 @@ yyreduce:
break;
case 86:
-#line 833 "/Users/chet/src/bash/src/parse.y"
+#line 836 "/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--;
@@ -2808,7 +2793,7 @@ yyreduce:
break;
case 87:
-#line 840 "/Users/chet/src/bash/src/parse.y"
+#line 843 "/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--;
@@ -2816,7 +2801,7 @@ yyreduce:
break;
case 88:
-#line 845 "/Users/chet/src/bash/src/parse.y"
+#line 848 "/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--;
@@ -2824,7 +2809,7 @@ yyreduce:
break;
case 89:
-#line 850 "/Users/chet/src/bash/src/parse.y"
+#line 853 "/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--;
@@ -2832,7 +2817,7 @@ yyreduce:
break;
case 90:
-#line 855 "/Users/chet/src/bash/src/parse.y"
+#line 858 "/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--;
@@ -2840,7 +2825,7 @@ yyreduce:
break;
case 91:
-#line 860 "/Users/chet/src/bash/src/parse.y"
+#line 863 "/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--;
@@ -2848,7 +2833,7 @@ yyreduce:
break;
case 92:
-#line 865 "/Users/chet/src/bash/src/parse.y"
+#line 868 "/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--;
@@ -2856,7 +2841,7 @@ yyreduce:
break;
case 93:
-#line 872 "/Users/chet/src/bash/src/parse.y"
+#line 875 "/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--;
@@ -2864,7 +2849,7 @@ yyreduce:
break;
case 94:
-#line 877 "/Users/chet/src/bash/src/parse.y"
+#line 880 "/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--;
@@ -2872,7 +2857,7 @@ yyreduce:
break;
case 95:
-#line 882 "/Users/chet/src/bash/src/parse.y"
+#line 885 "/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--;
@@ -2880,27 +2865,27 @@ yyreduce:
break;
case 96:
-#line 889 "/Users/chet/src/bash/src/parse.y"
+#line 892 "/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 97:
-#line 892 "/Users/chet/src/bash/src/parse.y"
+#line 895 "/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 98:
-#line 895 "/Users/chet/src/bash/src/parse.y"
+#line 898 "/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 99:
-#line 899 "/Users/chet/src/bash/src/parse.y"
+#line 902 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 100:
-#line 901 "/Users/chet/src/bash/src/parse.y"
+#line 904 "/Users/chet/src/bash/src/parse.y"
{
COMMAND *tc;
@@ -2932,7 +2917,7 @@ yyreduce:
break;
case 101:
-#line 932 "/Users/chet/src/bash/src/parse.y"
+#line 935 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
(yyval.command)->flags |= CMD_WANT_SUBSHELL;
@@ -2940,7 +2925,7 @@ yyreduce:
break;
case 102:
-#line 939 "/Users/chet/src/bash/src/parse.y"
+#line 942 "/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;
@@ -2948,7 +2933,7 @@ yyreduce:
break;
case 103:
-#line 944 "/Users/chet/src/bash/src/parse.y"
+#line 947 "/Users/chet/src/bash/src/parse.y"
{
COMMAND *tc;
@@ -2968,7 +2953,7 @@ yyreduce:
break;
case 104:
-#line 961 "/Users/chet/src/bash/src/parse.y"
+#line 964 "/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;
@@ -2976,7 +2961,7 @@ yyreduce:
break;
case 105:
-#line 966 "/Users/chet/src/bash/src/parse.y"
+#line 969 "/Users/chet/src/bash/src/parse.y"
{
COMMAND *tc;
@@ -2996,7 +2981,7 @@ yyreduce:
break;
case 106:
-#line 983 "/Users/chet/src/bash/src/parse.y"
+#line 986 "/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;
@@ -3004,117 +2989,117 @@ yyreduce:
break;
case 107:
-#line 990 "/Users/chet/src/bash/src/parse.y"
+#line 993 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
break;
case 108:
-#line 992 "/Users/chet/src/bash/src/parse.y"
+#line 995 "/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 109:
-#line 994 "/Users/chet/src/bash/src/parse.y"
+#line 997 "/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 110:
-#line 999 "/Users/chet/src/bash/src/parse.y"
+#line 1002 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
break;
case 111:
-#line 1003 "/Users/chet/src/bash/src/parse.y"
+#line 1006 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
break;
case 112:
-#line 1007 "/Users/chet/src/bash/src/parse.y"
+#line 1010 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(2) - (3)].command); }
break;
case 113:
-#line 1011 "/Users/chet/src/bash/src/parse.y"
+#line 1014 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
break;
case 114:
-#line 1013 "/Users/chet/src/bash/src/parse.y"
+#line 1016 "/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 115:
-#line 1015 "/Users/chet/src/bash/src/parse.y"
+#line 1018 "/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 117:
-#line 1020 "/Users/chet/src/bash/src/parse.y"
+#line 1023 "/Users/chet/src/bash/src/parse.y"
{ (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
break;
case 118:
-#line 1024 "/Users/chet/src/bash/src/parse.y"
+#line 1027 "/Users/chet/src/bash/src/parse.y"
{ (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
break;
case 119:
-#line 1026 "/Users/chet/src/bash/src/parse.y"
+#line 1029 "/Users/chet/src/bash/src/parse.y"
{ (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
break;
case 120:
-#line 1028 "/Users/chet/src/bash/src/parse.y"
+#line 1031 "/Users/chet/src/bash/src/parse.y"
{ (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
break;
case 121:
-#line 1030 "/Users/chet/src/bash/src/parse.y"
+#line 1033 "/Users/chet/src/bash/src/parse.y"
{ (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
break;
case 122:
-#line 1034 "/Users/chet/src/bash/src/parse.y"
+#line 1037 "/Users/chet/src/bash/src/parse.y"
{ (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
break;
case 123:
-#line 1036 "/Users/chet/src/bash/src/parse.y"
+#line 1039 "/Users/chet/src/bash/src/parse.y"
{ (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
break;
case 124:
-#line 1038 "/Users/chet/src/bash/src/parse.y"
+#line 1041 "/Users/chet/src/bash/src/parse.y"
{ (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
break;
case 125:
-#line 1040 "/Users/chet/src/bash/src/parse.y"
+#line 1043 "/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 126:
-#line 1042 "/Users/chet/src/bash/src/parse.y"
+#line 1045 "/Users/chet/src/bash/src/parse.y"
{ (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
break;
case 127:
-#line 1044 "/Users/chet/src/bash/src/parse.y"
+#line 1047 "/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 128:
-#line 1048 "/Users/chet/src/bash/src/parse.y"
+#line 1051 "/Users/chet/src/bash/src/parse.y"
{ (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
break;
case 129:
-#line 1050 "/Users/chet/src/bash/src/parse.y"
+#line 1053 "/Users/chet/src/bash/src/parse.y"
{ (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
break;
case 130:
-#line 1059 "/Users/chet/src/bash/src/parse.y"
+#line 1062 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = (yyvsp[(2) - (2)].command);
if (need_here_doc)
@@ -3123,14 +3108,14 @@ yyreduce:
break;
case 132:
-#line 1068 "/Users/chet/src/bash/src/parse.y"
+#line 1071 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = (yyvsp[(2) - (2)].command);
}
break;
case 134:
-#line 1075 "/Users/chet/src/bash/src/parse.y"
+#line 1078 "/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, '&');
@@ -3140,17 +3125,17 @@ yyreduce:
break;
case 136:
-#line 1086 "/Users/chet/src/bash/src/parse.y"
+#line 1089 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
break;
case 137:
-#line 1088 "/Users/chet/src/bash/src/parse.y"
+#line 1091 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
break;
case 138:
-#line 1090 "/Users/chet/src/bash/src/parse.y"
+#line 1093 "/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), '&');
@@ -3160,37 +3145,37 @@ yyreduce:
break;
case 139:
-#line 1097 "/Users/chet/src/bash/src/parse.y"
+#line 1100 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
break;
case 140:
-#line 1099 "/Users/chet/src/bash/src/parse.y"
+#line 1102 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
break;
case 141:
-#line 1101 "/Users/chet/src/bash/src/parse.y"
+#line 1104 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 144:
-#line 1109 "/Users/chet/src/bash/src/parse.y"
+#line 1112 "/Users/chet/src/bash/src/parse.y"
{ (yyval.number) = '\n'; }
break;
case 145:
-#line 1111 "/Users/chet/src/bash/src/parse.y"
+#line 1114 "/Users/chet/src/bash/src/parse.y"
{ (yyval.number) = ';'; }
break;
case 146:
-#line 1113 "/Users/chet/src/bash/src/parse.y"
+#line 1116 "/Users/chet/src/bash/src/parse.y"
{ (yyval.number) = yacc_EOF; }
break;
case 149:
-#line 1127 "/Users/chet/src/bash/src/parse.y"
+#line 1130 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = (yyvsp[(1) - (1)].command);
if (need_here_doc)
@@ -3206,7 +3191,7 @@ yyreduce:
break;
case 150:
-#line 1140 "/Users/chet/src/bash/src/parse.y"
+#line 1143 "/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, '&');
@@ -3225,7 +3210,7 @@ yyreduce:
break;
case 151:
-#line 1156 "/Users/chet/src/bash/src/parse.y"
+#line 1159 "/Users/chet/src/bash/src/parse.y"
{
(yyval.command) = (yyvsp[(1) - (2)].command);
if (need_here_doc)
@@ -3241,17 +3226,17 @@ yyreduce:
break;
case 152:
-#line 1171 "/Users/chet/src/bash/src/parse.y"
+#line 1174 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
break;
case 153:
-#line 1173 "/Users/chet/src/bash/src/parse.y"
+#line 1176 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
break;
case 154:
-#line 1175 "/Users/chet/src/bash/src/parse.y"
+#line 1178 "/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), '&');
@@ -3261,31 +3246,31 @@ yyreduce:
break;
case 155:
-#line 1182 "/Users/chet/src/bash/src/parse.y"
+#line 1185 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
break;
case 156:
-#line 1185 "/Users/chet/src/bash/src/parse.y"
+#line 1188 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 157:
-#line 1189 "/Users/chet/src/bash/src/parse.y"
+#line 1192 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
case 158:
-#line 1191 "/Users/chet/src/bash/src/parse.y"
+#line 1194 "/Users/chet/src/bash/src/parse.y"
{
if ((yyvsp[(2) - (2)].command))
- (yyvsp[(2) - (2)].command)->flags |= CMD_INVERT_RETURN;
+ (yyvsp[(2) - (2)].command)->flags ^= CMD_INVERT_RETURN; /* toggle */
(yyval.command) = (yyvsp[(2) - (2)].command);
}
break;
case 159:
-#line 1197 "/Users/chet/src/bash/src/parse.y"
+#line 1200 "/Users/chet/src/bash/src/parse.y"
{
if ((yyvsp[(2) - (2)].command))
(yyvsp[(2) - (2)].command)->flags |= (yyvsp[(1) - (2)].number);
@@ -3294,50 +3279,53 @@ yyreduce:
break;
case 160:
-#line 1203 "/Users/chet/src/bash/src/parse.y"
+#line 1206 "/Users/chet/src/bash/src/parse.y"
{
- if ((yyvsp[(3) - (3)].command))
- (yyvsp[(3) - (3)].command)->flags |= (yyvsp[(1) - (3)].number)|CMD_INVERT_RETURN;
- (yyval.command) = (yyvsp[(3) - (3)].command);
- }
- break;
+ ELEMENT x;
- 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;
- (yyval.command) = (yyvsp[(3) - (3)].command);
+ /* Boy, this is unclean. `time' by itself can
+ time a null command. We cheat and push a
+ newline back if the list_terminator was a newline
+ to avoid the double-newline problem (one to
+ terminate this, one to terminate the command) */
+ x.word = 0;
+ x.redirect = 0;
+ (yyval.command) = make_simple_command (x, (COMMAND *)NULL);
+ (yyval.command)->flags |= (yyvsp[(1) - (2)].number);
+ /* XXX - let's cheat and push a newline back */
+ if ((yyvsp[(2) - (2)].number) == '\n')
+ token_to_read = '\n';
}
break;
- case 162:
-#line 1215 "/Users/chet/src/bash/src/parse.y"
+ case 161:
+#line 1223 "/Users/chet/src/bash/src/parse.y"
{
ELEMENT x;
- /* Boy, this is unclean. `time' by itself can
- time a null command. We cheat and push a
+ /* This is just as unclean. Posix says that `!'
+ by itself should be equivalent to `false'.
+ We cheat and push a
newline back if the list_terminator was a newline
to avoid the double-newline problem (one to
terminate this, one to terminate the command) */
x.word = 0;
x.redirect = 0;
(yyval.command) = make_simple_command (x, (COMMAND *)NULL);
- (yyval.command)->flags |= (yyvsp[(1) - (2)].number);
+ (yyval.command)->flags |= CMD_INVERT_RETURN;
/* XXX - let's cheat and push a newline back */
if ((yyvsp[(2) - (2)].number) == '\n')
token_to_read = '\n';
}
break;
- case 163:
-#line 1235 "/Users/chet/src/bash/src/parse.y"
+ case 162:
+#line 1243 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
break;
- case 164:
-#line 1237 "/Users/chet/src/bash/src/parse.y"
+ case 163:
+#line 1245 "/Users/chet/src/bash/src/parse.y"
{
/* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
COMMAND *tc;
@@ -3362,24 +3350,29 @@ yyreduce:
}
break;
- case 165:
-#line 1260 "/Users/chet/src/bash/src/parse.y"
+ case 164:
+#line 1268 "/Users/chet/src/bash/src/parse.y"
{ (yyval.command) = (yyvsp[(1) - (1)].command); }
break;
- case 166:
-#line 1264 "/Users/chet/src/bash/src/parse.y"
+ case 165:
+#line 1272 "/Users/chet/src/bash/src/parse.y"
{ (yyval.number) = CMD_TIME_PIPELINE; }
break;
+ case 166:
+#line 1274 "/Users/chet/src/bash/src/parse.y"
+ { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
+ break;
+
case 167:
-#line 1266 "/Users/chet/src/bash/src/parse.y"
+#line 1276 "/Users/chet/src/bash/src/parse.y"
{ (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
break;
/* Line 1267 of yacc.c. */
-#line 3383 "y.tab.c"
+#line 3376 "y.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3593,7 +3586,7 @@ yyreturn:
}
-#line 1268 "/Users/chet/src/bash/src/parse.y"
+#line 1278 "/Users/chet/src/bash/src/parse.y"
/* Initial size to allocate for tokens, and the
@@ -3751,11 +3744,11 @@ yy_readline_get ()
give_terminal_to (shell_pgrp, 0);
#endif /* JOB_CONTROL */
- old_sigint = (SigHandler *)NULL;
+ old_sigint = (SigHandler *)IMPOSSIBLE_TRAP_HANDLER;
if (signal_is_ignored (SIGINT) == 0)
{
- old_sigint = (SigHandler *)set_signal_handler (SIGINT, sigint_sighandler);
interrupt_immediately++;
+ old_sigint = (SigHandler *)set_signal_handler (SIGINT, sigint_sighandler);
}
terminate_immediately = 1;
@@ -3763,10 +3756,11 @@ yy_readline_get ()
current_readline_prompt : "");
terminate_immediately = 0;
- if (signal_is_ignored (SIGINT) == 0 && old_sigint)
+ if (signal_is_ignored (SIGINT) == 0)
{
interrupt_immediately--;
- set_signal_handler (SIGINT, old_sigint);
+ if (old_sigint != IMPOSSIBLE_TRAP_HANDLER)
+ set_signal_handler (SIGINT, old_sigint);
}
#if 0
@@ -3965,6 +3959,9 @@ typedef struct stream_saver {
/* The globally known line number. */
int line_number = 0;
+/* The line number offset set by assigning to LINENO. Not currently used. */
+int line_number_base = 0;
+
#if defined (COND_COMMAND)
static int cond_lineno;
static int cond_token;
@@ -4286,6 +4283,7 @@ read_a_line (remove_quoted_newline)
}
else if (c == '\\' && remove_quoted_newline)
{
+ QUIT;
peekc = yy_getc ();
if (peekc == '\n')
{
@@ -4387,6 +4385,7 @@ STRING_INT_ALIST word_token_alist[] = {
/* other tokens that can be returned by read_token() */
STRING_INT_ALIST other_token_alist[] = {
/* Multiple-character tokens with special values */
+ { "--", TIMEIGN },
{ "-p", TIMEOPT },
{ "&&", AND_AND },
{ "||", OR_OR },
@@ -4607,7 +4606,7 @@ shell_getc (remove_quoted_newline)
shell_input_line = expansions;
shell_input_line_len = shell_input_line ?
strlen (shell_input_line) : 0;
- if (!shell_input_line_len)
+ if (shell_input_line_len == 0)
current_command_line_count--;
/* We have to force the xrealloc below because we don't know
@@ -4632,7 +4631,7 @@ shell_getc (remove_quoted_newline)
else
{
char *hdcs;
- hdcs = history_delimiting_chars ();
+ hdcs = history_delimiting_chars (shell_input_line);
if (hdcs && hdcs[0] == ';')
maybe_add_history (shell_input_line);
}
@@ -4672,6 +4671,7 @@ shell_getc (remove_quoted_newline)
}
}
+next_alias_char:
uc = shell_input_line[shell_input_line_index];
if (uc)
@@ -4684,7 +4684,7 @@ shell_getc (remove_quoted_newline)
Do it transparently; just return the next character of the string popped
to. */
pop_alias:
- if (!uc && (pushed_string_list != (STRING_SAVER *)NULL))
+ if (uc == 0 && (pushed_string_list != (STRING_SAVER *)NULL))
{
pop_string ();
uc = shell_input_line[shell_input_line_index];
@@ -4698,21 +4698,28 @@ pop_alias:
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) */
+ /* What do we do here if we're expanding an alias whose definition
+ includes an escaped newline? If that's the last character in the
+ alias expansion, we just pop the pushed string list (recall that
+ we inhibit the appending of a space in mk_alexpansion() if newline
+ is the last character). If it's not the last character, we need
+ to consume the quoted newline and move to the next character in
+ the expansion. */
if (expanding_alias () && shell_input_line[shell_input_line_index+1] == '\0')
{
uc = 0;
goto pop_alias;
}
-#endif
-
- goto restart_read;
+ else if (expanding_alias () && shell_input_line[shell_input_line_index+1] != '\0')
+ {
+ shell_input_line_index++; /* skip newline */
+ goto next_alias_char; /* and get next character */
+ }
+ else
+ goto restart_read;
}
- if (!uc && shell_input_line_terminator == EOF)
+ if (uc == 0 && shell_input_line_terminator == EOF)
return ((shell_input_line_index != 0) ? '\n' : EOF);
return (uc);
@@ -4919,11 +4926,9 @@ 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
+ /* If the last character in the alias is a newline, don't add a trailing
+ space to the expansion. Works with shell_getc above. */
+ if (r[l - 1] != ' ' && r[l - 1] != '\n')
r[l++] = ' ';
r[l] = '\0';
return r;
@@ -4968,6 +4973,20 @@ static int
time_command_acceptable ()
{
#if defined (COMMAND_TIMING)
+ int i;
+
+ if (posixly_correct && shell_compatibility_level > 41)
+ {
+ /* Quick check of the rest of the line to find the next token. If it
+ begins with a `-', Posix says to not return `time' as the token.
+ This was interp 267. */
+ i = shell_input_line_index;
+ while (i < shell_input_line_len && (shell_input_line[i] == ' ' || shell_input_line[i] == '\t'))
+ i++;
+ if (shell_input_line[i] == '-')
+ return 0;
+ }
+
switch (last_read_token)
{
case 0:
@@ -4981,6 +5000,10 @@ time_command_acceptable ()
case ELSE:
case '{': /* } */
case '(': /* ) */
+ case BANG: /* ! time pipeline */
+ case TIME: /* time time pipeline */
+ case TIMEOPT: /* time -p time pipeline */
+ case TIMEIGN: /* time -p -- ... */
return 1;
default:
return 0;
@@ -5007,6 +5030,7 @@ time_command_acceptable ()
`}' is recognized if there is an unclosed `{' present.
`-p' is returned as TIMEOPT if the last read token was TIME.
+ `--' is returned as TIMEIGN if the last read token was TIMEOPT.
']]' is returned as COND_END if the parser is currently parsing
a conditional expression ((parser_state & PST_CONDEXPR) != 0)
@@ -5092,13 +5116,9 @@ special_case_tokens (tokstr)
/* Handle -p after `time'. */
if (last_read_token == TIME && tokstr[0] == '-' && tokstr[1] == 'p' && !tokstr[2])
return (TIMEOPT);
-#endif
-
-#if 0
-#if defined (COMMAND_TIMING)
- if (STREQ (token, "time") && ((parser_state & PST_CASEPAT) == 0) && time_command_acceptable ())
- return (TIME);
-#endif /* COMMAND_TIMING */
+ /* Handle -- after `time -p'. */
+ if (last_read_token == TIMEOPT && tokstr[0] == '-' && tokstr[1] == '-' && !tokstr[2])
+ return (TIMEIGN);
#endif
#if defined (COND_COMMAND) /* [[ */
@@ -5383,12 +5403,13 @@ tokword:
* reprompting the user, if necessary, after reading a newline, and returning
* correct error values if it reads EOF.
*/
-#define P_FIRSTCLOSE 0x01
-#define P_ALLOWESC 0x02
-#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 */
+#define P_FIRSTCLOSE 0x0001
+#define P_ALLOWESC 0x0002
+#define P_DQUOTE 0x0004
+#define P_COMMAND 0x0008 /* parsing a command, so look for comments */
+#define P_BACKQUOTE 0x0010 /* parsing a backquoted command substitution */
+#define P_ARRAYSUB 0x0020 /* parsing a [...] array subscript for assignment */
+#define P_DOLBRACE 0x0040 /* parsing a ${...} construct */
/* Lexical state while parsing a grouping construct or $(...). */
#define LEX_WASDOL 0x001
@@ -5436,6 +5457,9 @@ parse_matched_pair (qc, open, close, lenp, flags)
int nestlen, ttranslen, start_lineno;
char *ret, *nestret, *ttrans;
int retind, retsize, rflags;
+ int dolbrace_state;
+
+ dolbrace_state = (flags & P_DOLBRACE) ? DOLBRACE_PARAM : 0;
/*itrace("parse_matched_pair[%d]: open = %c close = %c flags = %d", line_number, open, close, flags);*/
count = 1;
@@ -5453,7 +5477,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
start_lineno = line_number;
while (count)
{
- ch = shell_getc (qc != '\'' && (tflags & LEX_PASSNEXT) == 0);
+ ch = shell_getc (qc != '\'' && (tflags & (LEX_PASSNEXT)) == 0);
if (ch == EOF)
{
@@ -5546,14 +5570,42 @@ parse_matched_pair (qc, open, close, lenp, flags)
if MBTEST(ch == '\\') /* backslashes */
tflags |= LEX_PASSNEXT;
-#if 0
+ /* Based on which dolstate is currently in (param, op, or word),
+ decide what the op is. We're really only concerned if it's % or
+ #, so we can turn on a flag that says whether or not we should
+ treat single quotes as special when inside a double-quoted
+ ${...}. This logic must agree with subst.c:extract_dollar_brace_string
+ since they share the same defines. */
+ if (flags & P_DOLBRACE)
+ {
+ /* ${param%[%]word} */
+ if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '%' && retind > 1)
+ dolbrace_state = DOLBRACE_QUOTE;
+ /* ${param#[#]word} */
+ else if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '#' && retind > 1)
+ dolbrace_state = DOLBRACE_QUOTE;
+ /* ${param/[/]pat/rep} */
+ else if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '/' && retind > 1)
+ dolbrace_state = DOLBRACE_QUOTE;
+ /* ${param^[^]pat} */
+ else if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '^' && retind > 1)
+ dolbrace_state = DOLBRACE_QUOTE;
+ /* ${param,[,]pat} */
+ else if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == ',' && retind > 1)
+ dolbrace_state = DOLBRACE_QUOTE;
+ else if MBTEST(dolbrace_state == DOLBRACE_PARAM && strchr ("#%^,~:-=?+/", ch) != 0)
+ dolbrace_state = DOLBRACE_OP;
+ else if MBTEST(dolbrace_state == DOLBRACE_OP && strchr ("#%^,~:-=?+/", ch) == 0)
+ dolbrace_state = DOLBRACE_WORD;
+ }
+
/* The big hammer. Single quotes aren't special in double quotes. The
- problem is that Posix says the single quotes are semi-special:
+ problem is that Posix used to say the single quotes are semi-special:
within a double-quoted ${...} construct "an even number of
unescaped double-quotes or single-quotes, if any, shall occur." */
- if MBTEST(open == '{' && (flags & P_DQUOTE) && ch == '\'') /* } */
+ /* This was changed in Austin Group Interp 221 */
+ if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
continue;
-#endif
/* Could also check open == '`' if we want to parse grouping constructs
inside old-style command substitution. */
@@ -5628,7 +5680,7 @@ parse_dollar_word:
if (ch == '(') /* ) */
nestret = parse_comsub (0, '(', ')', &nestlen, (rflags|P_COMMAND) & ~P_DQUOTE);
else if (ch == '{') /* } */
- nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|rflags);
+ nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags);
else if (ch == '[') /* ] */
nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags);
@@ -5663,6 +5715,13 @@ parse_comsub (qc, open, close, lenp, flags)
char *ret, *nestret, *ttrans, *heredelim;
int retind, retsize, rflags, hdlen;
+ /* Posix interp 217 says arithmetic expressions have precedence, so
+ assume $(( introduces arithmetic expansion and parse accordingly. */
+ peekc = shell_getc (0);
+ shell_ungetc (peekc);
+ if (peekc == '(')
+ return (parse_matched_pair (qc, open, close, lenp, 0));
+
/*itrace("parse_comsub: qc = `%c' open = %c close = %c", qc, open, close);*/
count = 1;
tflags = LEX_RESWDOK;
@@ -5687,7 +5746,7 @@ parse_comsub (qc, open, close, lenp, flags)
while (count)
{
comsub_readchar:
- ch = shell_getc (qc != '\'' && (tflags & LEX_PASSNEXT) == 0);
+ ch = shell_getc (qc != '\'' && (tflags & (LEX_INCOMMENT|LEX_PASSNEXT)) == 0);
if (ch == EOF)
{
@@ -5811,7 +5870,7 @@ eof_error:
}
/* Skip whitespace */
- if MBTEST(shellblank (ch) && lex_rwlen == 0)
+ if MBTEST(shellblank (ch) && (tflags & LEX_HEREDELIM) == 0 && lex_rwlen == 0)
{
/* Add this character. */
RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
@@ -6063,7 +6122,7 @@ eof_error:
if (ch == '(') /* ) */
nestret = parse_comsub (0, '(', ')', &nestlen, (rflags|P_COMMAND) & ~P_DQUOTE);
else if (ch == '{') /* } */
- nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|rflags);
+ nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags);
else if (ch == '[') /* ] */
nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags);
@@ -6086,8 +6145,7 @@ eof_error:
return ret;
}
-/* XXX - this needs to handle functionality like subst.c:no_longjmp_on_fatal_error;
- maybe extract_command_subst should handle it. */
+/* Recursively call the parser to parse a $(...) command substitution. */
char *
xparse_dolparen (base, string, indp, flags)
char *base;
@@ -6711,7 +6769,7 @@ read_token_word (character)
((peek_char == '{' || peek_char == '[') && character == '$')) /* ) ] } */
{
if (peek_char == '{') /* } */
- ttok = parse_matched_pair (cd, '{', '}', &ttoklen, P_FIRSTCLOSE);
+ ttok = parse_matched_pair (cd, '{', '}', &ttoklen, P_FIRSTCLOSE|P_DOLBRACE);
else if (peek_char == '(') /* ) */
{
/* XXX - push and pop the `(' as a delimiter for use by
@@ -7046,6 +7104,7 @@ reserved_word_acceptable (toksym)
case THEN:
case TIME:
case TIMEOPT:
+ case TIMEIGN:
case COPROC:
case UNTIL:
case WHILE:
@@ -7056,6 +7115,8 @@ reserved_word_acceptable (toksym)
if (last_read_token == WORD && token_before_that == COPROC)
return 1;
#endif
+ if (last_read_token == WORD && token_before_that == FUNCTION)
+ return 1;
return 0;
}
}
@@ -7116,20 +7177,35 @@ static const int no_semi_successors[] = {
/* If we are not within a delimited expression, try to be smart
about which separators can be semi-colons and which must be
newlines. Returns the string that should be added into the
- history entry. */
+ history entry. LINE is the line we're about to add; it helps
+ make some more intelligent decisions in certain cases. */
char *
-history_delimiting_chars ()
+history_delimiting_chars (line)
+ const char *line;
{
+ static int last_was_heredoc = 0; /* was the last entry the start of a here document? */
register int i;
+ if ((parser_state & PST_HEREDOC) == 0)
+ last_was_heredoc = 0;
+
if (dstack.delimiter_depth != 0)
return ("\n");
/* We look for current_command_line_count == 2 because we are looking to
add the first line of the body of the here document (the second line
- of the command). */
+ of the command). We also keep LAST_WAS_HEREDOC as a private sentinel
+ variable to note when we think we added the first line of a here doc
+ (the one with a "<<" somewhere in it) */
if (parser_state & PST_HEREDOC)
- return (current_command_line_count == 2 ? "\n" : "");
+ {
+ if (last_was_heredoc)
+ {
+ last_was_heredoc = 0;
+ return "\n";
+ }
+ return (current_command_line_count == 2 ? "\n" : "");
+ }
/* First, handle some special cases. */
/*(*/
@@ -7152,6 +7228,15 @@ history_delimiting_chars ()
else if (token_before_that == WORD && two_tokens_ago == FUNCTION)
return " "; /* function def using `function name' without `()' */
+ /* If we're not in a here document, but we think we're about to parse one,
+ and we would otherwise return a `;', return a newline to delimit the
+ line with the here-doc delimiter */
+ else if ((parser_state & PST_HEREDOC) == 0 && current_command_line_count > 1 && last_read_token == '\n' && strstr (line, "<<"))
+ {
+ last_was_heredoc = 1;
+ return "\n";
+ }
+
else if (token_before_that == WORD && two_tokens_ago == FOR)
{
/* Tricky. `for i\nin ...' should not have a semicolon, but
@@ -7481,7 +7566,7 @@ decode_prompt_string (string)
{
t = strrchr (t_string, '/');
if (t)
- strcpy (t_string, t + 1);
+ memmove (t_string, t + 1, strlen (t)); /* strlen(t) to copy NULL */
}
}
#undef ROOT_PATH
@@ -7768,7 +7853,7 @@ static void
report_syntax_error (message)
char *message;
{
- char *msg;
+ char *msg, *p;
if (message)
{
@@ -7784,6 +7869,12 @@ report_syntax_error (message)
parser's complaining about by looking at current_token. */
if (current_token != 0 && EOF_Reached == 0 && (msg = error_token_from_token (current_token)))
{
+ if (ansic_shouldquote (msg))
+ {
+ p = ansic_quote (msg, 0, NULL);
+ free (msg);
+ msg = p;
+ }
parser_error (line_number, _("syntax error near unexpected token `%s'"), msg);
free (msg);
@@ -8093,10 +8184,6 @@ sh_parser_state_t *
save_parser_state (ps)
sh_parser_state_t *ps;
{
-#if defined (ARRAY_VARS)
- SHELL_VAR *v;
-#endif
-
if (ps == 0)
ps = (sh_parser_state_t *)xmalloc (sizeof (sh_parser_state_t));
if (ps == 0)
@@ -8108,6 +8195,8 @@ save_parser_state (ps)
ps->input_line_terminator = shell_input_line_terminator;
ps->eof_encountered = eof_encountered;
+ ps->prompt_string_pointer = prompt_string_pointer;
+
ps->current_command_line_count = current_command_line_count;
#if defined (HISTORY)
@@ -8119,11 +8208,7 @@ save_parser_state (ps)
ps->last_command_exit_value = last_command_exit_value;
#if defined (ARRAY_VARS)
- v = find_variable ("PIPESTATUS");
- if (v && array_p (v) && array_cell (v))
- ps->pipestatus = array_copy (array_cell (v));
- else
- ps->pipestatus = (ARRAY *)NULL;
+ ps->pipestatus = save_pipestatus_array ();
#endif
ps->last_shell_builtin = last_shell_builtin;
@@ -8139,10 +8224,6 @@ void
restore_parser_state (ps)
sh_parser_state_t *ps;
{
-#if defined (ARRAY_VARS)
- SHELL_VAR *v;
-#endif
-
if (ps == 0)
return;
@@ -8156,6 +8237,8 @@ restore_parser_state (ps)
shell_input_line_terminator = ps->input_line_terminator;
eof_encountered = ps->eof_encountered;
+ prompt_string_pointer = ps->prompt_string_pointer;
+
current_command_line_count = ps->current_command_line_count;
#if defined (HISTORY)
@@ -8167,12 +8250,7 @@ restore_parser_state (ps)
last_command_exit_value = ps->last_command_exit_value;
#if defined (ARRAY_VARS)
- v = find_variable ("PIPESTATUS");
- if (v && array_p (v) && array_cell (v))
- {
- array_dispose (array_cell (v));
- var_setarray (v, ps->pipestatus);
- }
+ restore_pipestatus_array (ps->pipestatus);
#endif
last_shell_builtin = ps->last_shell_builtin;