summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/gv.el
diff options
context:
space:
mode:
authorNaoya Yamashita <conao3@gmail.com>2020-09-09 09:52:39 +0900
committerStefan Monnier <monnier@iro.umontreal.ca>2020-09-09 13:50:05 -0400
commit66509f2ead423b814378a44a55c9f63dcb1e149b (patch)
tree9dc71ab6d1aabbabdd59caa8de422c11c71274f1 /lisp/emacs-lisp/gv.el
parent4064d074459ea3eebbc596b7ad645fab95a5b30f (diff)
downloademacs-66509f2ead423b814378a44a55c9f63dcb1e149b.tar.gz
Add gv-define-expander for plist-get
It is necessary to make plist-get as a generalized variable, and this definition allows user to use setf and other useful functions on plist-get. * lisp/emacs-lisp/gv.el: Add gv-define-expander for plist-get * lisp/emacs-lisp/gv-tests.el: Add new tests for plist-get
Diffstat (limited to 'lisp/emacs-lisp/gv.el')
-rw-r--r--lisp/emacs-lisp/gv.el11
1 files changed, 11 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el
index 78d86b9fc31..5470b8532fc 100644
--- a/lisp/emacs-lisp/gv.el
+++ b/lisp/emacs-lisp/gv.el
@@ -417,6 +417,17 @@ The return value is the last VAL in the list.
`(delq ,p ,getter))))))
,v))))))))))
+(gv-define-expander plist-get
+ (lambda (do plist prop)
+ (macroexp-let2 macroexp-copyable-p key prop
+ (gv-letplace (getter setter) plist
+ (macroexp-let2 nil p `(cdr (plist-member ,getter ,key))
+ (funcall do
+ `(car ,p)
+ (lambda (val)
+ `(if ,p
+ (setcar ,p ,val)
+ ,(funcall setter `(cons ,key (cons ,val ,getter)))))))))))
;;; Some occasionally handy extensions.