[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/el-search b07d77c 019/332: avoid repeated expansion of
From: |
Stefan Monnier |
Subject: |
[elpa] externals/el-search b07d77c 019/332: avoid repeated expansion of pcase forms |
Date: |
Tue, 1 Dec 2020 15:48:02 -0500 (EST) |
branch: externals/el-search
commit b07d77c4646d0089b86076b7e7c7e0f5763cf8b7
Author: Michael Heerdegen <michael_heerdegen@web.de>
Commit: Michael Heerdegen <michael_heerdegen@web.de>
avoid repeated expansion of pcase forms
---
el-search.el | 25 +++++++++++++++----------
1 file changed, 15 insertions(+), 10 deletions(-)
diff --git a/el-search.el b/el-search.el
index 4467828..3e982bb 100644
--- a/el-search.el
+++ b/el-search.el
@@ -278,12 +278,16 @@ Don't move if already at beginning of a sexp."
(error (forward-char))))
res))
-(defun el-search--match-p (pattern expression)
- (funcall
- `(lambda ()
- (pcase ',expression
- (,pattern t)
- (_ nil)))))
+(defun el-search--matcher (pattern &rest body)
+ (let ((warning-suppress-log-types '((bytecomp))))
+ (byte-compile
+ `(lambda (expression)
+ (pcase expression
+ (,pattern ,@(or body (list t)))
+ (_ nil))))))
+
+(defun el-search--match-p (matcher expression)
+ (funcall matcher expression))
(defun el-search--wrap-pattern (pattern)
`(and ,el-search-this-expression-identifier ,pattern))
@@ -296,7 +300,7 @@ return nil (no error)."
;; For better performance we read complete top-level sexps and test
;; for matches. We enter top-level expressions in the buffer text
;; only when the test was successful.
- (let ((match-beg nil) (opoint (point)) current-expr)
+ (let ((matcher (el-search--matcher pattern)) (match-beg nil) (opoint
(point)) current-expr)
(if (catch 'no-match
(while (not match-beg)
(condition-case nil
@@ -304,7 +308,7 @@ return nil (no error)."
(end-of-buffer
(goto-char opoint)
(throw 'no-match t)))
- (if (el-search--match-p pattern current-expr)
+ (if (el-search--match-p matcher current-expr)
(setq match-beg (point)
opoint (point))
(forward-char))))
@@ -423,7 +427,8 @@ return nil (no error)."
(defun el-search-search-and-replace-pattern (pattern replacement &optional
mapping)
(let ((replace-all nil) (nbr-replaced 0) (nbr-skipped 0) (done nil)
- (el-search-keep-hl t) (opoint (point)))
+ (el-search-keep-hl t) (opoint (point))
+ (get-replacement (el-search--matcher pattern replacement)))
(unwind-protect
(while (and (not done) (el-search--search-pattern pattern t))
(setq opoint (point))
@@ -433,7 +438,7 @@ return nil (no error)."
(substring (apply #'buffer-substring-no-properties region))
(expr (read substring))
(replaced-this nil)
- (new-expr (funcall `(lambda () (pcase ',expr (,pattern
,replacement)))))
+ (new-expr (funcall get-replacement expr))
(to-insert (el-search--repair-replacement-layout
(el-search--print new-expr) (append mapping
read-mapping)))
(do-replace (lambda ()
- [elpa] branch externals/el-search created (now 6df1362), Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 70b8a75 001/332: new package el-search for searching elisp, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search d65ee60 003/332: * el-search.el: Fix first line convention, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 5399f80 002/332: el-search: some small improvements, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 1538d15 004/332: * el-search.el: Add missing footer, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 2e6622c 005/332: el-search: fix comment styles, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search fdb1f86 008/332: el-search: remove redundant :group specs from custom defs, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 1ed9974 011/332: el-search: bump version, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 41acd5d 010/332: el-search: some comment changes, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search b07d77c 019/332: avoid repeated expansion of pcase forms,
Stefan Monnier <=
- [elpa] externals/el-search cdd8cc1 020/332: new function el-search--end-of-sexp; use it, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 2f48cd0 024/332: call syntax functions less often for better efficiency, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search c7af755 014/332: rename a function, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 8fc7ae2 015/332: el-search: some comment changes, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search b00ca48 018/332: rename a function, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 29ec302 012/332: avoid looking-back in el-search--goto-next-sexp, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search e42804b 028/332: change a TODO entry; no code change, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search c1cfbc6 030/332: rename a local variable, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search fc6eca5 016/332: fix a condition in el-search--do-subsexps, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 632310e 021/332: rename a function, Stefan Monnier, 2020/12/01