aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Heerdegen2019-05-06 14:58:24 +0200
committerMichael Heerdegen2019-05-09 22:28:19 +0200
commiteda8ea685802e4e07e28351f65b5e24661a384fe (patch)
tree760227017b92535f5be54169864d82a3420646b2
parentd2bd9958bd7cf7d0e8fd7e405173cd62e979d251 (diff)
downloademacs-eda8ea685802e4e07e28351f65b5e24661a384fe.tar.gz
emacs-eda8ea685802e4e07e28351f65b5e24661a384fe.zip
Fix alist-get gv setter not returning VAL
This fixes Bug#35546. * lisp/emacs-lisp/gv.el (alist-get): Make setter return the set value to preserve 'setf' semantics.
-rw-r--r--lisp/emacs-lisp/gv.el26
1 files changed, 14 insertions, 12 deletions
diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el
index 4ea3ce84fc6..bdd15748206 100644
--- a/lisp/emacs-lisp/gv.el
+++ b/lisp/emacs-lisp/gv.el
@@ -392,18 +392,20 @@ The return value is the last VAL in the list.
392 ,(funcall setter 392 ,(funcall setter
393 `(cons (setq ,p (cons ,k ,v)) 393 `(cons (setq ,p (cons ,k ,v))
394 ,getter))))) 394 ,getter)))))
395 (cond 395 `(progn
396 ((null remove) set-exp) 396 ,(cond
397 ((or (eql v default) 397 ((null remove) set-exp)
398 (and (eq (car-safe v) 'quote) 398 ((or (eql v default)
399 (eq (car-safe default) 'quote) 399 (and (eq (car-safe v) 'quote)
400 (eql (cadr v) (cadr default)))) 400 (eq (car-safe default) 'quote)
401 `(if ,p ,(funcall setter `(delq ,p ,getter)))) 401 (eql (cadr v) (cadr default))))
402 (t 402 `(if ,p ,(funcall setter `(delq ,p ,getter))))
403 `(cond 403 (t
404 ((not (eql ,default ,v)) ,set-exp) 404 `(cond
405 (,p ,(funcall setter 405 ((not (eql ,default ,v)) ,set-exp)
406 `(delq ,p ,getter))))))))))))))) 406 (,p ,(funcall setter
407 `(delq ,p ,getter))))))
408 ,v))))))))))
407 409
408 410
409;;; Some occasionally handy extensions. 411;;; Some occasionally handy extensions.