diff options
author | Bart Schaefer <barts@users.sourceforge.net> | 2000-05-27 08:32:58 +0000 |
---|---|---|
committer | Bart Schaefer <barts@users.sourceforge.net> | 2000-05-27 08:32:58 +0000 |
commit | 47532f255ef58d9e0e5bd6c909b3a7008e35ee43 (patch) | |
tree | 17b92f13e2d0702a681957088ebfdb03458caa10 | |
parent | 17aadf0338940aae841e67b50ae412687d6cc9ec (diff) | |
download | zsh-47532f255ef58d9e0e5bd6c909b3a7008e35ee43.tar.gz zsh-47532f255ef58d9e0e5bd6c909b3a7008e35ee43.tar.xz zsh-47532f255ef58d9e0e5bd6c909b3a7008e35ee43.zip |
11606: Propagate parse errors out of parse_list() and parse_event(), and
test that it worked.
-rw-r--r-- | Src/init.c | 2 | ||||
-rw-r--r-- | Src/parse.c | 7 | ||||
-rw-r--r-- | Test/01grammar.ztst | 9 |
3 files changed, 11 insertions, 7 deletions
diff --git a/Src/init.c b/Src/init.c index 131b50606..5f0c98ca0 100644 --- a/Src/init.c +++ b/Src/init.c @@ -944,7 +944,7 @@ source(char *s) execode(prog, 1, 0); popheap(); } else - loop(0, 0); /* loop through the file to be sourced */ + loop(0, 0); /* loop through the file to be sourced */ sourcelevel--; /* restore the current shell state */ diff --git a/Src/parse.c b/Src/parse.c index 453e45ad0..5e90984ac 100644 --- a/Src/parse.c +++ b/Src/parse.c @@ -459,6 +459,7 @@ par_event(void) } } if (!r) { + tok = LEXERR; if (errflag) { yyerror(0); ecused--; @@ -491,10 +492,8 @@ parse_list(void) yylex(); init_parse(); par_list(&c); -#if 0 - if (tok == LEXERR) -#endif - if (tok != ENDINPUT) { + if (tok != ENDINPUT) { + tok = LEXERR; yyerror(0); return NULL; } diff --git a/Test/01grammar.ztst b/Test/01grammar.ztst index 361512e98..0ef1a1756 100644 --- a/Test/01grammar.ztst +++ b/Test/01grammar.ztst @@ -50,9 +50,8 @@ # # Tests for `Precommand Modifiers' # - - sh -c 'echo $0' + - $ZTST_testdir/../Src/zsh -fc "[[ \$0 = \"-$ZTST_testdir/../Src/zsh\" ]]" 0:`-' precommand modifier ->-sh echo f* noglob echo f* @@ -107,6 +106,12 @@ 0:`if ...' (iii) >false + if true; + : + fi +1d:`if ...' (iv) +?ZTST_execchunk:-1: parse error near `fi' + for name in word to term; do print $name done |