changeset 58364:c8e69a3cb57f

(imenu--generic-function): Ensure we keep moving backward even if BEG isn't further back.
author Richard M. Stallman <rms@gnu.org>
date Sat, 20 Nov 2004 23:31:34 +0000
parents f8ac0eb0faa3
children 1b70e511be22
files lisp/imenu.el
diffstat 1 files changed, 11 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/imenu.el	Sat Nov 20 22:32:07 2004 +0000
+++ b/lisp/imenu.el	Sat Nov 20 23:31:34 2004 +0000
@@ -808,14 +808,18 @@
 		  (index (nth 2 pat))
 		  (function (nth 3 pat))
 		  (rest (nthcdr 4 pat))
+		  start
 		  cs)
 	      ;; Go backwards for convenience of adding items in order.
 	      (goto-char (point-max))
 	      (while (re-search-backward regexp nil t)
+		(setq start (point))
 		(goto-char (match-end index))
 		(setq beg (match-beginning index))
-		(if (setq cs (save-match-data (comment-beginning)))
-		    (goto-char cs)	; skip this one, it's in a comment
+		(setq cs (and comment-start-skip
+			      (save-match-data (comment-beginning))))
+		(if cs
+		    (goto-char (min cs beg)) ; skip this one, it's in a comment
 		  (goto-char beg)
 		  (imenu-progress-message prev-pos nil t)
 		  ;; Add this sort of submenu only when we've found an
@@ -837,7 +841,11 @@
 		    ;; Insert the item unless it is already present.
 		    (unless (member item (cdr menu))
 		      (setcdr menu
-			      (cons item (cdr menu)))))))))
+			      (cons item (cdr menu)))))
+		  ;; Move to the start of the entire match,
+		  ;; to ensure we keep moving backwards
+		  ;; as long as the match is nonempty.
+		  (goto-char start)))))
 	  (set-syntax-table old-table)))
     (imenu-progress-message prev-pos 100 t)
     ;; Sort each submenu by position.