diff options
| author | Michael Heerdegen | 2019-05-06 14:58:24 +0200 |
|---|---|---|
| committer | Michael Heerdegen | 2019-05-09 22:28:19 +0200 |
| commit | eda8ea685802e4e07e28351f65b5e24661a384fe (patch) | |
| tree | 760227017b92535f5be54169864d82a3420646b2 | |
| parent | d2bd9958bd7cf7d0e8fd7e405173cd62e979d251 (diff) | |
| download | emacs-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.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. | |||
| 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. |