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:
parent
d2bd9958bd
commit
eda8ea6858
1 changed files with 14 additions and 12 deletions
|
@ -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.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue