aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compat-29.el50
-rw-r--r--compat-tests.el10
2 files changed, 35 insertions, 25 deletions
diff --git a/compat-29.el b/compat-29.el
index cd01210..5b0a4df 100644
--- a/compat-29.el
+++ b/compat-29.el
@@ -102,38 +102,40 @@ Unibyte strings are converted to multibyte for comparison."
(compat-defun plist-get (plist prop &optional predicate) ;; <compat-tests:plist-get>
"Handle optional argument PREDICATE."
:extended t
- (if (or (null predicate) (eq predicate 'eq))
- (plist-get plist prop)
- (catch 'found
- (while (consp plist)
- (when (funcall predicate prop (car plist))
- (throw 'found (cadr plist)))
- (setq plist (cddr plist))))))
+ (pcase predicate
+ ((or `nil `eq) (plist-get plist prop))
+ (`equal (lax-plist-get plist prop))
+ (_ (catch 'found
+ (while (consp plist)
+ (when (funcall predicate prop (car plist))
+ (throw 'found (cadr plist)))
+ (setq plist (cddr plist)))))))
(compat-defun plist-put (plist prop val &optional predicate) ;; <compat-tests:plist-get>
"Handle optional argument PREDICATE."
:extended t
- (if (or (null predicate) (eq predicate 'eq))
- (plist-put plist prop val)
- (catch 'found
- (let ((tail plist))
- (while (consp tail)
- (when (funcall predicate prop (car tail))
- (setcar (cdr tail) val)
- (throw 'found plist))
- (setq tail (cddr tail))))
- (nconc plist (list prop val)))))
+ (pcase predicate
+ ((or `nil `eq) (plist-put plist prop val))
+ (`equal (lax-plist-put plist prop val))
+ (_ (catch 'found
+ (let ((tail plist))
+ (while (consp tail)
+ (when (funcall predicate prop (car tail))
+ (setcar (cdr tail) val)
+ (throw 'found plist))
+ (setq tail (cddr tail))))
+ (nconc plist (list prop val))))))
(compat-defun plist-member (plist prop &optional predicate) ;; <compat-tests:plist-get>
"Handle optional argument PREDICATE."
:extended t
- (if (or (null predicate) (eq predicate 'eq))
- (plist-member plist prop)
- (catch 'found
- (while (consp plist)
- (when (funcall predicate prop (car plist))
- (throw 'found plist))
- (setq plist (cddr plist))))))
+ (pcase predicate
+ ((or `nil `eq) (plist-member plist prop))
+ (_ (catch 'found
+ (while (consp plist)
+ (when (funcall predicate prop (car plist))
+ (throw 'found plist))
+ (setq plist (cddr plist)))))))
;;;; Defined in gv.el
diff --git a/compat-tests.el b/compat-tests.el
index 4616b8c..44f9228 100644
--- a/compat-tests.el
+++ b/compat-tests.el
@@ -1054,7 +1054,15 @@
(should-equal (compat-call plist-get list "first" #'string=) 10)
(should-equal (compat-call plist-get list "second" #'string=) 2)
(should (compat-call plist-member list "first" #'string=))
- (should-not (compat-call plist-member list "third" #'string=))))
+ (should-not (compat-call plist-member list "third" #'string=)))
+ (let (list)
+ (setq list (compat-call plist-put list "first" 1 #'equal))
+ (setq list (compat-call plist-put list "second" 2 #'equal))
+ (setq list (compat-call plist-put list "first" 10 #'equal))
+ (should-equal (compat-call plist-get list "first" #'equal) 10)
+ (should-equal (compat-call plist-get list "second" #'equal) 2)
+ (should (compat-call plist-member list "first" #'equal))
+ (should-not (compat-call plist-member list "third" #'equal))))
(ert-deftest compat-garbage-collect-maybe ()
(garbage-collect-maybe 10))