]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/cc-defs.el
Correctly analyze brace arguments in templated C++ function declarations.
[gnu-emacs] / lisp / progmodes / cc-defs.el
index 77e949c59d40a279a98cd5fbd90b64800e755cc7..000995c5b5332cea6b0850fad53a96c88d2110a2 100644 (file)
@@ -654,23 +654,35 @@ right side of it."
 ;; Wrappers for common scan-lists cases, mainly because it's almost
 ;; impossible to get a feel for how that function works.
 
-(defmacro c-go-list-forward ()
-  "Move backward across one balanced group of parentheses.
-
-Return POINT when we succeed, NIL when we fail.  In the latter case, leave
-point unmoved."
-  `(c-safe (let ((endpos (scan-lists (point) 1 0)))
-            (goto-char endpos)
-            endpos)))
-
-(defmacro c-go-list-backward ()
-  "Move backward across one balanced group of parentheses.
-
-Return POINT when we succeed, NIL when we fail.  In the latter case, leave
-point unmoved."
-  `(c-safe (let ((endpos (scan-lists (point) -1 0)))
-            (goto-char endpos)
-            endpos)))
+(defmacro c-go-list-forward (&optional pos limit)
+  "Move forward across one balanced group of parentheses starting at POS or
+point.  Return POINT when we succeed, NIL when we fail.  In the latter case,
+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)))
+
+(defmacro c-go-list-backward (&optional pos limit)
+  "Move backward across one balanced group of parentheses starting at POS or
+point.  Return POINT when we succeed, NIL when we fail.  In the latter case,
+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)))
 
 (defmacro c-up-list-forward (&optional pos limit)
   "Return the first position after the list sexp containing POS,