]> git.eshelyaron.com Git - emacs.git/commitdiff
In c-\(go-\)?-\(up-\|down-\)?list-\(forward\|backward\) check limit isn't nil
authorAlan Mackenzie <acm@muc.de>
Sat, 20 Aug 2016 14:12:06 +0000 (14:12 +0000)
committerAlan Mackenzie <acm@muc.de>
Sat, 20 Aug 2016 14:12:06 +0000 (14:12 +0000)
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

index 64e57017174b570f7615d4badd5016a83b4d3691..ba9f1b69c505b59c5b2c562804be1bf7df2633a3 100644 (file)
@@ -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)))
 \f
 (defmacro c-beginning-of-defun-1 ()
   ;; Wrapper around beginning-of-defun.