diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | Src/parse.c | 8 |
2 files changed, 14 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 5072e2f5c..1c99b4043 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-07-17 Peter Stephenson <p.w.stephenson@ntlworld.com> + + * users/14240: Src/parse.c: assignment before a function + definition should be an error, in common with other complex + functions and as documented. + 2009-07-14 Eric Blake <ebb9@byu.net> * Eric Blake: 27151: Src/builtin.c: Fix // handling in cd for @@ -11991,5 +11997,5 @@ ***************************************************** * This is used by the shell to define $ZSH_PATCHLEVEL -* $Revision: 1.4741 $ +* $Revision: 1.4742 $ ***************************************************** diff --git a/Src/parse.c b/Src/parse.c index 89ef68688..105312f6e 100644 --- a/Src/parse.c +++ b/Src/parse.c @@ -1546,7 +1546,7 @@ static int par_simple(int *complex, int nr) { int oecused = ecused, isnull = 1, r, argc = 0, p, isfunc = 0, sr = 0; - int c = *complex, nrediradd; + int c = *complex, nrediradd, assignments = 0; r = ecused; for (;;) { @@ -1586,6 +1586,7 @@ par_simple(int *complex, int nr) ecstr(name); ecstr(str); isnull = 0; + assignments = 1; } else if (tok == ENVARRAY) { int oldcmdpos = incmdpos, n, type2; @@ -1606,6 +1607,7 @@ par_simple(int *complex, int nr) YYERROR(oecused); incmdpos = oldcmdpos; isnull = 0; + assignments = 1; } else break; zshlex(); @@ -1667,8 +1669,12 @@ par_simple(int *complex, int nr) zlong oldlineno = lineno; int onp, so, oecssub = ecssub; + /* Error if too many function definitions at once */ if (!isset(MULTIFUNCDEF) && argc > 1) YYERROR(oecused); + /* Error if preceding assignments */ + if (assignments) + YYERROR(oecused); *complex = c; lineno = 0; |