[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/compat 7821117bec 4/4: compat-26: Only define gv expand
From: |
ELPA Syncer |
Subject: |
[elpa] externals/compat 7821117bec 4/4: compat-26: Only define gv expanders if needed |
Date: |
Fri, 6 Jan 2023 09:57:27 -0500 (EST) |
branch: externals/compat
commit 7821117bec2f6353cece59c27494a98dc3640d71
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>
compat-26: Only define gv expanders if needed
compat--alist-get is only defined on Emacs < 26.
---
compat-26.el | 62 ++++++++++++++++++++++++++++++++----------------------------
1 file changed, 33 insertions(+), 29 deletions(-)
diff --git a/compat-26.el b/compat-26.el
index bde9e8b8a6..bffee6473b 100644
--- a/compat-26.el
+++ b/compat-26.el
@@ -83,34 +83,36 @@ from the absolute start of the buffer, disregarding the
narrowing."
(if entry (cdr entry) default))
(alist-get key alist default remove)))
-(gv-define-expander compat--alist-get
- (lambda (do key alist &optional default remove testfn)
- (macroexp-let2 macroexp-copyable-p k key
- (gv-letplace (getter setter) alist
- (macroexp-let2 nil p `(compat--internal-assoc ,k ,getter ,testfn)
- (funcall do (if (null default) `(cdr ,p)
- `(if ,p (cdr ,p) ,default))
- (lambda (v)
- (macroexp-let2 nil v v
- (let ((set-exp
- `(if ,p (setcdr ,p ,v)
- ,(funcall setter
- `(cons (setq ,p (cons ,k ,v))
- ,getter)))))
- `(progn
- ,(cond
- ((null remove) set-exp)
- ((or (eql v default)
- (and (eq (car-safe v) 'quote)
- (eq (car-safe default) 'quote)
- (eql (cadr v) (cadr default))))
- `(if ,p ,(funcall setter `(delq ,p ,getter))))
- (t
- `(cond
- ((not (eql ,default ,v)) ,set-exp)
- (,p ,(funcall setter
- `(delq ,p ,getter))))))
- ,v))))))))))
+;; NOTE: Define gv expander only if `compat--alist-get' is defined.
+(when (version< emacs-version "26.1")
+ (gv-define-expander compat--alist-get
+ (lambda (do key alist &optional default remove testfn)
+ (macroexp-let2 macroexp-copyable-p k key
+ (gv-letplace (getter setter) alist
+ (macroexp-let2 nil p `(compat--internal-assoc ,k ,getter ,testfn)
+ (funcall do (if (null default) `(cdr ,p)
+ `(if ,p (cdr ,p) ,default))
+ (lambda (v)
+ (macroexp-let2 nil v v
+ (let ((set-exp
+ `(if ,p (setcdr ,p ,v)
+ ,(funcall setter
+ `(cons (setq ,p (cons ,k ,v))
+ ,getter)))))
+ `(progn
+ ,(cond
+ ((null remove) set-exp)
+ ((or (eql v default)
+ (and (eq (car-safe v) 'quote)
+ (eq (car-safe default) 'quote)
+ (eql (cadr v) (cadr default))))
+ `(if ,p ,(funcall setter `(delq ,p ,getter))))
+ (t
+ `(cond
+ ((not (eql ,default ,v)) ,set-exp)
+ (,p ,(funcall setter
+ `(delq ,p ,getter))))))
+ ,v)))))))))))
(compat-defun string-trim-left (string &optional regexp) ;; <OK>
"Trim STRING of leading string matching REGEXP.
@@ -503,7 +505,9 @@ If VALUE is nil, PROPERTY is removed from IMAGE."
;; :feature image
(plist-get (cdr image) property))
-(unless (get 'image-property 'gv-expander)
+(unless (eval-when-compile
+ (require 'image)
+ (get 'image-property 'gv-expander))
(gv-define-setter image-property (image property value)
(let ((image* (make-symbol "image"))
(property* (make-symbol "property"))