Andreas Wacknitz
2023-11-10 f6cf2de9c76c816514dd9db412d1b70801609100
bash: update to 5.2p21

6 files added
2 files modified
3920 ■■■■■ changed files
components/shell/bash/Makefile 2 ●●● patch | view | raw | blame | history
components/shell/bash/patches/bash52-016.patch 47 ●●●●● patch | view | raw | blame | history
components/shell/bash/patches/bash52-017.patch 47 ●●●●● patch | view | raw | blame | history
components/shell/bash/patches/bash52-018.patch 3643 ●●●●● patch | view | raw | blame | history
components/shell/bash/patches/bash52-019.patch 66 ●●●●● patch | view | raw | blame | history
components/shell/bash/patches/bash52-020.patch 53 ●●●●● patch | view | raw | blame | history
components/shell/bash/patches/bash52-021.patch 61 ●●●●● patch | view | raw | blame | history
components/shell/bash/pkg5 1 ●●●● patch | view | raw | blame | history
components/shell/bash/Makefile
@@ -60,7 +60,7 @@
LIBS =    -lc -lsocket -lgen
# -z redlocsym -- let's shrink the SHT_SYMTAB as much as we can
LDFLAGS =    $(LD_Z_REDLOCSYM)
LDFLAGS = $(LD_Z_REDLOCSYM)
COMPONENT_PREP_ACTION = ( cd $(@D); autoconf -f -i )
components/shell/bash/patches/bash52-016.patch
New file
@@ -0,0 +1,47 @@
                 BASH PATCH REPORT
                 =================
