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.
This commit is contained in:
Michael Heerdegen 2019-05-06 14:58:24 +02:00
parent d2bd9958bd
commit eda8ea6858

View file

@ -392,18 +392,20 @@ The return value is the last VAL in the list.
,(funcall setter ,(funcall setter
`(cons (setq ,p (cons ,k ,v)) `(cons (setq ,p (cons ,k ,v))
,getter))))) ,getter)))))
(cond `(progn
((null remove) set-exp) ,(cond
((or (eql v default) ((null remove) set-exp)
(and (eq (car-safe v) 'quote) ((or (eql v default)
(eq (car-safe default) 'quote) (and (eq (car-safe v) 'quote)
(eql (cadr v) (cadr default)))) (eq (car-safe default) 'quote)
`(if ,p ,(funcall setter `(delq ,p ,getter)))) (eql (cadr v) (cadr default))))
(t `(if ,p ,(funcall setter `(delq ,p ,getter))))
`(cond (t
((not (eql ,default ,v)) ,set-exp) `(cond
(,p ,(funcall setter ((not (eql ,default ,v)) ,set-exp)
`(delq ,p ,getter))))))))))))))) (,p ,(funcall setter
`(delq ,p ,getter))))))
,v))))))))))
;;; Some occasionally handy extensions. ;;; Some occasionally handy extensions.