From c2c50bd0a0778217d18ebe7ed36bbb88985a9736 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Fri, 15 Jun 2007 10:02:24 +0000 Subject: 23553: bit missed out --- ChangeLog | 3 ++- Doc/Zsh/arith.yo | 2 +- Src/math.c | 13 ++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index a9fd645f2..d6d0ec43a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ 2007-06-15 Peter Stephenson - * 23553: Doc/Zsh/arith.yo, Doc/Zsh/builtins.yo: was missed out. + * 23553: Doc/Zsh/arith.yo, Doc/Zsh/builtins.yo, Src/math.c: + should have been committed but wasn't. 2007-06-14 Peter Stephenson diff --git a/Doc/Zsh/arith.yo b/Doc/Zsh/arith.yo index f13cad987..98e83c1ae 100644 --- a/Doc/Zsh/arith.yo +++ b/Doc/Zsh/arith.yo @@ -22,7 +22,7 @@ matching `tt(RPAR()RPAR())' are treated as a quoted expression and arithmetic expansion performed as for an argument of tt(let). More precisely, `tt(LPAR()LPAR())var(...)tt(RPAR()RPAR())' is equivalent to `tt(let ")var(...)tt(")'. The return status is 0 if the arithmetic value -of the expression is non-zero, and 1 otherwise. +of the expression is non-zero, 1 if it is zero, and 2 if an error occurred. For example, the following statement diff --git a/Src/math.c b/Src/math.c index 66d57fd53..e1cde5f03 100644 --- a/Src/math.c +++ b/Src/math.c @@ -1061,8 +1061,19 @@ mathevall(char *s, int prek, char **ep) "BUG: math: wallabies roaming too freely in outback"); if (errflag) { + /* + * This used to set the return value to errflag. + * I don't understand how that could be useful; the + * caller doesn't know that's what's happened and + * may not get a value at all. + * Worse, we reset errflag in execarith() and setting + * this explicitly non-zero means a (( ... )) returns + * status 0 if there's an error. That surely can't + * be right. execarith() now detects an error and returns + * status 2. + */ ret.type = MN_INTEGER; - ret.u.l = errflag; + ret.u.l = 0; } else { if (stack[0].val.type == MN_UNSET) ret = getnparam(stack[0].lval); -- cgit v1.2.3