From f4b417c62a4f272c4cf9a074d0f7a3a97201f9db Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Tue, 17 Apr 2012 11:23:35 +0200 Subject: Update to upstream bash 4.2 This upgrades bash to from 4.1-rc to 4.2-release. See CWRU/changelog for changes. Change-Id: I926269c300cf44fa25964b5b375a148fcf11c4b7 --- y.tab.c | 1460 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 769 insertions(+), 691 deletions(-) (limited to 'y.tab.c') 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; -- cgit v1.1