diff options
author | Naoya Yamashita <conao3@gmail.com> | 2020-09-09 09:52:39 +0900 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2020-09-09 13:50:05 -0400 |
commit | 66509f2ead423b814378a44a55c9f63dcb1e149b (patch) | |
tree | 9dc71ab6d1aabbabdd59caa8de422c11c71274f1 /lisp/emacs-lisp/gv.el | |
parent | 4064d074459ea3eebbc596b7ad645fab95a5b30f (diff) | |
download | emacs-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.el | 11 |
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. |