diff options
| author | Daniel Mendler <mail@daniel-mendler.de> | 2024-01-13 23:59:31 +0100 |
|---|---|---|
| committer | Daniel Mendler <mail@daniel-mendler.de> | 2024-01-13 23:59:31 +0100 |
| commit | 3313d69c52097bf2d0a3a4ab646c75bced42bf12 (patch) | |
| tree | d6b6678a6cd839f4a351dccf188498ead59ef112 | |
| parent | 9813be34000b0faec8ce2be7dce92fbc58a45f32 (diff) | |
| parent | 1bf572df407f3e40fa062810ac2e7342b4eca140 (diff) | |
Merge branch 'main' into emacs-30
| -rw-r--r-- | compat-29.el | 50 | ||||
| -rw-r--r-- | compat-tests.el | 10 |
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 b1fec85..29d0500 100644 --- a/compat-tests.el +++ b/compat-tests.el @@ -1050,7 +1050,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)) |
