aboutsummaryrefslogtreecommitdiff
path: root/compat-29.el
diff options
context:
space:
mode:
authorDaniel Mendler <mail@daniel-mendler.de>2023-01-17 18:55:09 +0100
committerDaniel Mendler <mail@daniel-mendler.de>2023-01-17 19:04:06 +0100
commit97a492b4246b9a8ae8c710263e78735e0ae88c99 (patch)
treeb63eb8c5fc63371c13372e5e67db1aad30148c3f /compat-29.el
parent66fc73a53519907c6efc332705ed650888952bdb (diff)
compat-29: Add plist-get generalized variable
Diffstat (limited to 'compat-29.el')
-rw-r--r--compat-29.el18
1 files changed, 18 insertions, 0 deletions
diff --git a/compat-29.el b/compat-29.el
index adca217..27edaaa 100644
--- a/compat-29.el
+++ b/compat-29.el
@@ -120,6 +120,24 @@ Unibyte strings are converted to multibyte for comparison."
(throw 'found plist))
(setq plist (cddr plist))))))
+;;;; Defined in gv.el
+
+(compat-guard t
+ (gv-define-expander compat--plist-get ;; <compat-tests:plist-get-gv>
+ (lambda (do plist prop &optional predicate)
+ (macroexp-let2 macroexp-copyable-p key prop
+ (gv-letplace (getter setter) plist
+ (macroexp-let2 nil p `(cdr (compat--plist-member ,getter ,key ,predicate))
+ (funcall do
+ `(car ,p)
+ (lambda (val)
+ `(if ,p
+ (setcar ,p ,val)
+ ,(funcall setter
+ `(cons ,key (cons ,val ,getter)))))))))))
+ (unless (get 'plist-get 'gv-expander)
+ (put 'plist-get 'gv-expander (get 'compat--plist-get 'gv-expander))))
+
;;;; Defined in editfns.c
(compat-defun pos-bol (&optional n) ;; <compat-tests:pos-bol>