about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBart Schaefer <barts@users.sourceforge.net>2000-05-27 08:32:58 +0000
committerBart Schaefer <barts@users.sourceforge.net>2000-05-27 08:32:58 +0000
commit47532f255ef58d9e0e5bd6c909b3a7008e35ee43 (patch)
tree17b92f13e2d0702a681957088ebfdb03458caa10
parent17aadf0338940aae841e67b50ae412687d6cc9ec (diff)
downloadzsh-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.c2
-rw-r--r--Src/parse.c7
-rw-r--r--Test/01grammar.ztst9
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