bash: Update the patches applied to bash

Message ID 20231218172911.2531726-1-adolf.belka@ipfire.org
State Staged
Commit de1cd0d54d5adf45ed3a447d0e3577ca51d71b1f
Headers
Series bash: Update the patches applied to bash |

Commit Message

Adolf Belka Dec. 18, 2023, 5:28 p.m. UTC
  - Update the patches to include patches 16 to 21
- Update of rootfile not required
- Changelog
	patch 21: fix for expanding command substitutions in a word expansion in a
		  here-document
	patch 20: allow time reserved word as first token in command substitution
	patch 19: fix case where background job set the terminal process group
	patch 18: fix for returning unknown tokens to the bison parser
	patch 17: fix for optimizing forks when using the . builtin in a subshell
	patch 16: fix for a crash if one of the expressions in an arithmetic for command
		  expands to NULL

Signed-off-by: Adolf Belka <adolf.belka@ipfire.org>
---
 lfs/bash                    |    2 +-
 src/patches/bash/bash52-016 |   47 +
 src/patches/bash/bash52-017 |   47 +
 src/patches/bash/bash52-018 | 3643 +++++++++++++++++++++++++++++++++++
 src/patches/bash/bash52-019 |   66 +
 src/patches/bash/bash52-020 |   53 +
 src/patches/bash/bash52-021 |   61 +
 7 files changed, 3918 insertions(+), 1 deletion(-)
 create mode 100644 src/patches/bash/bash52-016
 create mode 100644 src/patches/bash/bash52-017
 create mode 100644 src/patches/bash/bash52-018
 create mode 100644 src/patches/bash/bash52-019
 create mode 100644 src/patches/bash/bash52-020
 create mode 100644 src/patches/bash/bash52-021
  

Comments

Peter Müller Jan. 7, 2024, 1:47 p.m. UTC | #1
Reviewed-by: Peter Müller <peter.mueller@ipfire.org>

> - Update the patches to include patches 16 to 21
> - Update of rootfile not required
> - Changelog
> 	patch 21: fix for expanding command substitutions in a word expansion in a
> 		  here-document
> 	patch 20: allow time reserved word as first token in command substitution
> 	patch 19: fix case where background job set the terminal process group
> 	patch 18: fix for returning unknown tokens to the bison parser
> 	patch 17: fix for optimizing forks when using the . builtin in a subshell
> 	patch 16: fix for a crash if one of the expressions in an arithmetic for command
> 		  expands to NULL
> 
> Signed-off-by: Adolf Belka <adolf.belka@ipfire.org>
> ---
>  lfs/bash                    |    2 +-
>  src/patches/bash/bash52-016 |   47 +
>  src/patches/bash/bash52-017 |   47 +
>  src/patches/bash/bash52-018 | 3643 +++++++++++++++++++++++++++++++++++
>  src/patches/bash/bash52-019 |   66 +
>  src/patches/bash/bash52-020 |   53 +
>  src/patches/bash/bash52-021 |   61 +
>  7 files changed, 3918 insertions(+), 1 deletion(-)
>  create mode 100644 src/patches/bash/bash52-016
>  create mode 100644 src/patches/bash/bash52-017
>  create mode 100644 src/patches/bash/bash52-018
>  create mode 100644 src/patches/bash/bash52-019
>  create mode 100644 src/patches/bash/bash52-020
>  create mode 100644 src/patches/bash/bash52-021
> 
> diff --git a/lfs/bash b/lfs/bash
> index c7ef1f946..80d4f244b 100644
> --- a/lfs/bash
> +++ b/lfs/bash
> @@ -91,7 +91,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
>  	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash/bash-4.0-profile-1.patch
>  	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash/bash-3.2-ssh_source_bash.patch
>  	
> -	for i in $$(seq 1 15); do \
> +	for i in $$(seq 1 21); do \
>  	cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash52-$$(printf "%03d" "$${i}") || exit 1; \
>  	done
>  
> diff --git a/src/patches/bash/bash52-016 b/src/patches/bash/bash52-016
> new file mode 100644
> index 000000000..e9fbbef17
> --- /dev/null
> +++ b/src/patches/bash/bash52-016
> @@ -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_ */
> diff --git a/src/patches/bash/bash52-017 b/src/patches/bash/bash52-017
> new file mode 100644
> index 000000000..d28b504bf
> --- /dev/null
> +++ b/src/patches/bash/bash52-017
> @@ -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_ */
> diff --git a/src/patches/bash/bash52-018 b/src/patches/bash/bash52-018
> new file mode 100644
> index 000000000..d93f11281
> --- /dev/null
> +++ b/src/patches/bash/bash52-018
> @@ -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_ */
> diff --git a/src/patches/bash/bash52-019 b/src/patches/bash/bash52-019
> new file mode 100644
> index 000000000..165a55e62
> --- /dev/null
> +++ b/src/patches/bash/bash52-019
> @@ -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_ */
> diff --git a/src/patches/bash/bash52-020 b/src/patches/bash/bash52-020
> new file mode 100644
> index 000000000..0e76741e9
> --- /dev/null
> +++ b/src/patches/bash/bash52-020
> @@ -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_ */
> diff --git a/src/patches/bash/bash52-021 b/src/patches/bash/bash52-021
> new file mode 100644
> index 000000000..ade1fac01
> --- /dev/null
> +++ b/src/patches/bash/bash52-021
> @@ -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_ */
  

Patch

diff --git a/lfs/bash b/lfs/bash
index c7ef1f946..80d4f244b 100644
--- a/lfs/bash
+++ b/lfs/bash
@@ -91,7 +91,7 @@  $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash/bash-4.0-profile-1.patch
 	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash/bash-3.2-ssh_source_bash.patch
 	
-	for i in $$(seq 1 15); do \
+	for i in $$(seq 1 21); do \
 	cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash52-$$(printf "%03d" "$${i}") || exit 1; \
 	done
 
diff --git a/src/patches/bash/bash52-016 b/src/patches/bash/bash52-016
new file mode 100644
index 000000000..e9fbbef17
--- /dev/null
+++ b/src/patches/bash/bash52-016
@@ -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_ */
diff --git a/src/patches/bash/bash52-017 b/src/patches/bash/bash52-017
new file mode 100644
index 000000000..d28b504bf
--- /dev/null
+++ b/src/patches/bash/bash52-017
@@ -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_ */
diff --git a/src/patches/bash/bash52-018 b/src/patches/bash/bash52-018
new file mode 100644
index 000000000..d93f11281
--- /dev/null
+++ b/src/patches/bash/bash52-018
@@ -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_ */
diff --git a/src/patches/bash/bash52-019 b/src/patches/bash/bash52-019
new file mode 100644
index 000000000..165a55e62
--- /dev/null
+++ b/src/patches/bash/bash52-019
@@ -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_ */
diff --git a/src/patches/bash/bash52-020 b/src/patches/bash/bash52-020
new file mode 100644
index 000000000..0e76741e9
--- /dev/null
+++ b/src/patches/bash/bash52-020
@@ -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_ */
diff --git a/src/patches/bash/bash52-021 b/src/patches/bash/bash52-021
new file mode 100644
index 000000000..ade1fac01
--- /dev/null
+++ b/src/patches/bash/bash52-021
@@ -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_ */