summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Heerdegen <michael_heerdegen@web.de>2019-05-06 14:58:24 +0200
committerMichael Heerdegen <michael_heerdegen@web.de>2019-05-09 22:28:19 +0200
commiteda8ea685802e4e07e28351f65b5e24661a384fe (patch)
tree760227017b92535f5be54169864d82a3420646b2
parentd2bd9958bd7cf7d0e8fd7e405173cd62e979d251 (diff)
downloademacs-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.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.
,(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.