[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 84282f0 08/12: avoid repeated expansion of pcase forms
From: |
Michael Heerdegen |
Subject: |
[elpa] master 84282f0 08/12: avoid repeated expansion of pcase forms |
Date: |
Sun, 11 Oct 2015 10:33:29 +0000 |
branch: master
commit 84282f023474b52bc6cd002f5ef07b9004fc1201
Author: Michael Heerdegen <address@hidden>
Commit: Michael Heerdegen <address@hidden>
avoid repeated expansion of pcase forms
---
packages/el-search/el-search.el | 25 +++++++++++++++----------
1 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/packages/el-search/el-search.el b/packages/el-search/el-search.el
index 4467828..3e982bb 100644
--- a/packages/el-search/el-search.el
+++ b/packages/el-search/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] master updated (c0489e7 -> 2d5b3ba), Michael Heerdegen, 2015/10/11
- [elpa] master 5640cd0 04/12: el-search: some comment changes, Michael Heerdegen, 2015/10/11
- [elpa] master 84282f0 08/12: avoid repeated expansion of pcase forms,
Michael Heerdegen <=
- [elpa] master e1903f4 01/12: avoid looking-back in el-search--goto-next-sexp, Michael Heerdegen, 2015/10/11
- [elpa] master 855461b 03/12: rename a function, Michael Heerdegen, 2015/10/11
- [elpa] master ca3fe58 07/12: rename a function, Michael Heerdegen, 2015/10/11
- [elpa] master fa900da 09/12: new function el-search--end-of-sexp; use it, Michael Heerdegen, 2015/10/11
- [elpa] master ae052ce 11/12: rename a local variable, Michael Heerdegen, 2015/10/11
- [elpa] master 06c2076 02/12: change default of el-search-this-expression-identifier, Michael Heerdegen, 2015/10/11
- [elpa] master 5dd08f2 05/12: fix a condition in el-search--do-subsexps, Michael Heerdegen, 2015/10/15
- [elpa] master 0f79c16 06/12: drop el-search-expression-contains-match-p, Michael Heerdegen, 2015/10/15
- [elpa] master 2d5b3ba 12/12: whitespace clean up, Michael Heerdegen, 2015/10/15
- [elpa] master 24f8de1 10/12: rename a function, Michael Heerdegen, 2015/10/15