about summary refs log tree commit diff
path: root/Src
diff options
context:
space:
mode:
Diffstat (limited to 'Src')
-rw-r--r--Src/math.c13
1 files changed, 12 insertions, 1 deletions
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);