Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: PATCH: functions completion missed -s and -x



On Wed, 16 May 2018 11:55:39 +0200
Oliver Kiddle <okiddle@xxxxxxxxxxx> wrote:
> On the subject of math functions, is it not inconsistent with
> everything else that redefining a math function results in a
> "function already exists" error rather than being silent. If I
> re-source my .zshrc, it is silent apart from these errors.

Yes, and this unusual interface doesn't appear to be documented, either.

pws

diff --git a/Src/builtin.c b/Src/builtin.c
index 931605c..1cba97d 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -3199,7 +3199,7 @@ bin_functions(char *name, char **argv, Options ops, int func)
 	pflags |= PRINT_NAMEONLY;
 
     if (OPT_MINUS(ops,'M') || OPT_PLUS(ops,'M')) {
-	MathFunc p, q;
+	MathFunc p, q, prev;
 	/*
 	 * Add/remove/list function as mathematical.
 	 */
@@ -3331,15 +3331,10 @@ bin_functions(char *name, char **argv, Options ops, int func)
 	    p->maxargs = maxargs;
 
 	    queue_signals();
-	    for (q = mathfuncs; q; q = q->next) {
+	    for (q = mathfuncs, prev = NULL; q; prev = q, q = q->next) {
 		if (!strcmp(q->name, funcname)) {
-		    unqueue_signals();
-		    zwarnnam(name, "-M %s: function already exists",
-			     funcname);
-		    zsfree(p->name);
-		    zsfree(p->module);
-		    zfree(p, sizeof(struct mathfunc));
-		    return 1;
+		    removemathfunc(prev, q);
+		    break;
 		}
 	    }
 



Messages sorted by: Reverse Date, Date, Thread, Author