summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--Src/parse.c8
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;