Properly flush input after an error in backquotes in interactive mode.

For parsing an old-style backquote substitution (`...`),
a string "file" is used to store the contents of the
substitution (with the special backslash processing done).
If an error occurs, the shell cleans up all these files
(returning to the top level) and flush the top level
file. Erroneously, it first flushed the current file and
then cleaned up all extra files, so that the top level
file (i.e. the terminal) was not flushed.

Example (in interactive mode):
  echo `for` echo This should not be printed

Also noticeable in (in interactive mode):
  echo `(`
The old version prints an extraneous prompt.

Approved by:	ed (mentor)
This commit is contained in:
Jilles Tjoelker 2009-06-17 21:58:32 +00:00
parent f0553fdbc4
commit 3055b7c6ff
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=194406

View File

@ -118,9 +118,9 @@ INIT {
}
RESET {
popallfiles();
if (exception != EXSHELLPROC)
parselleft = parsenleft = 0; /* clear input buffer */
popallfiles();
}
SHELLPROC {