emacs-diffs
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]