From 71eb63089686581963cd7a34aa39f7a901cff82e Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Thu, 25 Nov 2004 02:57:47 +0000 Subject: [PATCH] Don't always require newcomment. (imenu--generic-function): Call comment-normalize-vars if we have a comment syntax. Exit the loop if REGEXP matches the null string. Test comment-start as well as comment-start-skip when deciding whether to check for comments. --- lisp/imenu.el | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lisp/imenu.el b/lisp/imenu.el index d20dc4bccb8..32dda9fd3c6 100644 --- a/lisp/imenu.el +++ b/lisp/imenu.el @@ -62,8 +62,6 @@ ;;; Code: -(require 'newcomment) - (eval-when-compile (require 'cl)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -745,8 +743,8 @@ for modes which use `imenu--generic-function'. If it is not set, but ;;;###autoload (make-variable-buffer-local 'imenu-case-fold-search) -;; Originally "Built on some ideas that Erik Naggum -;; once posted to comp.emacs" but since substantially re-written. +;; This function can be called with quitting disabled, +;; so it needs to be careful never to loop! (defun imenu--generic-function (patterns) "Return an index of the current buffer as an alist. @@ -800,6 +798,9 @@ depending on PATTERNS." (unwind-protect ; for syntax table (save-match-data (set-syntax-table table) + (if (or comment-start comment-start-skip) + (comment-normalize-vars)) + ;; map over the elements of imenu-generic-expression ;; (typically functions, variables ...) (dolist (pat patterns) @@ -812,12 +813,16 @@ depending on PATTERNS." cs) ;; Go backwards for convenience of adding items in order. (goto-char (point-max)) - (while (re-search-backward regexp nil t) + (while (and (re-search-backward regexp nil t) + ;; Exit the loop if we get an empty match, + ;; because it means a bad regexp was specified. + (not (= (match-beginning 0) (match-end 0)))) (setq start (point)) (goto-char (match-end index)) (setq beg (match-beginning index)) - (setq cs (and comment-start-skip - (save-match-data (comment-beginning)))) + (setq cs (and (or comment-start 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) -- 2.39.2