Commit 43201d71 authored by Alan Mackenzie's avatar Alan Mackenzie

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.
parent a4ba426d
......@@ -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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment