[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 43201d7: In c-\(go-\)?-\(up-\|down-\)?list-\(forwar
From: |
Alan Mackenzie |
Subject: |
[Emacs-diffs] master 43201d7: In c-\(go-\)?-\(up-\|down-\)?list-\(forward\|backward\) check limit isn't nil |
Date: |
Sat, 20 Aug 2016 14:15:24 +0000 (UTC) |
branch: master
commit 43201d7117e303fd6d3b78af1490021af130d7c1
Author: Alan Mackenzie <address@hidden>
Commit: Alan Mackenzie <address@hidden>
In c-\(go-\)?-\(up-\|down-\)?list-\(forward\|backward\) check limit isn't
nil
Check the limit both at macro expansion time (for a hard coded nil) and at
run
time in the generated code. Tidy up these macros generally.
* lisp/progmodes/cc-defs.el (c-safe-scan-lists): Check `limit' is present
and
not identically nil before generating a narrow-to-region call. Generate
code
to check `limit' is not nil at run time.
(c-go-list-forward, c-go-list-backward): Remove the generation of redundant
narrow-to-region, instead calling c-safe-scan-lists directly.
(c-go-up-list-forward, c-go-up-list-backward, c-go-down-list-forward)
(c-go-down-list-backward): Invoke the corresponding macros without the "go-"
to determine the destination position instead of generating a redundant
narrow-to-region.
---
lisp/progmodes/cc-defs.el | 68 ++++++++++++++-------------------------------
1 file changed, 21 insertions(+), 47 deletions(-)
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index 64e5701..ba9f1b6 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -640,15 +640,16 @@ right side of it."
(let ((res (if (featurep 'xemacs)
`(scan-lists ,from ,count ,depth nil t)
`(c-safe (scan-lists ,from ,count ,depth)))))
- (if limit
+ (if (and limit (not (eq limit nil)))
`(save-restriction
- ,(if (numberp count)
- (if (< count 0)
- `(narrow-to-region ,limit (point-max))
- `(narrow-to-region (point-min) ,limit))
- `(if (< ,count 0)
- (narrow-to-region ,limit (point-max))
- (narrow-to-region (point-min) ,limit)))
+ (when ,limit
+ ,(if (numberp count)
+ (if (< count 0)
+ `(narrow-to-region ,limit (point-max))
+ `(narrow-to-region (point-min) ,limit))
+ `(if (< ,count 0)
+ (narrow-to-region ,limit (point-max))
+ (narrow-to-region (point-min) ,limit))))
,res)
res)))
@@ -663,13 +664,8 @@ leave point unmoved.
A LIMIT for the search may be given. The start position is assumed to be
before it."
- (let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) 1 0))
(point))))
- (if limit
- `(save-restriction
- (if ,limit
- (narrow-to-region (point-min) ,limit))
- ,res)
- res)))
+ `(let ((dest (c-safe-scan-lists ,(or pos `(point)) 1 0 ,limit)))
+ (when dest (goto-char dest) dest)))
(defmacro c-go-list-backward (&optional pos limit)
"Move backward across one balanced group of parentheses starting at POS or
@@ -678,13 +674,8 @@ leave point unmoved.
A LIMIT for the search may be given. The start position is assumed to be
after it."
- (let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) -1 0))
(point))))
- (if limit
- `(save-restriction
- (if ,limit
- (narrow-to-region ,limit (point-max)))
- ,res)
- res)))
+ `(let ((dest (c-safe-scan-lists ,(or pos `(point)) -1 0 ,limit)))
+ (when dest (goto-char dest) dest)))
(defmacro c-up-list-forward (&optional pos limit)
"Return the first position after the list sexp containing POS,
@@ -725,12 +716,8 @@ position exists, otherwise nil is returned and the point
isn't moved.
A limit for the search may be given. The start position is assumed to
be before it."
- (let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) 1 1)) t)))
- (if limit
- `(save-restriction
- (narrow-to-region (point-min) ,limit)
- ,res)
- res)))
+ `(let ((dest (c-up-list-forward ,pos ,limit)))
+ (when dest (goto-char dest) t)))
(defmacro c-go-up-list-backward (&optional pos limit)
"Move the point to the position of the start of the list sexp containing POS,
@@ -739,12 +726,8 @@ position exists, otherwise nil is returned and the point
isn't moved.
A limit for the search may be given. The start position is assumed to
be after it."
- (let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) -1 1)) t)))
- (if limit
- `(save-restriction
- (narrow-to-region ,limit (point-max))
- ,res)
- res)))
+ `(let ((dest (c-up-list-backward ,pos ,limit)))
+ (when dest (goto-char dest) t)))
(defmacro c-go-down-list-forward (&optional pos limit)
"Move the point to the first position inside the first list sexp after POS,
@@ -753,12 +736,8 @@ exists, otherwise nil is returned and the point isn't
moved.
A limit for the search may be given. The start position is assumed to
be before it."
- (let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) 1 -1)) t)))
- (if limit
- `(save-restriction
- (narrow-to-region (point-min) ,limit)
- ,res)
- res)))
+ `(let ((dest (c-down-list-forward ,pos ,limit)))
+ (when dest (goto-char dest) t)))
(defmacro c-go-down-list-backward (&optional pos limit)
"Move the point to the last position inside the last list sexp before POS,
@@ -767,13 +746,8 @@ exists, otherwise nil is returned and the point isn't
moved.
A limit for the search may be given. The start position is assumed to
be after it."
- (let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) -1 -1)) t)))
- (if limit
- `(save-restriction
- (narrow-to-region ,limit (point-max))
- ,res)
- res)))
-
+ `(let ((dest (c-down-list-backward ,pos ,limit)))
+ (when dest (goto-char dest) t)))
(defmacro c-beginning-of-defun-1 ()
;; Wrapper around beginning-of-defun.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 43201d7: In c-\(go-\)?-\(up-\|down-\)?list-\(forward\|backward\) check limit isn't nil,
Alan Mackenzie <=