]> git.eshelyaron.com Git - emacs.git/commitdiff
(imenu-default-create-index-function): Detect infinite
authorSam Steingold <sds@gnu.org>
Mon, 11 Jan 2010 20:53:23 +0000 (15:53 -0500)
committerSam Steingold <sds@gnu.org>
Mon, 11 Jan 2010 20:53:23 +0000 (15:53 -0500)
loops caused by imenu-prev-index-position-function.

lisp/ChangeLog
lisp/imenu.el

index 51687a045538be48f17d3f5f59a3d12387029e70..f8248d837b15f6dc95fc9f26fa3f0fb4b53eb1cb 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-11  Sam Steingold  <sds@gnu.org>
+
+       * imenu.el (imenu-default-create-index-function): Detect infinite
+       loops caused by imenu-prev-index-position-function.
+
 2010-01-11  Juanma Barranquero  <lekktu@gmail.com>
 
        * htmlfontify.el (htmlfontify-load-rgb-file)
index 77035c602d805f215ad646f1406550e39223464b..47c99ad1997368a6fea5784fdbf4010b815497c7 100644 (file)
@@ -596,7 +596,7 @@ See `imenu--index-alist' for the format of the index alist."
 ;;; Find all markers in alist and makes
 ;;; them point nowhere.
 ;;; The top-level call uses nil as the argument;
-;;; non-nil arguments are in recursivecalls.
+;;; non-nil arguments are in recursive calls.
 (defvar imenu--cleanup-seen)
 
 (defun imenu--cleanup (&optional alist)
@@ -684,12 +684,15 @@ The alternate method, which is the one most often used, is to call
   ;; in these major modes.  But save that change for later.
   (cond ((and imenu-prev-index-position-function
              imenu-extract-index-name-function)
-        (let ((index-alist '())
+        (let ((index-alist '()) (pos (point))
               prev-pos name)
           (goto-char (point-max))
           (imenu-progress-message prev-pos 0 t)
           ;; Search for the function
           (while (funcall imenu-prev-index-position-function)
+             (when (= pos (point))
+               (error "Infinite loop at %s:%d: imenu-prev-index-position-function does not move point" (buffer-name) pos))
+             (setq pos (point))
             (imenu-progress-message prev-pos nil t)
             (save-excursion
               (setq name (funcall imenu-extract-index-name-function)))