diff options
author | Michael Heerdegen <michael_heerdegen@web.de> | 2019-05-06 14:58:24 +0200 |
---|---|---|
committer | Michael Heerdegen <michael_heerdegen@web.de> | 2019-05-09 22:28:19 +0200 |
commit | eda8ea685802e4e07e28351f65b5e24661a384fe (patch) | |
tree | 760227017b92535f5be54169864d82a3420646b2 | |
parent | d2bd9958bd7cf7d0e8fd7e405173cd62e979d251 (diff) | |
download | emacs-eda8ea685802e4e07e28351f65b5e24661a384fe.tar.gz |
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.el | 26 |
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. ,(funcall setter `(cons (setq ,p (cons ,k ,v)) ,getter))))) - (cond - ((null remove) set-exp) - ((or (eql v default) - (and (eq (car-safe v) 'quote) - (eq (car-safe default) 'quote) - (eql (cadr v) (cadr default)))) - `(if ,p ,(funcall setter `(delq ,p ,getter)))) - (t - `(cond - ((not (eql ,default ,v)) ,set-exp) - (,p ,(funcall setter - `(delq ,p ,getter))))))))))))))) + `(progn + ,(cond + ((null remove) set-exp) + ((or (eql v default) + (and (eq (car-safe v) 'quote) + (eq (car-safe default) 'quote) + (eql (cadr v) (cadr default)))) + `(if ,p ,(funcall setter `(delq ,p ,getter)))) + (t + `(cond + ((not (eql ,default ,v)) ,set-exp) + (,p ,(funcall setter + `(delq ,p ,getter)))))) + ,v)))))))))) ;;; Some occasionally handy extensions. |