Bash-Release:    5.2
Patch-ID:    bash52-016
Bug-Reported-by:    F G <frank.graziano@gmail.com>
Bug-Reference-ID:    <CAOhYt35M5VctK+xAPu=Gy_UzzGmHedWPJE4q+kL4UHF_6Nb1kA@mail.gmail.com>
Bug-Reference-URL:
Bug-Description:
If an expression in an arithmetic for loop expands to NULL, the shell
would crash.
Patch (apply with `patch -p0'):
*** ../bash-5.2-patched/execute_cmd.c    Thu Feb 23 14:15:05 2023
--- execute_cmd.c    Mon Feb 27 17:53:08 2023
***************
*** 3051,3055 ****
    if (l->next)
      free (expr);
!   new = make_word_list (make_word (temp), (WORD_LIST *)NULL);
    free (temp);
--- 3051,3055 ----
    if (l->next)
      free (expr);
!   new = make_word_list (make_word (temp ? temp : ""), (WORD_LIST *)NULL);
    free (temp);
*** ../bash-5.2/patchlevel.h    2020-06-22 14:51:03.000000000 -0400
--- patchlevel.h    2020-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 15
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 16
  #endif /* _PATCHLEVEL_H_ */
components/shell/bash/patches/bash52-017.patch
New file
@@ -0,0 +1,47 @@
                 BASH PATCH REPORT
                 =================
Bash-Release:    5.2
Patch-ID:    bash52-017
Bug-Reported-by:    Dan Church <h3xx@gmx.com>
Bug-Reference-ID:    <1a8fd1d6-a3ac-9a67-78eb-b9a7435304c8@gmx.com>
Bug-Reference-URL:    https://lists.gnu.org/archive/html/bug-bash/2022-12/msg00076.html
Bug-Description:
In certain cases, using the `.' builtin in a subshell would optimize away
the rest of the commands in the subshell.
Patch (apply with `patch -p0'):
*** ../bash-5.2-patched/builtins/evalfile.c    2019-07-20 16:16:08.000000000 -0400
--- builtins/evalfile.c    2022-12-22 12:13:08.000000000 -0500
***************
*** 267,271 ****
    /* set the flags to be passed to parse_and_execute */
!   pflags = SEVAL_RESETLINE;
    pflags |= (flags & FEVAL_HISTORY) ? 0 : SEVAL_NOHIST;
--- 267,271 ----
    /* set the flags to be passed to parse_and_execute */
!   pflags = SEVAL_RESETLINE|SEVAL_NOOPTIMIZE;
    pflags |= (flags & FEVAL_HISTORY) ? 0 : SEVAL_NOHIST;
*** ../bash-5.2/patchlevel.h    2020-06-22 14:51:03.000000000 -0400
--- patchlevel.h    2020-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 16
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 17
  #endif /* _PATCHLEVEL_H_ */
components/shell/bash/patches/bash52-018.patch
New file
@@ -0,0 +1,3643 @@
                 BASH PATCH REPORT
                 =================
Bash-Release:    5.2
Patch-ID:    bash52-018
Bug-Reported-by:    Todd Stein <toddbstein@gmail.com>
            Eduardo A . Bustamante López  <dualbus@gmail.com>
Bug-Reference-ID:
            <Y/SHWg7/+sc19k7P@system76-pc>
Bug-Reference-URL:    https://savannah.gnu.org/support/?110745
            https://lists.gnu.org/archive/html/bug-bash/2023-02/msg00141.html
Bug-Description:
There are two problems with returning tokens to yyparse() when the shell
encounters a syntax error or when it reads EOF.
When reading a WORD token, the parser has to return the correct value to
yyparse. Previous versions returned a value < 0, which the bash parser
translated into YYERRCODE for bison, and in newer versions of bison, the
appropriate reset actions didn't happen. We should return YYUNDEF, which
bison uses for `invalid token'. Since we can return a token < 0 for both
invalid tokens and EOF, the bash tokenizer needs to differentiate between
those two cases.
Patch (apply with `patch -p0'):
*** ../bash-5.2-patched/parse.y    2022-12-13 12:09:02.000000000 -0500
--- parse.y    2023-11-08 14:29:13.000000000 -0500
***************
*** 453,456 ****
--- 453,471 ----
                  }
              }
+     |    error YYEOF
+             {
+               global_command = (COMMAND *)NULL;
+               if (last_command_exit_value == 0)
+                 last_command_exit_value = EX_BADUSAGE;    /* force error return */
+               if (interactive && parse_and_execute_level == 0)
+                 {
+                   handle_eof_input_unit ();
+                   YYACCEPT;
+                 }
+               else
+                 {
+                   YYABORT;
+                 }
+             }
      |    yacc_EOF
              {
***************
*** 2898,2904 ****
    if (current_token < 0)
  #if defined (YYERRCODE) && !defined (YYUNDEF)
!     current_token = YYERRCODE;
  #else
!     current_token = YYerror;
  #endif
--- 2913,2919 ----
    if (current_token < 0)
  #if defined (YYERRCODE) && !defined (YYUNDEF)
!     current_token = EOF_Reached ? YYEOF : YYERRCODE;
  #else
!     current_token = EOF_Reached ? YYEOF : YYUNDEF;
  #endif
***************
*** 3695,3698 ****
--- 3711,3715 ----
        parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), close);
        EOF_Reached = 1;    /* XXX */
+       parser_state |= PST_NOERROR;  /* avoid redundant error message */
        return (&matched_pair_error);
      }
***************
*** 4157,4160 ****
--- 4172,4176 ----
        /* yyparse() has already called yyerror() and reset_parser() */
+       parser_state |= PST_NOERROR;
        return (&matched_pair_error);
      }
*** /Users/chet/src/bash/bash-5.2-patched/y.tab.c    2022-12-13 12:09:02.000000000 -0500
--- y.tab.c    2023-11-08 14:38:01.000000000 -0500
***************
*** 993,997 ****
  /* YYFINAL -- State number of the termination state.  */
! #define YYFINAL  121
  /* YYLAST -- Last index in YYTABLE.  */
  #define YYLAST   740
--- 993,997 ----
  /* YYFINAL -- State number of the termination state.  */
! #define YYFINAL  122
  /* YYLAST -- Last index in YYTABLE.  */
  #define YYLAST   740
***************
*** 1002,1008 ****
  #define YYNNTS  38
  /* YYNRULES -- Number of rules.  */
! #define YYNRULES  174
  /* YYNSTATES -- Number of states.  */
! #define YYNSTATES  349
  /* YYMAXUTOK -- Last valid token kind.  */
--- 1002,1008 ----
  #define YYNNTS  38
  /* YYNRULES -- Number of rules.  */
! #define YYNRULES  175
  /* YYNSTATES -- Number of states.  */
! #define YYNSTATES  350
  /* YYMAXUTOK -- Last valid token kind.  */
***************
*** 1058,1079 ****
  static const yytype_int16 yyrline[] =
  {
!        0,   395,   395,   406,   414,   423,   438,   455,   465,   467,
!      471,   477,   483,   489,   495,   501,   507,   513,   519,   525,
!      531,   537,   543,   549,   555,   561,   568,   575,   582,   589,
!      596,   603,   609,   615,   621,   627,   633,   639,   645,   651,
!      657,   663,   669,   675,   681,   687,   693,   699,   705,   711,
!      717,   723,   729,   735,   743,   745,   747,   751,   755,   766,
!      768,   772,   774,   776,   792,   794,   798,   800,   802,   804,
!      806,   808,   810,   812,   814,   816,   818,   822,   827,   832,
!      837,   842,   847,   852,   857,   864,   870,   876,   882,   890,
!      895,   900,   905,   910,   915,   920,   925,   932,   937,   942,
!      949,   951,   953,   955,   959,   961,   992,   999,  1003,  1009,
!     1014,  1031,  1036,  1053,  1060,  1062,  1064,  1069,  1073,  1077,
!     1081,  1083,  1085,  1089,  1090,  1094,  1096,  1098,  1100,  1104,
!     1106,  1108,  1110,  1112,  1114,  1118,  1120,  1129,  1135,  1141,
!     1142,  1149,  1153,  1155,  1157,  1164,  1166,  1173,  1177,  1178,
!     1181,  1183,  1185,  1189,  1190,  1199,  1214,  1232,  1249,  1251,
!     1253,  1260,  1263,  1267,  1269,  1275,  1281,  1301,  1324,  1326,
!     1349,  1353,  1355,  1357,  1359
  };
  #endif
--- 1058,1079 ----
  static const yytype_int16 yyrline[] =
  {
!        0,   395,   395,   406,   414,   423,   438,   455,   470,   480,
!      482,   486,   492,   498,   504,   510,   516,   522,   528,   534,
!      540,   546,   552,   558,   564,   570,   576,   583,   590,   597,
!      604,   611,   618,   624,   630,   636,   642,   648,   654,   660,
!      666,   672,   678,   684,   690,   696,   702,   708,   714,   720,
!      726,   732,   738,   744,   750,   758,   760,   762,   766,   770,
!      781,   783,   787,   789,   791,   807,   809,   813,   815,   817,
!      819,   821,   823,   825,   827,   829,   831,   833,   837,   842,
!      847,   852,   857,   862,   867,   872,   879,   885,   891,   897,
!      905,   910,   915,   920,   925,   930,   935,   940,   947,   952,
!      957,   964,   966,   968,   970,   974,   976,  1007,  1014,  1018,
!     1024,  1029,  1046,  1051,  1068,  1075,  1077,  1079,  1084,  1088,
!     1092,  1096,  1098,  1100,  1104,  1105,  1109,  1111,  1113,  1115,
!     1119,  1121,  1123,  1125,  1127,  1129,  1133,  1135,  1144,  1150,
!     1156,  1157,  1164,  1168,  1170,  1172,  1179,  1181,  1188,  1192,
!     1193,  1196,  1198,  1200,  1204,  1205,  1214,  1229,  1247,  1264,
!     1266,  1268,  1275,  1278,  1282,  1284,  1290,  1296,  1316,  1339,
!     1341,  1364,  1368,  1370,  1372,  1374
  };
  #endif
***************
*** 1120,1124 ****
  #endif
! #define YYPACT_NINF (-152)
  #define yypact_value_is_default(Yyn) \
--- 1120,1124 ----
  #endif
! #define YYPACT_NINF (-125)
  #define yypact_value_is_default(Yyn) \
***************
*** 1134,1172 ****
  static const yytype_int16 yypact[] =
  {
!      328,    80,  -152,   -11,    -1,     3,  -152,  -152,    15,   637,
!       -5,   433,   149,   -28,  -152,   187,   684,  -152,    18,    28,
!      130,    38,   139,    50,    52,    60,    65,    74,  -152,  -152,
!     -152,    89,   104,  -152,  -152,    97,  -152,  -152,   246,  -152,
!      670,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,
!     -152,  -152,  -152,   146,   211,  -152,     1,   433,  -152,  -152,
!      135,   484,  -152,    59,    61,    90,   167,   171,    10,    71,
!      246,   670,   144,  -152,  -152,  -152,  -152,  -152,   165,  -152,
!      142,   179,   192,   140,   194,   160,   227,   245,   252,   253,
!      260,   261,   262,   162,   269,   178,   270,   272,   273,   274,
!      277,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,
!     -152,  -152,  -152,  -152,  -152,   168,   379,  -152,  -152,   173,
!      244,  -152,  -152,  -152,  -152,   670,  -152,  -152,  -152,  -152,
!     -152,   535,   535,  -152,  -152,  -152,  -152,  -152,  -152,  -152,
!      205,  -152,    14,  -152,    36,  -152,  -152,  -152,  -152,    84,
!     -152,  -152,  -152,   249,   670,  -152,   670,   670,  -152,  -152,
!     -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,
!     -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,
!     -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,
!     -152,  -152,  -152,  -152,   484,   484,   203,   203,   586,   586,
!      145,  -152,  -152,  -152,  -152,  -152,  -152,     0,  -152,   119,
!     -152,   291,   248,    66,    88,  -152,   119,  -152,   296,   297,
!       35,  -152,   670,   670,    35,  -152,  -152,     1,     1,  -152,
!     -152,  -152,   306,   484,   484,   484,   484,   484,   305,   169,
!     -152,     7,  -152,  -152,   302,  -152,   131,  -152,   265,  -152,
!     -152,  -152,  -152,  -152,  -152,   304,   131,  -152,   266,  -152,
!     -152,  -152,    35,  -152,   313,   317,  -152,  -152,  -152,   225,
!      225,   225,  -152,  -152,  -152,  -152,   206,    25,  -152,  -152,
!      307,   -42,   319,   276,  -152,  -152,  -152,    95,  -152,   322,
!      283,   332,   284,  -152,  -152,   102,  -152,  -152,  -152,  -152,
!     -152,  -152,  -152,  -152,    45,   323,  -152,  -152,  -152,   106,
!     -152,  -152,  -152,  -152,  -152,  -152,   109,  -152,  -152,   264,
!     -152,  -152,  -152,   484,  -152,  -152,   333,   293,  -152,  -152,
!      338,   300,  -152,  -152,  -152,   484,   345,   303,  -152,  -152,
!      346,   309,  -152,  -152,  -152,  -152,  -152,  -152,  -152
  };
--- 1134,1172 ----
  static const yytype_int16 yypact[] =
  {
!      329,    27,  -125,     8,    81,    10,  -125,  -125,    16,    38,
!        0,   434,    -5,   -16,  -125,   670,   684,  -125,    33,    43,
!       62,    63,    71,    69,    94,   105,   108,   116,  -125,  -125,
!     -125,   125,   139,  -125,  -125,   111,  -125,  -125,   626,  -125,
!      648,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
!     -125,  -125,  -125,     5,   -21,  -125,   -15,   434,  -125,  -125,
!     -125,   196,   485,  -125,   157,     2,   180,   207,   222,   227,
!      638,   626,   648,   224,  -125,  -125,  -125,  -125,  -125,   219,
!     -125,   185,   223,   228,   140,   230,   161,   232,   233,   234,
!      236,   241,   248,   249,   162,   250,   163,   251,   254,   256,
!      257,   258,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
!     -125,  -125,  -125,  -125,  -125,  -125,   225,   380,  -125,  -125,
!      229,   231,  -125,  -125,  -125,  -125,   648,  -125,  -125,  -125,
!     -125,  -125,   536,   536,  -125,  -125,  -125,  -125,  -125,  -125,
!     -125,   214,  -125,    -7,  -125,    85,  -125,  -125,  -125,  -125,
!       89,  -125,  -125,  -125,   235,   648,  -125,   648,   648,  -125,
!     -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
!     -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
!     -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,  -125,
!     -125,  -125,  -125,  -125,  -125,   485,   485,   138,   138,   587,
!      587,    17,  -125,  -125,  -125,  -125,  -125,  -125,    88,  -125,
!      122,  -125,   274,   238,   100,   101,  -125,   122,  -125,   276,
!      278,   260,  -125,   648,   648,   260,  -125,  -125,   -15,   -15,
!     -125,  -125,  -125,   287,   485,   485,   485,   485,   485,   290,
!      164,  -125,    26,  -125,  -125,   285,  -125,   131,  -125,   242,
!     -125,  -125,  -125,  -125,  -125,  -125,   288,   131,  -125,   243,
!     -125,  -125,  -125,   260,  -125,   297,   302,  -125,  -125,  -125,
!      152,   152,   152,  -125,  -125,  -125,  -125,   170,    61,  -125,
!     -125,   281,   -36,   293,   252,  -125,  -125,  -125,   102,  -125,
!      298,   255,   300,   262,  -125,  -125,   103,  -125,  -125,  -125,
!     -125,  -125,  -125,  -125,  -125,   -33,   296,  -125,  -125,  -125,
!      110,  -125,  -125,  -125,  -125,  -125,  -125,   112,  -125,  -125,
!      189,  -125,  -125,  -125,   485,  -125,  -125,   310,   267,  -125,
!     -125,   314,   275,  -125,  -125,  -125,   485,   318,   277,  -125,
!     -125,   320,   279,  -125,  -125,  -125,  -125,  -125,  -125,  -125
  };
***************
*** 1176,1214 ****
  static const yytype_uint8 yydefact[] =
  {
!        0,     0,   153,     0,     0,     0,   153,   153,     0,     0,
!        0,     0,   171,    54,    55,     0,     0,   118,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,   153,     4,
!        7,     0,     0,   153,   153,     0,    56,    59,    61,   170,
!       62,    66,    76,    70,    67,    64,    72,     3,    65,    71,
!       73,    74,    75,     0,   155,   162,   163,     0,     5,     6,
!        0,     0,   153,   153,     0,   153,     0,     0,     0,    54,
!      113,   109,     0,   151,   150,   152,   167,   164,   172,   173,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,    16,    25,    40,    34,    49,    31,    43,    37,    46,
!       28,    52,    53,    22,    19,     0,     0,    10,    11,     0,
!        0,     1,    54,    60,    57,    63,   148,   149,     2,   153,
!      153,   156,   157,   153,   153,   166,   165,   153,   154,   137,
!      138,   147,     0,   153,     0,   153,   153,   153,   153,     0,
!      153,   153,   153,   153,   104,   102,   111,   110,   119,   174,
!      153,    18,    27,    42,    36,    51,    33,    45,    39,    48,
!       30,    24,    21,    14,    15,    17,    26,    41,    35,    50,
!       32,    44,    38,    47,    29,    23,    20,    12,    13,   107,
!      108,   117,   106,    58,     0,     0,   160,   161,     0,     0,
!        0,   153,   153,   153,   153,   153,   153,     0,   153,     0,
!      153,     0,     0,     0,     0,   153,     0,   153,     0,     0,
!        0,   153,   105,   112,     0,   158,   159,   169,   168,   153,
!      153,   114,     0,     0,     0,   140,   141,   139,     0,   123,
!      153,     0,   153,   153,     0,     8,     0,   153,     0,    87,
!       88,   153,   153,   153,   153,     0,     0,   153,     0,    68,
!       69,   103,     0,   100,     0,     0,   116,   142,   143,   144,
!      145,   146,    99,   129,   131,   133,   124,     0,    97,   135,
!        0,     0,     0,     0,    77,     9,   153,     0,    78,     0,
!        0,     0,     0,    89,   153,     0,    90,   101,   115,   153,
!      130,   132,   134,    98,     0,     0,   153,    79,    80,     0,
!      153,   153,    85,    86,    91,    92,     0,   153,   153,   120,
!      153,   136,   125,   126,   153,   153,     0,     0,   153,   153,
!        0,     0,   153,   122,   127,   128,     0,     0,    83,    84,
!        0,     0,    95,    96,   121,    81,    82,    93,    94
  };
--- 1176,1214 ----
  static const yytype_uint8 yydefact[] =
  {
!        0,     0,   154,     0,     0,     0,   154,   154,     0,     0,
!        0,     0,   172,    55,    56,     0,     0,   119,     0,     0,
!        0,     0,     0,     0,     0,     0,     0,     0,   154,     4,
!        8,     0,     0,   154,   154,     0,    57,    60,    62,   171,
!       63,    67,    77,    71,    68,    65,    73,     3,    66,    72,
!       74,    75,    76,     0,   156,   163,   164,     0,     7,     5,
!        6,     0,     0,   154,   154,     0,   154,     0,     0,     0,
!       55,   114,   110,     0,   152,   151,   153,   168,   165,   173,
!      174,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
!        0,     0,    17,    26,    41,    35,    50,    32,    44,    38,
!       47,    29,    53,    54,    23,    20,     0,     0,    11,    12,
!        0,     0,     1,    55,    61,    58,    64,   149,   150,     2,
!      154,   154,   157,   158,   154,   154,   167,   166,   154,   155,
!      138,   139,   148,     0,   154,     0,   154,   154,   154,   154,
!        0,   154,   154,   154,   154,   105,   103,   112,   111,   120,
!      175,   154,    19,    28,    43,    37,    52,    34,    46,    40,
!       49,    31,    25,    22,    15,    16,    18,    27,    42,    36,
!       51,    33,    45,    39,    48,    30,    24,    21,    13,    14,
!      108,   109,   118,   107,    59,     0,     0,   161,   162,     0,
!        0,     0,   154,   154,   154,   154,   154,   154,     0,   154,
!        0,   154,     0,     0,     0,     0,   154,     0,   154,     0,
!        0,     0,   154,   106,   113,     0,   159,   160,   170,   169,
!      154,   154,   115,     0,     0,     0,   141,   142,   140,     0,
!      124,   154,     0,   154,   154,     0,     9,     0,   154,     0,
!       88,    89,   154,   154,   154,   154,     0,     0,   154,     0,
!       69,    70,   104,     0,   101,     0,     0,   117,   143,   144,
!      145,   146,   147,   100,   130,   132,   134,   125,     0,    98,
!      136,     0,     0,     0,     0,    78,    10,   154,     0,    79,
!        0,     0,     0,     0,    90,   154,     0,    91,   102,   116,
!      154,   131,   133,   135,    99,     0,     0,   154,    80,    81,
!        0,   154,   154,    86,    87,    92,    93,     0,   154,   154,
!      121,   154,   137,   126,   127,   154,   154,     0,     0,   154,
!      154,     0,     0,   154,   123,   128,   129,     0,     0,    84,
!       85,     0,     0,    96,    97,   122,    82,    83,    94,    95
  };
***************
*** 1216,1223 ****
  static const yytype_int16 yypgoto[] =
  {
!     -152,  -152,   112,   -29,   -14,   -64,   360,  -152,    -8,  -152,
!     -152,  -152,  -152,  -152,  -151,  -152,  -152,  -152,  -152,  -152,
!     -152,  -152,    13,  -152,   136,  -152,    98,    -2,  -152,    30,
!     -152,   -54,   -26,  -152,  -123,     6,    78,  -152
  };
--- 1216,1223 ----
  static const yytype_int16 yypgoto[] =
  {
!     -125,  -125,   126,   -25,   -28,   -65,   335,  -125,    -8,  -125,
!     -125,  -125,  -125,  -125,   -96,  -125,  -125,  -125,  -125,  -125,
!     -125,  -125,    28,  -125,   109,  -125,    68,    -2,  -125,   -11,
!     -125,   -54,   -26,  -125,  -124,     6,    34,  -125
  };
***************
*** 1225,1232 ****
  static const yytype_int16 yydefgoto[] =
  {
!        0,    35,   246,    36,    37,   125,    38,    39,    40,    41,
!       42,    43,    44,    45,   155,    46,    47,    48,    49,    50,
!       51,    52,   232,   238,   239,   240,   281,   120,   139,   140,
!      128,    76,    61,    53,    54,   141,    56,    57
  };
--- 1225,1232 ----
  static const yytype_int16 yydefgoto[] =
  {
!        0,    35,   247,    36,    37,   126,    38,    39,    40,    41,
!       42,    43,    44,    45,   156,    46,    47,    48,    49,    50,
!       51,    52,   233,   239,   240,   241,   282,   121,   140,   141,
!      129,    77,    62,    53,    54,   142,    56,    57
  };
***************
*** 1236,1390 ****
  static const yytype_int16 yytable[] =
  {
!       60,    71,   116,   135,    66,    67,    55,   157,   196,   197,
!      147,   124,   305,     2,   242,    62,   278,    77,     3,   306,
!        4,     5,     6,     7,   123,    63,   115,    72,    10,    65,
!       64,   119,    80,   279,   303,   206,   142,   144,     2,   149,
!       17,    68,   124,     3,   101,     4,     5,     6,     7,   133,
!      208,   279,   138,    10,   102,   134,   123,   209,   243,   138,
!      154,   156,   152,   136,   106,    17,   138,   280,    33,   261,
!      153,   225,   226,   263,     2,   145,   110,   138,   111,     3,
!      251,     4,     5,     6,     7,   280,   112,   138,   138,    10,
!      222,   113,   223,    33,   210,    34,   193,   121,   215,   305,
!      114,    17,   253,   194,   195,   216,   320,   198,   199,   310,
!      143,   297,    73,    74,    75,   117,   317,   207,   138,   146,
!      324,   213,   214,   328,   252,   124,   220,   124,   193,    33,
!      118,    34,    58,    59,   224,   200,   138,    55,    55,   137,
!      138,   148,   217,   211,   212,   245,   254,   138,   218,   219,
!      229,   230,   231,   311,   138,   247,   103,   285,   138,   104,
!      318,   138,   257,   158,   325,   107,   163,   329,   108,   164,
!       73,    74,    75,    78,    79,   233,   234,   235,   236,   237,
!      241,   150,    73,    74,    75,   151,   167,   105,   177,   168,
!      159,   178,   286,   193,   193,   262,   109,   165,   126,   127,
!       55,    55,   294,   160,   181,   161,   244,   182,   248,   273,
!      274,   275,   154,   255,   277,   258,   154,   169,   162,   179,
!      166,   287,    81,    82,    83,    84,    85,   264,   265,   189,
!       86,   295,   191,    87,    88,   183,   129,   130,   201,   202,
!      282,   283,    89,    90,   129,   130,   300,   301,   302,   289,
!      290,   291,   292,   170,   154,   203,   204,   205,   201,   202,
!      309,   131,   132,   267,   268,   269,   270,   271,   316,   332,
!      230,   171,   122,    14,    15,    16,   227,   228,   172,   173,
!      323,    18,    19,    20,    21,    22,   174,   175,   176,    23,
!       24,    25,    26,    27,   335,   180,   184,   319,   185,   186,
!      187,    31,    32,   188,   322,   192,   249,   250,   326,   327,
!      221,   259,   260,   266,   272,   330,   331,   284,   334,   293,
!      298,   299,   336,   337,   288,   296,   340,   341,   256,     1,
!      344,     2,   333,   279,   307,   308,     3,   312,     4,     5,
!        6,     7,   313,   315,     8,     9,    10,   314,   338,   321,
!       11,    12,   339,   342,    13,    14,    15,    16,    17,   343,
!      345,   347,   346,    18,    19,    20,    21,    22,   348,    70,
!        0,    23,    24,    25,    26,    27,   276,    28,   304,     0,
!       29,    30,     2,    31,    32,     0,    33,     3,    34,     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,     0,
!        0,   138,     0,     0,    31,    32,     2,    33,     0,    34,
!      190,     3,     0,     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,     0,    73,    74,    75,     2,    31,    32,
!        0,    33,     3,    34,     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,     0,     0,   138,     0,     2,    31,
        32,     0,    33,     3,    34,     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,     0,     0,     0,     0,     2,
        31,    32,     0,    33,     3,    34,     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,     0,   138,     0,
         2,    31,    32,     0,    33,     3,    34,     4,     5,     6,
!        7,     0,     0,     0,     0,    10,     0,     0,     0,     0,
!        0,     0,     0,    69,    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,     0,    31,    32,     0,    33,     0,    34,    15,    16,
!        0,     0,     0,     0,     0,    18,    19,    20,    21,    22,
!        0,     0,     0,    23,    24,    25,    26,    27,     0,    91,
!       92,    93,    94,    95,     0,    31,    32,    96,     0,     0,
!       97,    98,     0,     0,     0,     0,     0,     0,     0,    99,
!      100
  };
  static const yytype_int16 yycheck[] =
  {
!        2,     9,    28,    57,     6,     7,     0,    71,   131,   132,
!       64,    40,    54,     3,    14,    26,     9,    11,     8,    61,
!       10,    11,    12,    13,    38,    26,    28,    32,    18,    26,
!       31,    33,    60,    26,     9,    21,    62,    63,     3,    65,
!       30,    26,    71,     8,    26,    10,    11,    12,    13,    48,
!       14,    26,    52,    18,    26,    54,    70,    21,    58,    52,
!       68,    69,    52,    57,    26,    30,    52,    60,    58,   220,
!       60,   194,   195,   224,     3,    14,    26,    52,    26,     8,
!       14,    10,    11,    12,    13,    60,    26,    52,    52,    18,
!      154,    26,   156,    58,    58,    60,   125,     0,    14,    54,
!       26,    30,    14,   129,   130,    21,    61,   133,   134,    14,
!       51,   262,    51,    52,    53,    26,    14,   143,    52,    58,
!       14,   147,   148,    14,    58,   154,   152,   156,   157,    58,
!       26,    60,    52,    53,   160,   137,    52,   131,   132,     4,
!       52,    51,    58,   145,   146,    26,    58,    52,   150,   151,
!        5,     6,     7,    58,    52,   209,    26,    26,    52,    29,
!       58,    52,   216,    19,    58,    26,    26,    58,    29,    29,
!       51,    52,    53,    24,    25,   201,   202,   203,   204,   205,
!      206,    14,    51,    52,    53,    14,    26,    57,    26,    29,
!       25,    29,   246,   222,   223,   221,    57,    57,    52,    53,
!      194,   195,   256,    61,    26,    26,   208,    29,   210,    40,
!       41,    42,   220,   215,   240,   217,   224,    57,    26,    57,
!       26,   247,    35,    36,    37,    38,    39,   229,   230,    61,
!       43,   257,    59,    46,    47,    57,    33,    34,    33,    34,
!      242,   243,    55,    56,    33,    34,    40,    41,    42,   251,
!      252,   253,   254,    26,   262,    50,    51,    52,    33,    34,
!      286,    50,    51,   233,   234,   235,   236,   237,   294,     5,
!        6,    26,    26,    27,    28,    29,   198,   199,    26,    26,
!      306,    35,    36,    37,    38,    39,    26,    26,    26,    43,
!       44,    45,    46,    47,   320,    26,    26,   299,    26,    26,
!       26,    55,    56,    26,   306,    61,    15,    59,   310,   311,
!       61,    15,    15,     7,     9,   317,   318,    15,   320,    15,
!        7,     4,   324,   325,    59,    59,   328,   329,   216,     1,
!      332,     3,   319,    26,    15,    59,     8,    15,    10,    11,
!       12,    13,    59,    59,    16,    17,    18,    15,    15,    26,
!       22,    23,    59,    15,    26,    27,    28,    29,    30,    59,
!       15,    15,    59,    35,    36,    37,    38,    39,    59,     9,
!       -1,    43,    44,    45,    46,    47,   240,    49,   280,    -1,
!       52,    53,     3,    55,    56,    -1,    58,     8,    60,    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,    52,    -1,    -1,    55,    56,     3,    58,    -1,    60,
!       61,     8,    -1,    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,    51,    52,    53,     3,    55,    56,
!       -1,    58,     8,    60,    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,    52,    -1,     3,    55,
        56,    -1,    58,     8,    60,    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,    -1,     3,
        55,    56,    -1,    58,     8,    60,    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,    -1,    52,    -1,
         3,    55,    56,    -1,    58,     8,    60,    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,    -1,    55,    56,    -1,    58,    -1,    60,    28,    29,
!       -1,    -1,    -1,    -1,    -1,    35,    36,    37,    38,    39,
!       -1,    -1,    -1,    43,    44,    45,    46,    47,    -1,    35,
        36,    37,    38,    39,    -1,    55,    56,    43,    -1,    -1,
        46,    47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    55,
--- 1236,1390 ----
  static const yytype_int16 yytable[] =
  {
!       61,    72,   117,   136,    67,    68,    55,   158,   197,   198,
!      124,   148,   130,   131,   207,   125,   146,    78,   306,    79,
!       80,   306,   230,   231,   232,   307,   116,    58,   321,   132,
!      133,   120,    73,   134,    63,   279,    66,   143,   145,   135,
!      150,     2,    69,   124,    81,   139,     3,   125,     4,     5,
!        6,     7,   280,    74,    75,    76,    10,   127,   128,   102,
!      147,   155,   157,   137,    70,    14,    15,    16,    17,   103,
!      304,   226,   227,    18,    19,    20,    21,    22,   139,    59,
!       60,    23,    24,    25,    26,    27,   281,   280,   104,   107,
!      223,   105,   224,    31,    32,   111,    33,   108,    34,   209,
!      109,   194,   243,   216,   195,   196,   210,    64,   199,   200,
!      217,   122,    65,   139,   252,   254,   311,   318,   208,   106,
!      112,   281,   214,   215,   325,   262,   329,   221,   110,   264,
!      125,   113,   125,   194,   114,   225,   201,   139,    55,    55,
!      139,   139,   115,   211,   212,   213,   244,   218,   246,   219,
!      220,   118,   139,   139,   139,   139,   248,   286,   253,   255,
!      312,   319,   139,   258,   139,   119,   164,   298,   326,   165,
!      330,   130,   131,    74,    75,    76,   234,   235,   236,   237,
!      238,   242,    74,    75,    76,   202,   203,   168,   178,   182,
!      169,   179,   183,   287,   333,   231,   263,   166,   194,   194,
!      138,    55,    55,   295,   274,   275,   276,   245,   144,   249,
!      301,   302,   303,   155,   256,   278,   259,   155,   170,   180,
!      184,   151,   288,   268,   269,   270,   271,   272,   265,   266,
!        2,   149,   296,   228,   229,     3,   152,     4,     5,     6,
!        7,   283,   284,   159,   160,    10,   161,   202,   203,   162,
!      290,   291,   292,   293,   163,   155,   167,    17,   171,   172,
!      173,   310,   174,     2,   204,   205,   206,   175,     3,   317,
!        4,     5,     6,     7,   176,   177,   181,   185,    10,   153,
!      186,   324,   187,   188,   189,    33,   190,   154,   192,   250,
!       17,   260,   193,   261,   267,   336,   222,   251,   320,   273,
!      285,   289,   297,   294,   299,   323,   300,   280,   308,   327,
!      328,   309,   139,   313,   314,   315,   331,   332,    33,   335,
!       34,   316,   322,   337,   338,   339,   340,   341,   342,   343,
!        1,   345,     2,   346,   344,   348,   347,     3,   349,     4,
!        5,     6,     7,   257,    71,     8,     9,    10,   334,   305,
!      277,    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,    28,     0,
!        0,    29,    30,     2,    31,    32,     0,    33,     3,    34,
!        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,
!        0,     0,   139,     0,     0,    31,    32,     2,    33,     0,
!       34,   191,     3,     0,     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,     0,    74,    75,    76,     2,    31,
        32,     0,    33,     3,    34,     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,     0,     0,   139,     0,     2,
        31,    32,     0,    33,     3,    34,     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,     0,     0,     0,     0,
         2,    31,    32,     0,    33,     3,    34,     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,     0,   139,
!        0,     2,    31,    32,     0,    33,     3,    34,     4,     5,
!        6,     7,   123,    14,    15,    16,    10,     0,     0,     0,
!        0,    18,    19,    20,    21,    22,     0,     0,    17,    23,
!       24,    25,    26,    27,     0,     0,    15,    16,     0,     0,
!        0,    31,    32,    18,    19,    20,    21,    22,     0,     0,
!        0,    23,    24,    25,    26,    27,    33,     0,    34,     0,
!        0,     0,     0,    31,    32,    82,    83,    84,    85,    86,
!        0,     0,     0,    87,     0,     0,    88,    89,     0,    92,
!       93,    94,    95,    96,     0,    90,    91,    97,     0,     0,
!       98,    99,     0,     0,     0,     0,     0,     0,     0,   100,
!      101
  };
  static const yytype_int16 yycheck[] =
  {
!        2,     9,    28,    57,     6,     7,     0,    72,   132,   133,
!       38,    65,    33,    34,    21,    40,    14,    11,    54,    24,
!       25,    54,     5,     6,     7,    61,    28,     0,    61,    50,
!       51,    33,    32,    48,    26,     9,    26,    63,    64,    54,
!       66,     3,    26,    71,    60,    52,     8,    72,    10,    11,
!       12,    13,    26,    51,    52,    53,    18,    52,    53,    26,
!       58,    69,    70,    57,    26,    27,    28,    29,    30,    26,
!        9,   195,   196,    35,    36,    37,    38,    39,    52,    52,
!       53,    43,    44,    45,    46,    47,    60,    26,    26,    26,
!      155,    29,   157,    55,    56,    26,    58,    26,    60,    14,
!       29,   126,    14,    14,   130,   131,    21,    26,   134,   135,
!       21,     0,    31,    52,    14,    14,    14,    14,   144,    57,
!       26,    60,   148,   149,    14,   221,    14,   153,    57,   225,
!      155,    26,   157,   158,    26,   161,   138,    52,   132,   133,
!       52,    52,    26,    58,   146,   147,    58,    58,    26,   151,
!      152,    26,    52,    52,    52,    52,   210,    26,    58,    58,
!       58,    58,    52,   217,    52,    26,    26,   263,    58,    29,
!       58,    33,    34,    51,    52,    53,   202,   203,   204,   205,
!      206,   207,    51,    52,    53,    33,    34,    26,    26,    26,
!       29,    29,    29,   247,     5,     6,   222,    57,   223,   224,
!        4,   195,   196,   257,    40,    41,    42,   209,    51,   211,
!       40,    41,    42,   221,   216,   241,   218,   225,    57,    57,
!       57,    14,   248,   234,   235,   236,   237,   238,   230,   231,
!        3,    51,   258,   199,   200,     8,    14,    10,    11,    12,
!       13,   243,   244,    19,    25,    18,    61,    33,    34,    26,
!      252,   253,   254,   255,    26,   263,    26,    30,    26,    26,
!       26,   287,    26,     3,    50,    51,    52,    26,     8,   295,
!       10,    11,    12,    13,    26,    26,    26,    26,    18,    52,
!       26,   307,    26,    26,    26,    58,    61,    60,    59,    15,
!       30,    15,    61,    15,     7,   321,    61,    59,   300,     9,
!       15,    59,    59,    15,     7,   307,     4,    26,    15,   311,
!      312,    59,    52,    15,    59,    15,   318,   319,    58,   321,
!       60,    59,    26,   325,   326,    15,    59,   329,   330,    15,
!        1,   333,     3,    15,    59,    15,    59,     8,    59,    10,
!       11,    12,    13,   217,     9,    16,    17,    18,   320,   281,
!      241,    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,    49,    -1,
!       -1,    52,    53,     3,    55,    56,    -1,    58,     8,    60,
!       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,    52,    -1,    -1,    55,    56,     3,    58,    -1,
!       60,    61,     8,    -1,    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,    51,    52,    53,     3,    55,
        56,    -1,    58,     8,    60,    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,    52,    -1,     3,
        55,    56,    -1,    58,     8,    60,    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,    -1,
         3,    55,    56,    -1,    58,     8,    60,    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,    -1,    52,
!       -1,     3,    55,    56,    -1,    58,     8,    60,    10,    11,
!       12,    13,    26,    27,    28,    29,    18,    -1,    -1,    -1,
!       -1,    35,    36,    37,    38,    39,    -1,    -1,    30,    43,
!       44,    45,    46,    47,    -1,    -1,    28,    29,    -1,    -1,
!       -1,    55,    56,    35,    36,    37,    38,    39,    -1,    -1,
!       -1,    43,    44,    45,    46,    47,    58,    -1,    60,    -1,
!       -1,    -1,    -1,    55,    56,    35,    36,    37,    38,    39,
!       -1,    -1,    -1,    43,    -1,    -1,    46,    47,    -1,    35,
        36,    37,    38,    39,    -1,    55,    56,    43,    -1,    -1,
        46,    47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    55,
***************
*** 1401,1434 ****
        53,    55,    56,    58,    60,    63,    65,    66,    68,    69,
        70,    71,    72,    73,    74,    75,    77,    78,    79,    80,
!       81,    82,    83,    95,    96,    97,    98,    99,    52,    53,
!       89,    94,    26,    26,    31,    26,    89,    89,    26,    26,
!       68,    70,    32,    51,    52,    53,    93,    97,    24,    25,
!       60,    35,    36,    37,    38,    39,    43,    46,    47,    55,
!       56,    35,    36,    37,    38,    39,    43,    46,    47,    55,
!       56,    26,    26,    26,    29,    57,    26,    26,    29,    57,
!       26,    26,    26,    26,    26,    89,    94,    26,    26,    89,
!       89,     0,    26,    66,    65,    67,    52,    53,    92,    33,
!       34,    50,    51,    48,    54,    93,    97,     4,    52,    90,
!       91,    97,    94,    51,    94,    14,    58,    93,    51,    94,
!       14,    14,    52,    60,    70,    76,    70,    67,    19,    25,
!       61,    26,    26,    26,    29,    57,    26,    26,    29,    57,
!       26,    26,    26,    26,    26,    26,    26,    26,    29,    57,
!       26,    26,    29,    57,    26,    26,    26,    26,    26,    61,
!       61,    59,    61,    65,    94,    94,    96,    96,    94,    94,
!       89,    33,    34,    50,    51,    52,    21,    94,    14,    21,
!       58,    89,    89,    94,    94,    14,    21,    58,    89,    89,
!       94,    61,    67,    67,    94,    96,    96,    98,    98,     5,
!        6,     7,    84,    94,    94,    94,    94,    94,    85,    86,
!       87,    94,    14,    58,    89,    26,    64,    93,    89,    15,
!       59,    14,    58,    14,    58,    89,    64,    93,    89,    15,
!       15,    76,    94,    76,    89,    89,     7,    91,    91,    91,
!       91,    91,     9,    40,    41,    42,    86,    94,     9,    26,
!       60,    88,    89,    89,    15,    26,    93,    94,    59,    89,
!       89,    89,    89,    15,    93,    94,    59,    76,     7,     4,
!       40,    41,    42,     9,    88,    54,    61,    15,    59,    94,
!       14,    58,    15,    59,    15,    59,    94,    14,    58,    89,
!       61,    26,    89,    94,    14,    58,    89,    89,    14,    58,
!       89,    89,     5,    84,    89,    94,    89,    89,    15,    59,
!       89,    89,    15,    59,    89,    15,    59,    15,    59
  };
--- 1401,1434 ----
        53,    55,    56,    58,    60,    63,    65,    66,    68,    69,
        70,    71,    72,    73,    74,    75,    77,    78,    79,    80,
!       81,    82,    83,    95,    96,    97,    98,    99,     0,    52,
!       53,    89,    94,    26,    26,    31,    26,    89,    89,    26,
!       26,    68,    70,    32,    51,    52,    53,    93,    97,    24,
!       25,    60,    35,    36,    37,    38,    39,    43,    46,    47,
!       55,    56,    35,    36,    37,    38,    39,    43,    46,    47,
!       55,    56,    26,    26,    26,    29,    57,    26,    26,    29,
!       57,    26,    26,    26,    26,    26,    89,    94,    26,    26,
!       89,    89,     0,    26,    66,    65,    67,    52,    53,    92,
!       33,    34,    50,    51,    48,    54,    93,    97,     4,    52,
!       90,    91,    97,    94,    51,    94,    14,    58,    93,    51,
!       94,    14,    14,    52,    60,    70,    76,    70,    67,    19,
!       25,    61,    26,    26,    26,    29,    57,    26,    26,    29,
!       57,    26,    26,    26,    26,    26,    26,    26,    26,    29,
!       57,    26,    26,    29,    57,    26,    26,    26,    26,    26,
!       61,    61,    59,    61,    65,    94,    94,    96,    96,    94,
!       94,    89,    33,    34,    50,    51,    52,    21,    94,    14,
!       21,    58,    89,    89,    94,    94,    14,    21,    58,    89,
!       89,    94,    61,    67,    67,    94,    96,    96,    98,    98,
!        5,     6,     7,    84,    94,    94,    94,    94,    94,    85,
!       86,    87,    94,    14,    58,    89,    26,    64,    93,    89,
!       15,    59,    14,    58,    14,    58,    89,    64,    93,    89,
!       15,    15,    76,    94,    76,    89,    89,     7,    91,    91,
!       91,    91,    91,     9,    40,    41,    42,    86,    94,     9,
!       26,    60,    88,    89,    89,    15,    26,    93,    94,    59,
!       89,    89,    89,    89,    15,    93,    94,    59,    76,     7,
!        4,    40,    41,    42,     9,    88,    54,    61,    15,    59,
!       94,    14,    58,    15,    59,    15,    59,    94,    14,    58,
!       89,    61,    26,    89,    94,    14,    58,    89,    89,    14,
!       58,    89,    89,     5,    84,    89,    94,    89,    89,    15,
!       59,    89,    89,    15,    59,    89,    15,    59,    15,    59
  };
***************
*** 1436,1457 ****
  static const yytype_int8 yyr1[] =
  {
!        0,    62,    63,    63,    63,    63,    63,    63,    64,    64,
!       65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
        65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
        65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
        65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
!       65,    65,    65,    65,    66,    66,    66,    67,    67,    68,
!       68,    69,    69,    69,    69,    69,    70,    70,    70,    70,
!       70,    70,    70,    70,    70,    70,    70,    71,    71,    71,
!       71,    71,    71,    71,    71,    72,    72,    72,    72,    73,
!       73,    73,    73,    73,    73,    73,    73,    74,    74,    74,
!       75,    75,    75,    75,    76,    76,    77,    78,    78,    79,
!       79,    79,    79,    79,    80,    80,    80,    81,    82,    83,
!       84,    84,    84,    85,    85,    86,    86,    86,    86,    87,
!       87,    87,    87,    87,    87,    88,    88,    89,    89,    90,
!       90,    90,    91,    91,    91,    91,    91,    91,    92,    92,
!       93,    93,    93,    94,    94,    95,    95,    95,    96,    96,
!       96,    96,    96,    97,    97,    97,    97,    97,    98,    98,
!       98,    99,    99,    99,    99
  };
--- 1436,1457 ----
  static const yytype_int8 yyr1[] =
  {
!        0,    62,    63,    63,    63,    63,    63,    63,    63,    64,
!       64,    65,    65,    65,    65,    65,    65,    65,    65,    65,
        65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
        65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
        65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
!       65,    65,    65,    65,    65,    66,    66,    66,    67,    67,
!       68,    68,    69,    69,    69,    69,    69,    70,    70,    70,
!       70,    70,    70,    70,    70,    70,    70,    70,    71,    71,
!       71,    71,    71,    71,    71,    71,    72,    72,    72,    72,
!       73,    73,    73,    73,    73,    73,    73,    73,    74,    74,
!       74,    75,    75,    75,    75,    76,    76,    77,    78,    78,
!       79,    79,    79,    79,    79,    80,    80,    80,    81,    82,
!       83,    84,    84,    84,    85,    85,    86,    86,    86,    86,
!       87,    87,    87,    87,    87,    87,    88,    88,    89,    89,
!       90,    90,    90,    91,    91,    91,    91,    91,    91,    92,
!       92,    93,    93,    93,    94,    94,    95,    95,    95,    96,
!       96,    96,    96,    96,    97,    97,    97,    97,    97,    98,
!       98,    98,    99,    99,    99,    99
  };
***************
*** 1459,1480 ****
  static const yytype_int8 yyr2[] =
  {
!        0,     2,     2,     1,     1,     2,     2,     1,     1,     2,
!        2,     2,     3,     3,     3,     3,     2,     3,     3,     2,
         3,     3,     2,     3,     3,     2,     3,     3,     2,     3,
         3,     2,     3,     3,     2,     3,     3,     2,     3,     3,
!        2,     3,     3,     2,     3,     3,     2,     3,     3,     2,
!        3,     3,     2,     2,     1,     1,     1,     1,     2,     1,
!        2,     1,     1,     2,     1,     1,     1,     1,     5,     5,
!        1,     1,     1,     1,     1,     1,     1,     6,     6,     7,
!        7,    10,    10,     9,     9,     7,     7,     5,     5,     6,
!        6,     7,     7,    10,    10,     9,     9,     6,     7,     6,
!        5,     6,     3,     5,     1,     2,     3,     3,     3,     2,
!        3,     3,     4,     2,     5,     7,     6,     3,     1,     3,
!        4,     6,     5,     1,     2,     4,     4,     5,     5,     2,
!        3,     2,     3,     2,     3,     1,     3,     2,     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,     2,     2,     4,     4,
!        1,     1,     2,     2,     3
  };
--- 1459,1480 ----
  static const yytype_int8 yyr2[] =
  {
!        0,     2,     2,     1,     1,     2,     2,     2,     1,     1,
!        2,     2,     2,     3,     3,     3,     3,     2,     3,     3,
!        2,     3,     3,     2,     3,     3,     2,     3,     3,     2,
         3,     3,     2,     3,     3,     2,     3,     3,     2,     3,
         3,     2,     3,     3,     2,     3,     3,     2,     3,     3,
!        2,     3,     3,     2,     2,     1,     1,     1,     1,     2,
!        1,     2,     1,     1,     2,     1,     1,     1,     1,     5,
!        5,     1,     1,     1,     1,     1,     1,     1,     6,     6,
!        7,     7,    10,    10,     9,     9,     7,     7,     5,     5,
!        6,     6,     7,     7,    10,    10,     9,     9,     6,     7,
!        6,     5,     6,     3,     5,     1,     2,     3,     3,     3,
!        2,     3,     3,     4,     2,     5,     7,     6,     3,     1,
!        3,     4,     6,     5,     1,     2,     4,     4,     5,     5,
!        2,     3,     2,     3,     2,     3,     1,     3,     2,     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,     2,     2,     4,
!        4,     1,     1,     2,     2,     3
  };
***************
*** 2019,2025 ****
      break;
!   case 7: /* inputunit: yacc_EOF  */
  #line 456 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                /* Case of EOF seen by itself.  Do ignoreeof or
                   not. */
--- 2019,2044 ----
      break;
!   case 7: /* inputunit: error $end  */
  #line 456 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
+               global_command = (COMMAND *)NULL;
+               if (last_command_exit_value == 0)
+                 last_command_exit_value = EX_BADUSAGE;    /* force error return */
+               if (interactive && parse_and_execute_level == 0)
+                 {
+                   handle_eof_input_unit ();
+                   YYACCEPT;
+                 }
+               else
+                 {
+                   YYABORT;
+                 }
+             }
+ #line 2038 "y.tab.c"
+     break;
+
+   case 8: /* inputunit: yacc_EOF  */
+ #line 471 "/usr/local/src/chet/src/bash/src/parse.y"
+                         {
                /* Case of EOF seen by itself.  Do ignoreeof or
                   not. */
***************
*** 2028,2048 ****
                YYACCEPT;
              }
! #line 2031 "y.tab.c"
      break;
!   case 8: /* word_list: WORD  */
! #line 466 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.word_list) = make_word_list ((yyvsp[0].word), (WORD_LIST *)NULL); }
! #line 2037 "y.tab.c"
      break;
!   case 9: /* word_list: word_list WORD  */
! #line 468 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.word_list) = make_word_list ((yyvsp[0].word), (yyvsp[-1].word_list)); }
! #line 2043 "y.tab.c"
      break;
!   case 10: /* redirection: '>' WORD  */
! #line 472 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
--- 2047,2067 ----
                YYACCEPT;
              }
! #line 2050 "y.tab.c"
      break;
!   case 9: /* word_list: WORD  */
! #line 481 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.word_list) = make_word_list ((yyvsp[0].word), (WORD_LIST *)NULL); }
! #line 2056 "y.tab.c"
      break;
!   case 10: /* word_list: word_list WORD  */
! #line 483 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.word_list) = make_word_list ((yyvsp[0].word), (yyvsp[-1].word_list)); }
! #line 2062 "y.tab.c"
      break;
!   case 11: /* redirection: '>' WORD  */
! #line 487 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
***************
*** 2050,2058 ****
                (yyval.redirect) = make_redirection (source, r_output_direction, redir, 0);
              }
! #line 2053 "y.tab.c"
      break;
!   case 11: /* redirection: '<' WORD  */
! #line 478 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
--- 2069,2077 ----
                (yyval.redirect) = make_redirection (source, r_output_direction, redir, 0);
              }
! #line 2072 "y.tab.c"
      break;
!   case 12: /* redirection: '<' WORD  */
! #line 493 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
***************
*** 2060,2068 ****
                (yyval.redirect) = make_redirection (source, r_input_direction, redir, 0);
              }
! #line 2063 "y.tab.c"
      break;
!   case 12: /* redirection: NUMBER '>' WORD  */
! #line 484 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2079,2087 ----
                (yyval.redirect) = make_redirection (source, r_input_direction, redir, 0);
              }
! #line 2082 "y.tab.c"
      break;
!   case 13: /* redirection: NUMBER '>' WORD  */
! #line 499 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2070,2078 ****
                (yyval.redirect) = make_redirection (source, r_output_direction, redir, 0);
              }
! #line 2073 "y.tab.c"
      break;
!   case 13: /* redirection: NUMBER '<' WORD  */
! #line 490 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2089,2097 ----
                (yyval.redirect) = make_redirection (source, r_output_direction, redir, 0);
              }
! #line 2092 "y.tab.c"
      break;
!   case 14: /* redirection: NUMBER '<' WORD  */
! #line 505 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2080,2088 ****
                (yyval.redirect) = make_redirection (source, r_input_direction, redir, 0);
              }
! #line 2083 "y.tab.c"
      break;
!   case 14: /* redirection: REDIR_WORD '>' WORD  */
! #line 496 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2099,2107 ----
                (yyval.redirect) = make_redirection (source, r_input_direction, redir, 0);
              }
! #line 2102 "y.tab.c"
      break;
!   case 15: /* redirection: REDIR_WORD '>' WORD  */
! #line 511 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2090,2098 ****
                (yyval.redirect) = make_redirection (source, r_output_direction, redir, REDIR_VARASSIGN);
              }
! #line 2093 "y.tab.c"
      break;
!   case 15: /* redirection: REDIR_WORD '<' WORD  */
! #line 502 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2109,2117 ----
                (yyval.redirect) = make_redirection (source, r_output_direction, redir, REDIR_VARASSIGN);
              }
! #line 2112 "y.tab.c"
      break;
!   case 16: /* redirection: REDIR_WORD '<' WORD  */
! #line 517 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2100,2108 ****
                (yyval.redirect) = make_redirection (source, r_input_direction, redir, REDIR_VARASSIGN);
              }
! #line 2103 "y.tab.c"
      break;
!   case 16: /* redirection: GREATER_GREATER WORD  */
! #line 508 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
--- 2119,2127 ----
                (yyval.redirect) = make_redirection (source, r_input_direction, redir, REDIR_VARASSIGN);
              }
! #line 2122 "y.tab.c"
      break;
!   case 17: /* redirection: GREATER_GREATER WORD  */
! #line 523 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
***************
*** 2110,2118 ****
                (yyval.redirect) = make_redirection (source, r_appending_to, redir, 0);
              }
! #line 2113 "y.tab.c"
      break;
!   case 17: /* redirection: NUMBER GREATER_GREATER WORD  */
! #line 514 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2129,2137 ----
                (yyval.redirect) = make_redirection (source, r_appending_to, redir, 0);
              }
! #line 2132 "y.tab.c"
      break;
!   case 18: /* redirection: NUMBER GREATER_GREATER WORD  */
! #line 529 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2120,2128 ****
                (yyval.redirect) = make_redirection (source, r_appending_to, redir, 0);
              }
! #line 2123 "y.tab.c"
      break;
!   case 18: /* redirection: REDIR_WORD GREATER_GREATER WORD  */
! #line 520 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2139,2147 ----
                (yyval.redirect) = make_redirection (source, r_appending_to, redir, 0);
              }
! #line 2142 "y.tab.c"
      break;
!   case 19: /* redirection: REDIR_WORD GREATER_GREATER WORD  */
! #line 535 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2130,2138 ****
                (yyval.redirect) = make_redirection (source, r_appending_to, redir, REDIR_VARASSIGN);
              }
! #line 2133 "y.tab.c"
      break;
!   case 19: /* redirection: GREATER_BAR WORD  */
! #line 526 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
--- 2149,2157 ----
                (yyval.redirect) = make_redirection (source, r_appending_to, redir, REDIR_VARASSIGN);
              }
! #line 2152 "y.tab.c"
      break;
!   case 20: /* redirection: GREATER_BAR WORD  */
! #line 541 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
***************
*** 2140,2148 ****
                (yyval.redirect) = make_redirection (source, r_output_force, redir, 0);
              }
! #line 2143 "y.tab.c"
      break;
!   case 20: /* redirection: NUMBER GREATER_BAR WORD  */
! #line 532 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2159,2167 ----
                (yyval.redirect) = make_redirection (source, r_output_force, redir, 0);
              }
! #line 2162 "y.tab.c"
      break;
!   case 21: /* redirection: NUMBER GREATER_BAR WORD  */
! #line 547 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2150,2158 ****
                (yyval.redirect) = make_redirection (source, r_output_force, redir, 0);
              }
! #line 2153 "y.tab.c"
      break;
!   case 21: /* redirection: REDIR_WORD GREATER_BAR WORD  */
! #line 538 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2169,2177 ----
                (yyval.redirect) = make_redirection (source, r_output_force, redir, 0);
              }
! #line 2172 "y.tab.c"
      break;
!   case 22: /* redirection: REDIR_WORD GREATER_BAR WORD  */
! #line 553 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2160,2168 ****
                (yyval.redirect) = make_redirection (source, r_output_force, redir, REDIR_VARASSIGN);
              }
! #line 2163 "y.tab.c"
      break;
!   case 22: /* redirection: LESS_GREATER WORD  */
! #line 544 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
--- 2179,2187 ----
                (yyval.redirect) = make_redirection (source, r_output_force, redir, REDIR_VARASSIGN);
              }
! #line 2182 "y.tab.c"
      break;
!   case 23: /* redirection: LESS_GREATER WORD  */
! #line 559 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
***************
*** 2170,2178 ****
                (yyval.redirect) = make_redirection (source, r_input_output, redir, 0);
              }
! #line 2173 "y.tab.c"
      break;
!   case 23: /* redirection: NUMBER LESS_GREATER WORD  */
! #line 550 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2189,2197 ----
                (yyval.redirect) = make_redirection (source, r_input_output, redir, 0);
              }
! #line 2192 "y.tab.c"
      break;
!   case 24: /* redirection: NUMBER LESS_GREATER WORD  */
! #line 565 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2180,2188 ****
                (yyval.redirect) = make_redirection (source, r_input_output, redir, 0);
              }
! #line 2183 "y.tab.c"
      break;
!   case 24: /* redirection: REDIR_WORD LESS_GREATER WORD  */
! #line 556 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2199,2207 ----
                (yyval.redirect) = make_redirection (source, r_input_output, redir, 0);
              }
! #line 2202 "y.tab.c"
      break;
!   case 25: /* redirection: REDIR_WORD LESS_GREATER WORD  */
! #line 571 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2190,2198 ****
                (yyval.redirect) = make_redirection (source, r_input_output, redir, REDIR_VARASSIGN);
              }
! #line 2193 "y.tab.c"
      break;
!   case 25: /* redirection: LESS_LESS WORD  */
! #line 562 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
--- 2209,2217 ----
                (yyval.redirect) = make_redirection (source, r_input_output, redir, REDIR_VARASSIGN);
              }
! #line 2212 "y.tab.c"
      break;
!   case 26: /* redirection: LESS_LESS WORD  */
! #line 577 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
***************
*** 2201,2209 ****
                push_heredoc ((yyval.redirect));
              }
! #line 2204 "y.tab.c"
      break;
!   case 26: /* redirection: NUMBER LESS_LESS WORD  */
! #line 569 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2220,2228 ----
                push_heredoc ((yyval.redirect));
              }
! #line 2223 "y.tab.c"
      break;
!   case 27: /* redirection: NUMBER LESS_LESS WORD  */
! #line 584 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2212,2220 ****
                push_heredoc ((yyval.redirect));
              }
! #line 2215 "y.tab.c"
      break;
!   case 27: /* redirection: REDIR_WORD LESS_LESS WORD  */
! #line 576 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2231,2239 ----
                push_heredoc ((yyval.redirect));
              }
! #line 2234 "y.tab.c"
      break;
!   case 28: /* redirection: REDIR_WORD LESS_LESS WORD  */
! #line 591 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2223,2231 ****
                push_heredoc ((yyval.redirect));
              }
! #line 2226 "y.tab.c"
      break;
!   case 28: /* redirection: LESS_LESS_MINUS WORD  */
! #line 583 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
--- 2242,2250 ----
                push_heredoc ((yyval.redirect));
              }
! #line 2245 "y.tab.c"
      break;
!   case 29: /* redirection: LESS_LESS_MINUS WORD  */
! #line 598 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
***************
*** 2234,2242 ****
                push_heredoc ((yyval.redirect));
              }
! #line 2237 "y.tab.c"
      break;
!   case 29: /* redirection: NUMBER LESS_LESS_MINUS WORD  */
! #line 590 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2253,2261 ----
                push_heredoc ((yyval.redirect));
              }
! #line 2256 "y.tab.c"
      break;
!   case 30: /* redirection: NUMBER LESS_LESS_MINUS WORD  */
! #line 605 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2245,2253 ****
                push_heredoc ((yyval.redirect));
              }
! #line 2248 "y.tab.c"
      break;
!   case 30: /* redirection: REDIR_WORD LESS_LESS_MINUS WORD  */
! #line 597 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2264,2272 ----
                push_heredoc ((yyval.redirect));
              }
! #line 2267 "y.tab.c"
      break;
!   case 31: /* redirection: REDIR_WORD LESS_LESS_MINUS WORD  */
! #line 612 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2256,2264 ****
                push_heredoc ((yyval.redirect));
              }
! #line 2259 "y.tab.c"
      break;
!   case 31: /* redirection: LESS_LESS_LESS WORD  */
! #line 604 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
--- 2275,2283 ----
                push_heredoc ((yyval.redirect));
              }
! #line 2278 "y.tab.c"
      break;
!   case 32: /* redirection: LESS_LESS_LESS WORD  */
! #line 619 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
***************
*** 2266,2274 ****
                (yyval.redirect) = make_redirection (source, r_reading_string, redir, 0);
              }
! #line 2269 "y.tab.c"
      break;
!   case 32: /* redirection: NUMBER LESS_LESS_LESS WORD  */
! #line 610 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2285,2293 ----
                (yyval.redirect) = make_redirection (source, r_reading_string, redir, 0);
              }
! #line 2288 "y.tab.c"
      break;
!   case 33: /* redirection: NUMBER LESS_LESS_LESS WORD  */
! #line 625 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2276,2284 ****
                (yyval.redirect) = make_redirection (source, r_reading_string, redir, 0);
              }
! #line 2279 "y.tab.c"
      break;
!   case 33: /* redirection: REDIR_WORD LESS_LESS_LESS WORD  */
! #line 616 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2295,2303 ----
                (yyval.redirect) = make_redirection (source, r_reading_string, redir, 0);
              }
! #line 2298 "y.tab.c"
      break;
!   case 34: /* redirection: REDIR_WORD LESS_LESS_LESS WORD  */
! #line 631 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2286,2294 ****
                (yyval.redirect) = make_redirection (source, r_reading_string, redir, REDIR_VARASSIGN);
              }
! #line 2289 "y.tab.c"
      break;
!   case 34: /* redirection: LESS_AND NUMBER  */
! #line 622 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
--- 2305,2313 ----
                (yyval.redirect) = make_redirection (source, r_reading_string, redir, REDIR_VARASSIGN);
              }
! #line 2308 "y.tab.c"
      break;
!   case 35: /* redirection: LESS_AND NUMBER  */
! #line 637 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
***************
*** 2296,2304 ****
                (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, 0);
              }
! #line 2299 "y.tab.c"
      break;
!   case 35: /* redirection: NUMBER LESS_AND NUMBER  */
! #line 628 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2315,2323 ----
                (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, 0);
              }
! #line 2318 "y.tab.c"
      break;
!   case 36: /* redirection: NUMBER LESS_AND NUMBER  */
! #line 643 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2306,2314 ****
                (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, 0);
              }
! #line 2309 "y.tab.c"
      break;
!   case 36: /* redirection: REDIR_WORD LESS_AND NUMBER  */
! #line 634 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2325,2333 ----
                (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, 0);
              }
! #line 2328 "y.tab.c"
      break;
!   case 37: /* redirection: REDIR_WORD LESS_AND NUMBER  */
! #line 649 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2316,2324 ****
                (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, REDIR_VARASSIGN);
              }
! #line 2319 "y.tab.c"
      break;
!   case 37: /* redirection: GREATER_AND NUMBER  */
! #line 640 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
--- 2335,2343 ----
                (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, REDIR_VARASSIGN);
              }
! #line 2338 "y.tab.c"
      break;
!   case 38: /* redirection: GREATER_AND NUMBER  */
! #line 655 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
***************
*** 2326,2334 ****
                (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, 0);
              }
! #line 2329 "y.tab.c"
      break;
!   case 38: /* redirection: NUMBER GREATER_AND NUMBER  */
! #line 646 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2345,2353 ----
                (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, 0);
              }
! #line 2348 "y.tab.c"
      break;
!   case 39: /* redirection: NUMBER GREATER_AND NUMBER  */
! #line 661 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2336,2344 ****
                (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, 0);
              }
! #line 2339 "y.tab.c"
      break;
!   case 39: /* redirection: REDIR_WORD GREATER_AND NUMBER  */
! #line 652 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2355,2363 ----
                (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, 0);
              }
! #line 2358 "y.tab.c"
      break;
!   case 40: /* redirection: REDIR_WORD GREATER_AND NUMBER  */
! #line 667 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2346,2354 ****
                (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, REDIR_VARASSIGN);
              }
! #line 2349 "y.tab.c"
      break;
!   case 40: /* redirection: LESS_AND WORD  */
! #line 658 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
--- 2365,2373 ----
                (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, REDIR_VARASSIGN);
              }
! #line 2368 "y.tab.c"
      break;
!   case 41: /* redirection: LESS_AND WORD  */
! #line 673 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
***************
*** 2356,2364 ****
                (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, 0);
              }
! #line 2359 "y.tab.c"
      break;
!   case 41: /* redirection: NUMBER LESS_AND WORD  */
! #line 664 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2375,2383 ----
                (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, 0);
              }
! #line 2378 "y.tab.c"
      break;
!   case 42: /* redirection: NUMBER LESS_AND WORD  */
! #line 679 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2366,2374 ****
                (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, 0);
              }
! #line 2369 "y.tab.c"
      break;
!   case 42: /* redirection: REDIR_WORD LESS_AND WORD  */
! #line 670 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2385,2393 ----
                (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, 0);
              }
! #line 2388 "y.tab.c"
      break;
!   case 43: /* redirection: REDIR_WORD LESS_AND WORD  */
! #line 685 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2376,2384 ****
                (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, REDIR_VARASSIGN);
              }
! #line 2379 "y.tab.c"
      break;
!   case 43: /* redirection: GREATER_AND WORD  */
! #line 676 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
--- 2395,2403 ----
                (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, REDIR_VARASSIGN);
              }
! #line 2398 "y.tab.c"
      break;
!   case 44: /* redirection: GREATER_AND WORD  */
! #line 691 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
***************
*** 2386,2394 ****
                (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, 0);
              }
! #line 2389 "y.tab.c"
      break;
!   case 44: /* redirection: NUMBER GREATER_AND WORD  */
! #line 682 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2405,2413 ----
                (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, 0);
              }
! #line 2408 "y.tab.c"
      break;
!   case 45: /* redirection: NUMBER GREATER_AND WORD  */
! #line 697 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2396,2404 ****
                (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, 0);
              }
! #line 2399 "y.tab.c"
      break;
!   case 45: /* redirection: REDIR_WORD GREATER_AND WORD  */
! #line 688 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2415,2423 ----
                (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, 0);
              }
! #line 2418 "y.tab.c"
      break;
!   case 46: /* redirection: REDIR_WORD GREATER_AND WORD  */
! #line 703 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2406,2414 ****
                (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, REDIR_VARASSIGN);
              }
! #line 2409 "y.tab.c"
      break;
!   case 46: /* redirection: GREATER_AND '-'  */
! #line 694 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
--- 2425,2433 ----
                (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, REDIR_VARASSIGN);
              }
! #line 2428 "y.tab.c"
      break;
!   case 47: /* redirection: GREATER_AND '-'  */
! #line 709 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
***************
*** 2416,2424 ****
                (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
              }
! #line 2419 "y.tab.c"
      break;
!   case 47: /* redirection: NUMBER GREATER_AND '-'  */
! #line 700 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2435,2443 ----
                (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
              }
! #line 2438 "y.tab.c"
      break;
!   case 48: /* redirection: NUMBER GREATER_AND '-'  */
! #line 715 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2426,2434 ****
                (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
              }
! #line 2429 "y.tab.c"
      break;
!   case 48: /* redirection: REDIR_WORD GREATER_AND '-'  */
! #line 706 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2445,2453 ----
                (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
              }
! #line 2448 "y.tab.c"
      break;
!   case 49: /* redirection: REDIR_WORD GREATER_AND '-'  */
! #line 721 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2436,2444 ****
                (yyval.redirect) = make_redirection (source, r_close_this, redir, REDIR_VARASSIGN);
              }
! #line 2439 "y.tab.c"
      break;
!   case 49: /* redirection: LESS_AND '-'  */
! #line 712 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
--- 2455,2463 ----
                (yyval.redirect) = make_redirection (source, r_close_this, redir, REDIR_VARASSIGN);
              }
! #line 2458 "y.tab.c"
      break;
!   case 50: /* redirection: LESS_AND '-'  */
! #line 727 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 0;
***************
*** 2446,2454 ****
                (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
              }
! #line 2449 "y.tab.c"
      break;
!   case 50: /* redirection: NUMBER LESS_AND '-'  */
! #line 718 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
--- 2465,2473 ----
                (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
              }
! #line 2468 "y.tab.c"
      break;
!   case 51: /* redirection: NUMBER LESS_AND '-'  */
! #line 733 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = (yyvsp[-2].number);
***************
*** 2456,2464 ****
                (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
              }
! #line 2459 "y.tab.c"
      break;
!   case 51: /* redirection: REDIR_WORD LESS_AND '-'  */
! #line 724 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
--- 2475,2483 ----
                (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
              }
! #line 2478 "y.tab.c"
      break;
!   case 52: /* redirection: REDIR_WORD LESS_AND '-'  */
! #line 739 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.filename = (yyvsp[-2].word);
***************
*** 2466,2474 ****
                (yyval.redirect) = make_redirection (source, r_close_this, redir, REDIR_VARASSIGN);
              }
! #line 2469 "y.tab.c"
      break;
!   case 52: /* redirection: AND_GREATER WORD  */
! #line 730 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
--- 2485,2493 ----
                (yyval.redirect) = make_redirection (source, r_close_this, redir, REDIR_VARASSIGN);
              }
! #line 2488 "y.tab.c"
      break;
!   case 53: /* redirection: AND_GREATER WORD  */
! #line 745 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
***************
*** 2476,2484 ****
                (yyval.redirect) = make_redirection (source, r_err_and_out, redir, 0);
              }
! #line 2479 "y.tab.c"
      break;
!   case 53: /* redirection: AND_GREATER_GREATER WORD  */
! #line 736 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
--- 2495,2503 ----
                (yyval.redirect) = make_redirection (source, r_err_and_out, redir, 0);
              }
! #line 2498 "y.tab.c"
      break;
!   case 54: /* redirection: AND_GREATER_GREATER WORD  */
! #line 751 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                source.dest = 1;
***************
*** 2486,2520 ****
                (yyval.redirect) = make_redirection (source, r_append_err_and_out, redir, 0);
              }
! #line 2489 "y.tab.c"
      break;
!   case 54: /* simple_command_element: WORD  */
! #line 744 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.element).word = (yyvsp[0].word); (yyval.element).redirect = 0; }
! #line 2495 "y.tab.c"
      break;
!   case 55: /* simple_command_element: ASSIGNMENT_WORD  */
! #line 746 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.element).word = (yyvsp[0].word); (yyval.element).redirect = 0; }
! #line 2501 "y.tab.c"
      break;
!   case 56: /* simple_command_element: redirection  */
! #line 748 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.element).redirect = (yyvsp[0].redirect); (yyval.element).word = 0; }
! #line 2507 "y.tab.c"
      break;
!   case 57: /* redirection_list: redirection  */
! #line 752 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.redirect) = (yyvsp[0].redirect);
              }
! #line 2515 "y.tab.c"
      break;
!   case 58: /* redirection_list: redirection_list redirection  */
! #line 756 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                register REDIRECT *t;
--- 2505,2539 ----
                (yyval.redirect) = make_redirection (source, r_append_err_and_out, redir, 0);
              }
! #line 2508 "y.tab.c"
      break;
!   case 55: /* simple_command_element: WORD  */
! #line 759 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.element).word = (yyvsp[0].word); (yyval.element).redirect = 0; }
! #line 2514 "y.tab.c"
      break;
!   case 56: /* simple_command_element: ASSIGNMENT_WORD  */
! #line 761 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.element).word = (yyvsp[0].word); (yyval.element).redirect = 0; }
! #line 2520 "y.tab.c"
      break;
!   case 57: /* simple_command_element: redirection  */
! #line 763 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.element).redirect = (yyvsp[0].redirect); (yyval.element).word = 0; }
! #line 2526 "y.tab.c"
      break;
!   case 58: /* redirection_list: redirection  */
! #line 767 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.redirect) = (yyvsp[0].redirect);
              }
! #line 2534 "y.tab.c"
      break;
!   case 59: /* redirection_list: redirection_list redirection  */
! #line 771 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                register REDIRECT *t;
***************
*** 2525,2557 ****
                (yyval.redirect) = (yyvsp[-1].redirect);
              }
! #line 2528 "y.tab.c"
      break;
!   case 59: /* simple_command: simple_command_element  */
! #line 767 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_simple_command ((yyvsp[0].element), (COMMAND *)NULL); }
! #line 2534 "y.tab.c"
      break;
!   case 60: /* simple_command: simple_command simple_command_element  */
! #line 769 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_simple_command ((yyvsp[0].element), (yyvsp[-1].command)); }
! #line 2540 "y.tab.c"
      break;
!   case 61: /* command: simple_command  */
! #line 773 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = clean_simple_command ((yyvsp[0].command)); }
! #line 2546 "y.tab.c"
      break;
!   case 62: /* command: shell_command  */
! #line 775 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2552 "y.tab.c"
      break;
!   case 63: /* command: shell_command redirection_list  */
! #line 777 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                COMMAND *tc;
--- 2544,2576 ----
                (yyval.redirect) = (yyvsp[-1].redirect);
              }
! #line 2547 "y.tab.c"
      break;
!   case 60: /* simple_command: simple_command_element  */
! #line 782 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_simple_command ((yyvsp[0].element), (COMMAND *)NULL); }
! #line 2553 "y.tab.c"
      break;
!   case 61: /* simple_command: simple_command simple_command_element  */
! #line 784 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_simple_command ((yyvsp[0].element), (yyvsp[-1].command)); }
! #line 2559 "y.tab.c"
      break;
!   case 62: /* command: simple_command  */
! #line 788 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = clean_simple_command ((yyvsp[0].command)); }
! #line 2565 "y.tab.c"
      break;
!   case 63: /* command: shell_command  */
! #line 790 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2571 "y.tab.c"
      break;
!   case 64: /* command: shell_command redirection_list  */
! #line 792 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                COMMAND *tc;
***************
*** 2569,2727 ****
                (yyval.command) = (yyvsp[-1].command);
              }
! #line 2572 "y.tab.c"
      break;
!   case 64: /* command: function_def  */
! #line 793 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2578 "y.tab.c"
      break;
!   case 65: /* command: coproc  */
! #line 795 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2584 "y.tab.c"
      break;
!   case 66: /* shell_command: for_command  */
! #line 799 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2590 "y.tab.c"
      break;
!   case 67: /* shell_command: case_command  */
! #line 801 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2596 "y.tab.c"
      break;
!   case 68: /* shell_command: WHILE compound_list DO compound_list DONE  */
! #line 803 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_while_command ((yyvsp[-3].command), (yyvsp[-1].command)); }
! #line 2602 "y.tab.c"
      break;
!   case 69: /* shell_command: UNTIL compound_list DO compound_list DONE  */
! #line 805 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_until_command ((yyvsp[-3].command), (yyvsp[-1].command)); }
! #line 2608 "y.tab.c"
      break;
!   case 70: /* shell_command: select_command  */
! #line 807 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2614 "y.tab.c"
      break;
!   case 71: /* shell_command: if_command  */
! #line 809 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2620 "y.tab.c"
      break;
!   case 72: /* shell_command: subshell  */
! #line 811 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2626 "y.tab.c"
      break;
!   case 73: /* shell_command: group_command  */
! #line 813 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2632 "y.tab.c"
      break;
!   case 74: /* shell_command: arith_command  */
! #line 815 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2638 "y.tab.c"
      break;
!   case 75: /* shell_command: cond_command  */
! #line 817 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2644 "y.tab.c"
      break;
!   case 76: /* shell_command: arith_for_command  */
! #line 819 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2650 "y.tab.c"
      break;
!   case 77: /* for_command: FOR WORD newline_list DO compound_list DONE  */
! #line 823 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2659 "y.tab.c"
      break;
!   case 78: /* for_command: FOR WORD newline_list '{' compound_list '}'  */
! #line 828 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2668 "y.tab.c"
      break;
!   case 79: /* for_command: FOR WORD ';' newline_list DO compound_list DONE  */
! #line 833 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2677 "y.tab.c"
      break;
!   case 80: /* for_command: FOR WORD ';' newline_list '{' compound_list '}'  */
! #line 838 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2686 "y.tab.c"
      break;
!   case 81: /* for_command: FOR WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE  */
! #line 843 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2695 "y.tab.c"
      break;
!   case 82: /* for_command: FOR WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}'  */
! #line 848 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2704 "y.tab.c"
      break;
!   case 83: /* for_command: FOR WORD newline_list IN list_terminator newline_list DO compound_list DONE  */
! #line 853 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2713 "y.tab.c"
      break;
!   case 84: /* for_command: FOR WORD newline_list IN list_terminator newline_list '{' compound_list '}'  */
! #line 858 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2722 "y.tab.c"
      break;
!   case 85: /* arith_for_command: FOR ARITH_FOR_EXPRS list_terminator newline_list DO compound_list DONE  */
! #line 865 "/usr/local/src/chet/src/bash/src/parse.y"
                                  {
                    (yyval.command) = make_arith_for_command ((yyvsp[-5].word_list), (yyvsp[-1].command), arith_for_lineno);
--- 2588,2746 ----
                (yyval.command) = (yyvsp[-1].command);
              }
! #line 2591 "y.tab.c"
      break;
!   case 65: /* command: function_def  */
! #line 808 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2597 "y.tab.c"
      break;
!   case 66: /* command: coproc  */
! #line 810 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2603 "y.tab.c"
      break;
!   case 67: /* shell_command: for_command  */
! #line 814 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2609 "y.tab.c"
      break;
!   case 68: /* shell_command: case_command  */
! #line 816 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2615 "y.tab.c"
      break;
!   case 69: /* shell_command: WHILE compound_list DO compound_list DONE  */
! #line 818 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_while_command ((yyvsp[-3].command), (yyvsp[-1].command)); }
! #line 2621 "y.tab.c"
      break;
!   case 70: /* shell_command: UNTIL compound_list DO compound_list DONE  */
! #line 820 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_until_command ((yyvsp[-3].command), (yyvsp[-1].command)); }
! #line 2627 "y.tab.c"
      break;
!   case 71: /* shell_command: select_command  */
! #line 822 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2633 "y.tab.c"
      break;
!   case 72: /* shell_command: if_command  */
! #line 824 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2639 "y.tab.c"
      break;
!   case 73: /* shell_command: subshell  */
! #line 826 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2645 "y.tab.c"
      break;
!   case 74: /* shell_command: group_command  */
! #line 828 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2651 "y.tab.c"
      break;
!   case 75: /* shell_command: arith_command  */
! #line 830 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2657 "y.tab.c"
      break;
!   case 76: /* shell_command: cond_command  */
! #line 832 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2663 "y.tab.c"
      break;
!   case 77: /* shell_command: arith_for_command  */
! #line 834 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2669 "y.tab.c"
      break;
!   case 78: /* for_command: FOR WORD newline_list DO compound_list DONE  */
! #line 838 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2678 "y.tab.c"
      break;
!   case 79: /* for_command: FOR WORD newline_list '{' compound_list '}'  */
! #line 843 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2687 "y.tab.c"
      break;
!   case 80: /* for_command: FOR WORD ';' newline_list DO compound_list DONE  */
! #line 848 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2696 "y.tab.c"
      break;
!   case 81: /* for_command: FOR WORD ';' newline_list '{' compound_list '}'  */
! #line 853 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2705 "y.tab.c"
      break;
!   case 82: /* for_command: FOR WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE  */
! #line 858 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2714 "y.tab.c"
      break;
!   case 83: /* for_command: FOR WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}'  */
! #line 863 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2723 "y.tab.c"
      break;
!   case 84: /* for_command: FOR WORD newline_list IN list_terminator newline_list DO compound_list DONE  */
! #line 868 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2732 "y.tab.c"
      break;
!   case 85: /* for_command: FOR WORD newline_list IN list_terminator newline_list '{' compound_list '}'  */
! #line 873 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_for_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2741 "y.tab.c"
      break;
!   case 86: /* arith_for_command: FOR ARITH_FOR_EXPRS list_terminator newline_list DO compound_list DONE  */
! #line 880 "/usr/local/src/chet/src/bash/src/parse.y"
                                  {
                    (yyval.command) = make_arith_for_command ((yyvsp[-5].word_list), (yyvsp[-1].command), arith_for_lineno);
***************
*** 2729,2737 ****
                    if (word_top > 0) word_top--;
                  }
! #line 2732 "y.tab.c"
      break;
!   case 86: /* arith_for_command: FOR ARITH_FOR_EXPRS list_terminator newline_list '{' compound_list '}'  */
! #line 871 "/usr/local/src/chet/src/bash/src/parse.y"
                                  {
                    (yyval.command) = make_arith_for_command ((yyvsp[-5].word_list), (yyvsp[-1].command), arith_for_lineno);
--- 2748,2756 ----
                    if (word_top > 0) word_top--;
                  }
! #line 2751 "y.tab.c"
      break;
!   case 87: /* arith_for_command: FOR ARITH_FOR_EXPRS list_terminator newline_list '{' compound_list '}'  */
! #line 886 "/usr/local/src/chet/src/bash/src/parse.y"
                                  {
                    (yyval.command) = make_arith_for_command ((yyvsp[-5].word_list), (yyvsp[-1].command), arith_for_lineno);
***************
*** 2739,2747 ****
                    if (word_top > 0) word_top--;
                  }
! #line 2742 "y.tab.c"
      break;
!   case 87: /* arith_for_command: FOR ARITH_FOR_EXPRS DO compound_list DONE  */
! #line 877 "/usr/local/src/chet/src/bash/src/parse.y"
                                  {
                    (yyval.command) = make_arith_for_command ((yyvsp[-3].word_list), (yyvsp[-1].command), arith_for_lineno);
--- 2758,2766 ----
                    if (word_top > 0) word_top--;
                  }
! #line 2761 "y.tab.c"
      break;
!   case 88: /* arith_for_command: FOR ARITH_FOR_EXPRS DO compound_list DONE  */
! #line 892 "/usr/local/src/chet/src/bash/src/parse.y"
                                  {
                    (yyval.command) = make_arith_for_command ((yyvsp[-3].word_list), (yyvsp[-1].command), arith_for_lineno);
***************
*** 2749,2757 ****
                    if (word_top > 0) word_top--;
                  }
! #line 2752 "y.tab.c"
      break;
!   case 88: /* arith_for_command: FOR ARITH_FOR_EXPRS '{' compound_list '}'  */
! #line 883 "/usr/local/src/chet/src/bash/src/parse.y"
                                  {
                    (yyval.command) = make_arith_for_command ((yyvsp[-3].word_list), (yyvsp[-1].command), arith_for_lineno);
--- 2768,2776 ----
                    if (word_top > 0) word_top--;
                  }
! #line 2771 "y.tab.c"
      break;
!   case 89: /* arith_for_command: FOR ARITH_FOR_EXPRS '{' compound_list '}'  */
! #line 898 "/usr/local/src/chet/src/bash/src/parse.y"
                                  {
                    (yyval.command) = make_arith_for_command ((yyvsp[-3].word_list), (yyvsp[-1].command), arith_for_lineno);
***************
*** 2759,2896 ****
                    if (word_top > 0) word_top--;
                  }
! #line 2762 "y.tab.c"
      break;
!   case 89: /* select_command: SELECT WORD newline_list DO compound_list DONE  */
! #line 891 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2771 "y.tab.c"
      break;
!   case 90: /* select_command: SELECT WORD newline_list '{' compound_list '}'  */
! #line 896 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2780 "y.tab.c"
      break;
!   case 91: /* select_command: SELECT WORD ';' newline_list DO compound_list DONE  */
! #line 901 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2789 "y.tab.c"
      break;
!   case 92: /* select_command: SELECT WORD ';' newline_list '{' compound_list '}'  */
! #line 906 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2798 "y.tab.c"
      break;
!   case 93: /* select_command: SELECT WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE  */
! #line 911 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2807 "y.tab.c"
      break;
!   case 94: /* select_command: SELECT WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}'  */
! #line 916 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2816 "y.tab.c"
      break;
!   case 95: /* select_command: SELECT WORD newline_list IN list_terminator newline_list DO compound_list DONE  */
! #line 921 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2825 "y.tab.c"
      break;
!   case 96: /* select_command: SELECT WORD newline_list IN list_terminator newline_list '{' compound_list '}'  */
! #line 926 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2834 "y.tab.c"
      break;
!   case 97: /* case_command: CASE WORD newline_list IN newline_list ESAC  */
! #line 933 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_case_command ((yyvsp[-4].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2843 "y.tab.c"
      break;
!   case 98: /* case_command: CASE WORD newline_list IN case_clause_sequence newline_list ESAC  */
! #line 938 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_case_command ((yyvsp[-5].word), (yyvsp[-2].pattern), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2852 "y.tab.c"
      break;
!   case 99: /* case_command: CASE WORD newline_list IN case_clause ESAC  */
! #line 943 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_case_command ((yyvsp[-4].word), (yyvsp[-1].pattern), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2861 "y.tab.c"
      break;
!   case 100: /* function_def: WORD '(' ')' newline_list function_body  */
! #line 950 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_function_def ((yyvsp[-4].word), (yyvsp[0].command), function_dstart, function_bstart); }
! #line 2867 "y.tab.c"
      break;
!   case 101: /* function_def: FUNCTION WORD '(' ')' newline_list function_body  */
! #line 952 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_function_def ((yyvsp[-4].word), (yyvsp[0].command), function_dstart, function_bstart); }
! #line 2873 "y.tab.c"
      break;
!   case 102: /* function_def: FUNCTION WORD function_body  */
! #line 954 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_function_def ((yyvsp[-1].word), (yyvsp[0].command), function_dstart, function_bstart); }
! #line 2879 "y.tab.c"
      break;
!   case 103: /* function_def: FUNCTION WORD '\n' newline_list function_body  */
! #line 956 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_function_def ((yyvsp[-3].word), (yyvsp[0].command), function_dstart, function_bstart); }
! #line 2885 "y.tab.c"
      break;
!   case 104: /* function_body: shell_command  */
! #line 960 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2891 "y.tab.c"
      break;
!   case 105: /* function_body: shell_command redirection_list  */
! #line 962 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                COMMAND *tc;
--- 2778,2915 ----
                    if (word_top > 0) word_top--;
                  }
! #line 2781 "y.tab.c"
      break;
!   case 90: /* select_command: SELECT WORD newline_list DO compound_list DONE  */
! #line 906 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2790 "y.tab.c"
      break;
!   case 91: /* select_command: SELECT WORD newline_list '{' compound_list '}'  */
! #line 911 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2799 "y.tab.c"
      break;
!   case 92: /* select_command: SELECT WORD ';' newline_list DO compound_list DONE  */
! #line 916 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2808 "y.tab.c"
      break;
!   case 93: /* select_command: SELECT WORD ';' newline_list '{' compound_list '}'  */
! #line 921 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2817 "y.tab.c"
      break;
!   case 94: /* select_command: SELECT WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE  */
! #line 926 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2826 "y.tab.c"
      break;
!   case 95: /* select_command: SELECT WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}'  */
! #line 931 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2835 "y.tab.c"
      break;
!   case 96: /* select_command: SELECT WORD newline_list IN list_terminator newline_list DO compound_list DONE  */
! #line 936 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2844 "y.tab.c"
      break;
!   case 97: /* select_command: SELECT WORD newline_list IN list_terminator newline_list '{' compound_list '}'  */
! #line 941 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_select_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2853 "y.tab.c"
      break;
!   case 98: /* case_command: CASE WORD newline_list IN newline_list ESAC  */
! #line 948 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_case_command ((yyvsp[-4].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2862 "y.tab.c"
      break;
!   case 99: /* case_command: CASE WORD newline_list IN case_clause_sequence newline_list ESAC  */
! #line 953 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_case_command ((yyvsp[-5].word), (yyvsp[-2].pattern), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2871 "y.tab.c"
      break;
!   case 100: /* case_command: CASE WORD newline_list IN case_clause ESAC  */
! #line 958 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_case_command ((yyvsp[-4].word), (yyvsp[-1].pattern), word_lineno[word_top]);
                if (word_top > 0) word_top--;
              }
! #line 2880 "y.tab.c"
      break;
!   case 101: /* function_def: WORD '(' ')' newline_list function_body  */
! #line 965 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_function_def ((yyvsp[-4].word), (yyvsp[0].command), function_dstart, function_bstart); }
! #line 2886 "y.tab.c"
      break;
!   case 102: /* function_def: FUNCTION WORD '(' ')' newline_list function_body  */
! #line 967 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_function_def ((yyvsp[-4].word), (yyvsp[0].command), function_dstart, function_bstart); }
! #line 2892 "y.tab.c"
      break;
!   case 103: /* function_def: FUNCTION WORD function_body  */
! #line 969 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_function_def ((yyvsp[-1].word), (yyvsp[0].command), function_dstart, function_bstart); }
! #line 2898 "y.tab.c"
      break;
!   case 104: /* function_def: FUNCTION WORD '\n' newline_list function_body  */
! #line 971 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_function_def ((yyvsp[-3].word), (yyvsp[0].command), function_dstart, function_bstart); }
! #line 2904 "y.tab.c"
      break;
!   case 105: /* function_body: shell_command  */
! #line 975 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 2910 "y.tab.c"
      break;
!   case 106: /* function_body: shell_command redirection_list  */
! #line 977 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                COMMAND *tc;
***************
*** 2921,2963 ****
                (yyval.command) = (yyvsp[-1].command);
              }
! #line 2924 "y.tab.c"
      break;
!   case 106: /* subshell: '(' compound_list ')'  */
! #line 993 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_subshell_command ((yyvsp[-1].command));
                (yyval.command)->flags |= CMD_WANT_SUBSHELL;
              }
! #line 2933 "y.tab.c"
      break;
!   case 107: /* comsub: DOLPAREN compound_list ')'  */
! #line 1000 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = (yyvsp[-1].command);
              }
! #line 2941 "y.tab.c"
      break;
!   case 108: /* comsub: DOLPAREN newline_list ')'  */
! #line 1004 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = (COMMAND *)NULL;
              }
! #line 2949 "y.tab.c"
      break;
!   case 109: /* coproc: COPROC shell_command  */
! #line 1010 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_coproc_command ("COPROC", (yyvsp[0].command));
                (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
              }
! #line 2958 "y.tab.c"
      break;
!   case 110: /* coproc: COPROC shell_command redirection_list  */
! #line 1015 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                COMMAND *tc;
--- 2940,2982 ----
                (yyval.command) = (yyvsp[-1].command);
              }
! #line 2943 "y.tab.c"
      break;
!   case 107: /* subshell: '(' compound_list ')'  */
! #line 1008 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_subshell_command ((yyvsp[-1].command));
                (yyval.command)->flags |= CMD_WANT_SUBSHELL;
              }
! #line 2952 "y.tab.c"
      break;
!   case 108: /* comsub: DOLPAREN compound_list ')'  */
! #line 1015 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = (yyvsp[-1].command);
              }
! #line 2960 "y.tab.c"
      break;
!   case 109: /* comsub: DOLPAREN newline_list ')'  */
! #line 1019 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = (COMMAND *)NULL;
              }
! #line 2968 "y.tab.c"
      break;
!   case 110: /* coproc: COPROC shell_command  */
! #line 1025 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_coproc_command ("COPROC", (yyvsp[0].command));
                (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
              }
! #line 2977 "y.tab.c"
      break;
!   case 111: /* coproc: COPROC shell_command redirection_list  */
! #line 1030 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                COMMAND *tc;
***************
*** 2976,2993 ****
                (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
              }
! #line 2979 "y.tab.c"
      break;
!   case 111: /* coproc: COPROC WORD shell_command  */
! #line 1032 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_coproc_command ((yyvsp[-1].word)->word, (yyvsp[0].command));
                (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
              }
! #line 2988 "y.tab.c"
      break;
!   case 112: /* coproc: COPROC WORD shell_command redirection_list  */
! #line 1037 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                COMMAND *tc;
--- 2995,3012 ----
                (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
              }
! #line 2998 "y.tab.c"
      break;
!   case 112: /* coproc: COPROC WORD shell_command  */
! #line 1047 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_coproc_command ((yyvsp[-1].word)->word, (yyvsp[0].command));
                (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
              }
! #line 3007 "y.tab.c"
      break;
!   case 113: /* coproc: COPROC WORD shell_command redirection_list  */
! #line 1052 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                COMMAND *tc;
***************
*** 3006,3155 ****
                (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
              }
! #line 3009 "y.tab.c"
      break;
!   case 113: /* coproc: COPROC simple_command  */
! #line 1054 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[0].command)));
                (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
              }
! #line 3018 "y.tab.c"
      break;
!   case 114: /* if_command: IF compound_list THEN compound_list FI  */
! #line 1061 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_if_command ((yyvsp[-3].command), (yyvsp[-1].command), (COMMAND *)NULL); }
! #line 3024 "y.tab.c"
      break;
!   case 115: /* if_command: IF compound_list THEN compound_list ELSE compound_list FI  */
! #line 1063 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_if_command ((yyvsp[-5].command), (yyvsp[-3].command), (yyvsp[-1].command)); }
! #line 3030 "y.tab.c"
      break;
!   case 116: /* if_command: IF compound_list THEN compound_list elif_clause FI  */
! #line 1065 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_if_command ((yyvsp[-4].command), (yyvsp[-2].command), (yyvsp[-1].command)); }
! #line 3036 "y.tab.c"
      break;
!   case 117: /* group_command: '{' compound_list '}'  */
! #line 1070 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_group_command ((yyvsp[-1].command)); }
! #line 3042 "y.tab.c"
      break;
!   case 118: /* arith_command: ARITH_CMD  */
! #line 1074 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_arith_command ((yyvsp[0].word_list)); }
! #line 3048 "y.tab.c"
      break;
!   case 119: /* cond_command: COND_START COND_CMD COND_END  */
! #line 1078 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[-1].command); }
! #line 3054 "y.tab.c"
      break;
!   case 120: /* elif_clause: ELIF compound_list THEN compound_list  */
! #line 1082 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_if_command ((yyvsp[-2].command), (yyvsp[0].command), (COMMAND *)NULL); }
! #line 3060 "y.tab.c"
      break;
!   case 121: /* elif_clause: ELIF compound_list THEN compound_list ELSE compound_list  */
! #line 1084 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_if_command ((yyvsp[-4].command), (yyvsp[-2].command), (yyvsp[0].command)); }
! #line 3066 "y.tab.c"
      break;
!   case 122: /* elif_clause: ELIF compound_list THEN compound_list elif_clause  */
! #line 1086 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_if_command ((yyvsp[-3].command), (yyvsp[-1].command), (yyvsp[0].command)); }
! #line 3072 "y.tab.c"
      break;
!   case 124: /* case_clause: case_clause_sequence pattern_list  */
! #line 1091 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyvsp[0].pattern)->next = (yyvsp[-1].pattern); (yyval.pattern) = (yyvsp[0].pattern); }
! #line 3078 "y.tab.c"
      break;
!   case 125: /* pattern_list: newline_list pattern ')' compound_list  */
! #line 1095 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (yyvsp[0].command)); }
! #line 3084 "y.tab.c"
      break;
!   case 126: /* pattern_list: newline_list pattern ')' newline_list  */
! #line 1097 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (COMMAND *)NULL); }
! #line 3090 "y.tab.c"
      break;
!   case 127: /* pattern_list: newline_list '(' pattern ')' compound_list  */
! #line 1099 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (yyvsp[0].command)); }
! #line 3096 "y.tab.c"
      break;
!   case 128: /* pattern_list: newline_list '(' pattern ')' newline_list  */
! #line 1101 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (COMMAND *)NULL); }
! #line 3102 "y.tab.c"
      break;
!   case 129: /* case_clause_sequence: pattern_list SEMI_SEMI  */
! #line 1105 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.pattern) = (yyvsp[-1].pattern); }
! #line 3108 "y.tab.c"
      break;
!   case 130: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_SEMI  */
! #line 1107 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); }
! #line 3114 "y.tab.c"
      break;
!   case 131: /* case_clause_sequence: pattern_list SEMI_AND  */
! #line 1109 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyvsp[-1].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[-1].pattern); }
! #line 3120 "y.tab.c"
      break;
!   case 132: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_AND  */
! #line 1111 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyvsp[-1].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); }
! #line 3126 "y.tab.c"
      break;
!   case 133: /* case_clause_sequence: pattern_list SEMI_SEMI_AND  */
! #line 1113 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyvsp[-1].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[-1].pattern); }
! #line 3132 "y.tab.c"
      break;
!   case 134: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_SEMI_AND  */
! #line 1115 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyvsp[-1].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); }
! #line 3138 "y.tab.c"
      break;
!   case 135: /* pattern: WORD  */
! #line 1119 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.word_list) = make_word_list ((yyvsp[0].word), (WORD_LIST *)NULL); }
! #line 3144 "y.tab.c"
      break;
!   case 136: /* pattern: pattern '|' WORD  */
! #line 1121 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.word_list) = make_word_list ((yyvsp[0].word), (yyvsp[-2].word_list)); }
! #line 3150 "y.tab.c"
      break;
!   case 137: /* compound_list: newline_list list0  */
! #line 1130 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = (yyvsp[0].command);
--- 3025,3174 ----
                (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
              }
! #line 3028 "y.tab.c"
      break;
!   case 114: /* coproc: COPROC simple_command  */
! #line 1069 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[0].command)));
                (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
              }
! #line 3037 "y.tab.c"
      break;
!   case 115: /* if_command: IF compound_list THEN compound_list FI  */
! #line 1076 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_if_command ((yyvsp[-3].command), (yyvsp[-1].command), (COMMAND *)NULL); }
! #line 3043 "y.tab.c"
      break;
!   case 116: /* if_command: IF compound_list THEN compound_list ELSE compound_list FI  */
! #line 1078 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_if_command ((yyvsp[-5].command), (yyvsp[-3].command), (yyvsp[-1].command)); }
! #line 3049 "y.tab.c"
      break;
!   case 117: /* if_command: IF compound_list THEN compound_list elif_clause FI  */
! #line 1080 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_if_command ((yyvsp[-4].command), (yyvsp[-2].command), (yyvsp[-1].command)); }
! #line 3055 "y.tab.c"
      break;
!   case 118: /* group_command: '{' compound_list '}'  */
! #line 1085 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_group_command ((yyvsp[-1].command)); }
! #line 3061 "y.tab.c"
      break;
!   case 119: /* arith_command: ARITH_CMD  */
! #line 1089 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_arith_command ((yyvsp[0].word_list)); }
! #line 3067 "y.tab.c"
      break;
!   case 120: /* cond_command: COND_START COND_CMD COND_END  */
! #line 1093 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[-1].command); }
! #line 3073 "y.tab.c"
      break;
!   case 121: /* elif_clause: ELIF compound_list THEN compound_list  */
! #line 1097 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_if_command ((yyvsp[-2].command), (yyvsp[0].command), (COMMAND *)NULL); }
! #line 3079 "y.tab.c"
      break;
!   case 122: /* elif_clause: ELIF compound_list THEN compound_list ELSE compound_list  */
! #line 1099 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_if_command ((yyvsp[-4].command), (yyvsp[-2].command), (yyvsp[0].command)); }
! #line 3085 "y.tab.c"
      break;
!   case 123: /* elif_clause: ELIF compound_list THEN compound_list elif_clause  */
! #line 1101 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = make_if_command ((yyvsp[-3].command), (yyvsp[-1].command), (yyvsp[0].command)); }
! #line 3091 "y.tab.c"
      break;
!   case 125: /* case_clause: case_clause_sequence pattern_list  */
! #line 1106 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyvsp[0].pattern)->next = (yyvsp[-1].pattern); (yyval.pattern) = (yyvsp[0].pattern); }
! #line 3097 "y.tab.c"
      break;
!   case 126: /* pattern_list: newline_list pattern ')' compound_list  */
! #line 1110 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (yyvsp[0].command)); }
! #line 3103 "y.tab.c"
      break;
!   case 127: /* pattern_list: newline_list pattern ')' newline_list  */
! #line 1112 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (COMMAND *)NULL); }
! #line 3109 "y.tab.c"
      break;
!   case 128: /* pattern_list: newline_list '(' pattern ')' compound_list  */
! #line 1114 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (yyvsp[0].command)); }
! #line 3115 "y.tab.c"
      break;
!   case 129: /* pattern_list: newline_list '(' pattern ')' newline_list  */
! #line 1116 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (COMMAND *)NULL); }
! #line 3121 "y.tab.c"
      break;
!   case 130: /* case_clause_sequence: pattern_list SEMI_SEMI  */
! #line 1120 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.pattern) = (yyvsp[-1].pattern); }
! #line 3127 "y.tab.c"
      break;
!   case 131: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_SEMI  */
! #line 1122 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); }
! #line 3133 "y.tab.c"
      break;
!   case 132: /* case_clause_sequence: pattern_list SEMI_AND  */
! #line 1124 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyvsp[-1].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[-1].pattern); }
! #line 3139 "y.tab.c"
      break;
!   case 133: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_AND  */
! #line 1126 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyvsp[-1].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); }
! #line 3145 "y.tab.c"
      break;
!   case 134: /* case_clause_sequence: pattern_list SEMI_SEMI_AND  */
! #line 1128 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyvsp[-1].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[-1].pattern); }
! #line 3151 "y.tab.c"
      break;
!   case 135: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_SEMI_AND  */
! #line 1130 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyvsp[-1].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); }
! #line 3157 "y.tab.c"
      break;
!   case 136: /* pattern: WORD  */
! #line 1134 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.word_list) = make_word_list ((yyvsp[0].word), (WORD_LIST *)NULL); }
! #line 3163 "y.tab.c"
      break;
!   case 137: /* pattern: pattern '|' WORD  */
! #line 1136 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.word_list) = make_word_list ((yyvsp[0].word), (yyvsp[-2].word_list)); }
! #line 3169 "y.tab.c"
      break;
!   case 138: /* compound_list: newline_list list0  */
! #line 1145 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = (yyvsp[0].command);
***************
*** 3157,3173 ****
                  gather_here_documents ();
               }
! #line 3160 "y.tab.c"
      break;
!   case 138: /* compound_list: newline_list list1  */
! #line 1136 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = (yyvsp[0].command);
              }
! #line 3168 "y.tab.c"
      break;
!   case 140: /* list0: list1 '&' newline_list  */
! #line 1143 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if ((yyvsp[-2].command)->type == cm_connection)
--- 3176,3192 ----
                  gather_here_documents ();
               }
! #line 3179 "y.tab.c"
      break;
!   case 139: /* compound_list: newline_list list1  */
! #line 1151 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = (yyvsp[0].command);
              }
! #line 3187 "y.tab.c"
      break;
!   case 141: /* list0: list1 '&' newline_list  */
! #line 1158 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if ((yyvsp[-2].command)->type == cm_connection)
***************
*** 3176,3196 ****
                  (yyval.command) = command_connect ((yyvsp[-2].command), (COMMAND *)NULL, '&');
              }
! #line 3179 "y.tab.c"
      break;
!   case 142: /* list1: list1 AND_AND newline_list list1  */
! #line 1154 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), AND_AND); }
! #line 3185 "y.tab.c"
      break;
!   case 143: /* list1: list1 OR_OR newline_list list1  */
! #line 1156 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), OR_OR); }
! #line 3191 "y.tab.c"
      break;
!   case 144: /* list1: list1 '&' newline_list list1  */
! #line 1158 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if ((yyvsp[-3].command)->type == cm_connection)
--- 3195,3215 ----
                  (yyval.command) = command_connect ((yyvsp[-2].command), (COMMAND *)NULL, '&');
              }
! #line 3198 "y.tab.c"
      break;
!   case 143: /* list1: list1 AND_AND newline_list list1  */
! #line 1169 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), AND_AND); }
! #line 3204 "y.tab.c"
      break;
!   case 144: /* list1: list1 OR_OR newline_list list1  */
! #line 1171 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), OR_OR); }
! #line 3210 "y.tab.c"
      break;
!   case 145: /* list1: list1 '&' newline_list list1  */
! #line 1173 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if ((yyvsp[-3].command)->type == cm_connection)
***************
*** 3199,3213 ****
                  (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '&');
              }
! #line 3202 "y.tab.c"
      break;
!   case 145: /* list1: list1 ';' newline_list list1  */
! #line 1165 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), ';'); }
! #line 3208 "y.tab.c"
      break;
!   case 146: /* list1: list1 '\n' newline_list list1  */
! #line 1167 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if (parser_state & PST_CMDSUBST)
--- 3218,3232 ----
                  (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '&');
              }
! #line 3221 "y.tab.c"
      break;
!   case 146: /* list1: list1 ';' newline_list list1  */
! #line 1180 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), ';'); }
! #line 3227 "y.tab.c"
      break;
!   case 147: /* list1: list1 '\n' newline_list list1  */
! #line 1182 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if (parser_state & PST_CMDSUBST)
***************
*** 3216,3248 ****
                  (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), ';');
              }
! #line 3219 "y.tab.c"
      break;
!   case 147: /* list1: pipeline_command  */
! #line 1174 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 3225 "y.tab.c"
      break;
!   case 150: /* list_terminator: '\n'  */
! #line 1182 "/usr/local/src/chet/src/bash/src/parse.y"
                  { (yyval.number) = '\n'; }
! #line 3231 "y.tab.c"
      break;
!   case 151: /* list_terminator: ';'  */
! #line 1184 "/usr/local/src/chet/src/bash/src/parse.y"
                  { (yyval.number) = ';'; }
! #line 3237 "y.tab.c"
      break;
!   case 152: /* list_terminator: yacc_EOF  */
! #line 1186 "/usr/local/src/chet/src/bash/src/parse.y"
                  { (yyval.number) = yacc_EOF; }
! #line 3243 "y.tab.c"
      break;
!   case 155: /* simple_list: simple_list1  */
! #line 1200 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = (yyvsp[0].command);
--- 3235,3267 ----
                  (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), ';');
              }
! #line 3238 "y.tab.c"
      break;
!   case 148: /* list1: pipeline_command  */
! #line 1189 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 3244 "y.tab.c"
      break;
!   case 151: /* list_terminator: '\n'  */
! #line 1197 "/usr/local/src/chet/src/bash/src/parse.y"
                  { (yyval.number) = '\n'; }
! #line 3250 "y.tab.c"
      break;
!   case 152: /* list_terminator: ';'  */
! #line 1199 "/usr/local/src/chet/src/bash/src/parse.y"
                  { (yyval.number) = ';'; }
! #line 3256 "y.tab.c"
      break;
!   case 153: /* list_terminator: yacc_EOF  */
! #line 1201 "/usr/local/src/chet/src/bash/src/parse.y"
                  { (yyval.number) = yacc_EOF; }
! #line 3262 "y.tab.c"
      break;
!   case 156: /* simple_list: simple_list1  */
! #line 1215 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = (yyvsp[0].command);
***************
*** 3259,3267 ****
                  }
              }
! #line 3262 "y.tab.c"
      break;
!   case 156: /* simple_list: simple_list1 '&'  */
! #line 1215 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if ((yyvsp[-1].command)->type == cm_connection)
--- 3278,3286 ----
                  }
              }
! #line 3281 "y.tab.c"
      break;
!   case 157: /* simple_list: simple_list1 '&'  */
! #line 1230 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if ((yyvsp[-1].command)->type == cm_connection)
***************
*** 3281,3289 ****
                  }
              }
! #line 3284 "y.tab.c"
      break;
!   case 157: /* simple_list: simple_list1 ';'  */
! #line 1233 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = (yyvsp[-1].command);
--- 3300,3308 ----
                  }
              }
! #line 3303 "y.tab.c"
      break;
!   case 158: /* simple_list: simple_list1 ';'  */
! #line 1248 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                (yyval.command) = (yyvsp[-1].command);
***************
*** 3300,3320 ****
                  }
              }
! #line 3303 "y.tab.c"
      break;
!   case 158: /* simple_list1: simple_list1 AND_AND newline_list simple_list1  */
! #line 1250 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), AND_AND); }
! #line 3309 "y.tab.c"
      break;
!   case 159: /* simple_list1: simple_list1 OR_OR newline_list simple_list1  */
! #line 1252 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), OR_OR); }
! #line 3315 "y.tab.c"
      break;
!   case 160: /* simple_list1: simple_list1 '&' simple_list1  */
! #line 1254 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if ((yyvsp[-2].command)->type == cm_connection)
--- 3319,3339 ----
                  }
              }
! #line 3322 "y.tab.c"
      break;
!   case 159: /* simple_list1: simple_list1 AND_AND newline_list simple_list1  */
! #line 1265 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), AND_AND); }
! #line 3328 "y.tab.c"
      break;
!   case 160: /* simple_list1: simple_list1 OR_OR newline_list simple_list1  */
! #line 1267 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), OR_OR); }
! #line 3334 "y.tab.c"
      break;
!   case 161: /* simple_list1: simple_list1 '&' simple_list1  */
! #line 1269 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if ((yyvsp[-2].command)->type == cm_connection)
***************
*** 3323,3349 ****
                  (yyval.command) = command_connect ((yyvsp[-2].command), (yyvsp[0].command), '&');
              }
! #line 3326 "y.tab.c"
      break;
!   case 161: /* simple_list1: simple_list1 ';' simple_list1  */
! #line 1261 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-2].command), (yyvsp[0].command), ';'); }
! #line 3332 "y.tab.c"
      break;
!   case 162: /* simple_list1: pipeline_command  */
! #line 1264 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 3338 "y.tab.c"
      break;
!   case 163: /* pipeline_command: pipeline  */
! #line 1268 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 3344 "y.tab.c"
      break;
!   case 164: /* pipeline_command: BANG pipeline_command  */
! #line 1270 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if ((yyvsp[0].command))
--- 3342,3368 ----
                  (yyval.command) = command_connect ((yyvsp[-2].command), (yyvsp[0].command), '&');
              }
! #line 3345 "y.tab.c"
      break;
!   case 162: /* simple_list1: simple_list1 ';' simple_list1  */
! #line 1276 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-2].command), (yyvsp[0].command), ';'); }
! #line 3351 "y.tab.c"
      break;
!   case 163: /* simple_list1: pipeline_command  */
! #line 1279 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 3357 "y.tab.c"
      break;
!   case 164: /* pipeline_command: pipeline  */
! #line 1283 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 3363 "y.tab.c"
      break;
!   case 165: /* pipeline_command: BANG pipeline_command  */
! #line 1285 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if ((yyvsp[0].command))
***************
*** 3351,3359 ****
                (yyval.command) = (yyvsp[0].command);
              }
! #line 3354 "y.tab.c"
      break;
!   case 165: /* pipeline_command: timespec pipeline_command  */
! #line 1276 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if ((yyvsp[0].command))
--- 3370,3378 ----
                (yyval.command) = (yyvsp[0].command);
              }
! #line 3373 "y.tab.c"
      break;
!   case 166: /* pipeline_command: timespec pipeline_command  */
! #line 1291 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                if ((yyvsp[0].command))
***************
*** 3361,3369 ****
                (yyval.command) = (yyvsp[0].command);
              }
! #line 3364 "y.tab.c"
      break;
!   case 166: /* pipeline_command: timespec list_terminator  */
! #line 1282 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                ELEMENT x;
--- 3380,3388 ----
                (yyval.command) = (yyvsp[0].command);
              }
! #line 3383 "y.tab.c"
      break;
!   case 167: /* pipeline_command: timespec list_terminator  */
! #line 1297 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                ELEMENT x;
***************
*** 3385,3393 ****
                parser_state &= ~PST_REDIRLIST;    /* make_simple_command sets this */
              }
! #line 3388 "y.tab.c"
      break;
!   case 167: /* pipeline_command: BANG list_terminator  */
! #line 1302 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                ELEMENT x;
--- 3404,3412 ----
                parser_state &= ~PST_REDIRLIST;    /* make_simple_command sets this */
              }
! #line 3407 "y.tab.c"
      break;
!   case 168: /* pipeline_command: BANG list_terminator  */
! #line 1317 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                ELEMENT x;
***************
*** 3410,3424 ****
                parser_state &= ~PST_REDIRLIST;    /* make_simple_command sets this */
              }
! #line 3413 "y.tab.c"
      break;
!   case 168: /* pipeline: pipeline '|' newline_list pipeline  */
! #line 1325 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '|'); }
! #line 3419 "y.tab.c"
      break;
!   case 169: /* pipeline: pipeline BAR_AND newline_list pipeline  */
! #line 1327 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
--- 3429,3443 ----
                parser_state &= ~PST_REDIRLIST;    /* make_simple_command sets this */
              }
! #line 3432 "y.tab.c"
      break;
!   case 169: /* pipeline: pipeline '|' newline_list pipeline  */
! #line 1340 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '|'); }
! #line 3438 "y.tab.c"
      break;
!   case 170: /* pipeline: pipeline BAR_AND newline_list pipeline  */
! #line 1342 "/usr/local/src/chet/src/bash/src/parse.y"
                          {
                /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
***************
*** 3443,3481 ****
                (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '|');
              }
! #line 3446 "y.tab.c"
      break;
!   case 170: /* pipeline: command  */
! #line 1350 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 3452 "y.tab.c"
      break;
!   case 171: /* timespec: TIME  */
! #line 1354 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.number) = CMD_TIME_PIPELINE; }
! #line 3458 "y.tab.c"
      break;
!   case 172: /* timespec: TIME TIMEOPT  */
! #line 1356 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
! #line 3464 "y.tab.c"
      break;
!   case 173: /* timespec: TIME TIMEIGN  */
! #line 1358 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
! #line 3470 "y.tab.c"
      break;
!   case 174: /* timespec: TIME TIMEOPT TIMEIGN  */
! #line 1360 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
! #line 3476 "y.tab.c"
      break;
! #line 3480 "y.tab.c"
        default: break;
--- 3462,3500 ----
                (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '|');
              }
! #line 3465 "y.tab.c"
      break;
!   case 171: /* pipeline: command  */
! #line 1365 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.command) = (yyvsp[0].command); }
! #line 3471 "y.tab.c"
      break;
!   case 172: /* timespec: TIME  */
! #line 1369 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.number) = CMD_TIME_PIPELINE; }
! #line 3477 "y.tab.c"
      break;
!   case 173: /* timespec: TIME TIMEOPT  */
! #line 1371 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
! #line 3483 "y.tab.c"
      break;
!   case 174: /* timespec: TIME TIMEIGN  */
! #line 1373 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
! #line 3489 "y.tab.c"
      break;
!   case 175: /* timespec: TIME TIMEOPT TIMEIGN  */
! #line 1375 "/usr/local/src/chet/src/bash/src/parse.y"
                          { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
! #line 3495 "y.tab.c"
      break;
! #line 3499 "y.tab.c"
        default: break;
***************
*** 3670,3674 ****
  }
! #line 1362 "/usr/local/src/chet/src/bash/src/parse.y"
--- 3689,3693 ----
  }
! #line 1377 "/usr/local/src/chet/src/bash/src/parse.y"
***************
*** 5209,5215 ****
    if (current_token < 0)
  #if defined (YYERRCODE) && !defined (YYUNDEF)
!     current_token = YYERRCODE;
  #else
!     current_token = YYerror;
  #endif
--- 5228,5234 ----
    if (current_token < 0)
  #if defined (YYERRCODE) && !defined (YYUNDEF)
!     current_token = EOF_Reached ? YYEOF : YYERRCODE;
  #else
!     current_token = EOF_Reached ? YYEOF : YYUNDEF;
  #endif
***************
*** 6006,6009 ****
--- 6026,6030 ----
        parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), close);
        EOF_Reached = 1;    /* XXX */
+       parser_state |= PST_NOERROR;  /* avoid redundant error message */
        return (&matched_pair_error);
      }
***************
*** 6468,6471 ****
--- 6487,6491 ----
        /* yyparse() has already called yyerror() and reset_parser() */
+       parser_state |= PST_NOERROR;
        return (&matched_pair_error);
      }
*** ../bash-5.2/patchlevel.h    2020-06-22 14:51:03.000000000 -0400
--- patchlevel.h    2020-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 17
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 18
  #endif /* _PATCHLEVEL_H_ */
components/shell/bash/patches/bash52-019.patch
New file
@@ -0,0 +1,66 @@
                 BASH PATCH REPORT
                 =================
Bash-Release:    5.2
Patch-ID:    bash52-019
Bug-Reported-by:    Steffen Nurpmeso <steffen@sdaoden.eu>
Bug-Reference-ID:    <20230116233547.2jFxL%steffen@sdaoden.eu>
Bug-Reference-URL:    https://lists.gnu.org/archive/html/bug-bash/2023-01/msg00057.html
Bug-Description:
There are some cases where the shell reaped a background (asynchronous) job
and would incorrectly try to set the terminal's process group back to the
shell's. In these cases it never set the terminal process group to that
jobs's process group initially, so resetting it is incorrect.
Patch (apply with `patch -p0'):
*** ../bash-5.2-patched/jobs.c    2022-12-13 12:09:02.000000000 -0500
--- jobs.c    2023-10-26 12:12:10.000000000 -0400
***************
*** 3078,3084 ****
       subshell.  Make sure subst.c:command_substitute uses the same
       conditions to determine whether or not it should undo this and
!      give the terminal to pipeline_pgrp. */
!
        if ((flags & JWAIT_NOTERM) == 0 && running_in_background == 0 &&
        (subshell_environment & (SUBSHELL_ASYNC|SUBSHELL_PIPE)) == 0)
      give_terminal_to (shell_pgrp, 0);
--- 3036,3046 ----
       subshell.  Make sure subst.c:command_substitute uses the same
       conditions to determine whether or not it should undo this and
!      give the terminal to pipeline_pgrp. We don't give the terminal
!      back to shell_pgrp if an async job in the background exits because
!      we never gave it to that job in the first place. An async job in
!      the foreground is one we started in the background and foregrounded
!      with `fg', and gave it the terminal. */
        if ((flags & JWAIT_NOTERM) == 0 && running_in_background == 0 &&
+       (job == NO_JOB || IS_ASYNC (job) == 0 || IS_FOREGROUND (job)) &&
        (subshell_environment & (SUBSHELL_ASYNC|SUBSHELL_PIPE)) == 0)
      give_terminal_to (shell_pgrp, 0);
***************
*** 3624,3627 ****
--- 3599,3603 ----
        get_tty_state ();
        save_stty = shell_tty_info;
+       jobs[job]->flags &= ~J_ASYNC;    /* no longer async */
        /* Give the terminal to this job. */
        if (IS_JOBCONTROL (job))
*** ../bash-5.2/patchlevel.h    2020-06-22 14:51:03.000000000 -0400
--- patchlevel.h    2020-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 18
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 19
  #endif /* _PATCHLEVEL_H_ */
components/shell/bash/patches/bash52-020.patch
New file
@@ -0,0 +1,53 @@
                 BASH PATCH REPORT
                 =================
Bash-Release:    5.2
Patch-ID:    bash52-020
Bug-Reported-by:    Dima Korobskiy <dkroot2@gmail.com>
Bug-Reference-ID:    <16664c2d-40ec-df33-b932-83db06e39a82@gmail.com>
Bug-Reference-URL:    https://lists.gnu.org/archive/html/bug-bash/2023-08/msg00125.html
Bug-Description:
The parser did not allow `time' to appear as the first reserved word in a
command substitution.
Patch (apply with `patch -p0'):
*** ../bash-5.2-patched/parse.y    Tue Dec 13 12:53:21 2022
--- parse.y    Fri Sep  1 10:36:28 2023
***************
*** 3151,3154 ****
--- 3151,3155 ----
      case TIMEOPT:    /* time -p time pipeline */
      case TIMEIGN:    /* time -p -- ... */
+     case DOLPAREN:
        return 1;
      default:
*** ../bash-5.2-patched/y.tab.c    Tue Dec 13 12:53:21 2022
--- y.tab.c    Fri Sep  1 10:36:44 2023
***************
*** 5466,5469 ****
--- 5466,5470 ----
      case TIMEOPT:    /* time -p time pipeline */
      case TIMEIGN:    /* time -p -- ... */
+     case DOLPAREN:
        return 1;
      default:
*** ../bash-5.2/patchlevel.h    2020-06-22 14:51:03.000000000 -0400
--- patchlevel.h    2020-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 19
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 20
  #endif /* _PATCHLEVEL_H_ */
components/shell/bash/patches/bash52-021.patch
New file
@@ -0,0 +1,61 @@
                 BASH PATCH REPORT
                 =================
Bash-Release:    5.2
Patch-ID:    bash52-021
Bug-Reported-by:    Norbert Lange <nolange79@gmail.com>
Bug-Reference-ID:    <CADYdroPZFdVZSL6KkhqkAPgKKopbsLQVSm7_TvLCwadL2=UAWw@mail.gmail.com>
Bug-Reference-URL:    https://lists.gnu.org/archive/html/bug-bash/2022-12/msg00046.html
Bug-Description:
There is an off-by-one error that causes command substitutions to fail when
they appear in a word expansion inside a here-document.
Patch (apply with `patch -p0'):
*** ../bash-5.2-patched/subst.c    2022-12-13 12:08:58.000000000 -0500
--- subst.c    2022-12-14 09:09:53.000000000 -0500
***************
*** 1694,1698 ****
        CHECK_STRING_OVERRUN (i, si, slen, c);
!       tlen = si - i - 1;
        RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 4, result_size, 64);
        result[result_index++] = c;
--- 1699,1703 ----
        CHECK_STRING_OVERRUN (i, si, slen, c);
!       tlen = si - i - 2;
        RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 4, result_size, 64);
        result[result_index++] = c;
***************
*** 1714,1718 ****
        CHECK_STRING_OVERRUN (i, si, slen, c);
!       tlen = si - i - 1;
        RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 4, result_size, 64);
        result[result_index++] = c;
--- 1719,1723 ----
        CHECK_STRING_OVERRUN (i, si, slen, c);
!       tlen = si - i - 2;
        RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 4, result_size, 64);
        result[result_index++] = c;
*** ../bash-5.2/patchlevel.h    2020-06-22 14:51:03.000000000 -0400
--- patchlevel.h    2020-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 20
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 21
  #endif /* _PATCHLEVEL_H_ */
components/shell/bash/pkg5
@@ -1,6 +1,5 @@
{
    "dependencies": [
        "SUNWcs",
        "library/ncurses",
        "shell/ksh93",
        "system/library"