From 47968e06dabbd4d8f77036cb9cf5d633d728d241 Mon Sep 17 00:00:00 2001 From: Vinicius Jose Latorre Date: Wed, 1 Aug 2007 00:47:25 +0000 Subject: [PATCH] Fix infinite loop in python.el --- lisp/ChangeLog | 5 +++++ lisp/progmodes/python.el | 34 +++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c295150db71..fceef2353de 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2007-07-31 Paul Pogonyshev + + * progmodes/python.el (python-current-defun): Adjust to never fall + into infinite loop. + 2007-07-31 Stefan Monnier * pcvs.el (cvs-vc-command-advice): Handle the new fileset case. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index c3caa7e397c..9bef41a0878 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -1005,7 +1005,7 @@ don't move and return nil. Otherwise return t." (set-text-properties 0 (length function-name) nil function-name) function-name)) - + ;;;; Imenu. (defvar python-recursing) @@ -1828,21 +1828,25 @@ of current line." (save-excursion ;; Move up the tree of nested `class' and `def' blocks until we ;; get to zero indentation, accumulating the defined names. - (let ((start t) - (accum) + (let ((accum) (length -1)) - (while (and (or start (> (current-indentation) 0)) - (or (null length-limit) - (null (cdr accum)) - (< length length-limit))) - (setq start nil) - (python-beginning-of-block) - (end-of-line) - (beginning-of-defun) - (when (looking-at (rx (0+ space) (or "def" "class") (1+ space) - (group (1+ (or word (syntax symbol)))))) - (push (match-string 1) accum) - (setq length (+ length 1 (length (car accum)))))) + (catch 'done + (while (or (null length-limit) + (null (cdr accum)) + (< length length-limit)) + (setq start nil) + (let ((started-from (point))) + (python-beginning-of-block) + (end-of-line) + (beginning-of-defun) + (when (= (point) started-from) + (throw 'done nil))) + (when (looking-at (rx (0+ space) (or "def" "class") (1+ space) + (group (1+ (or word (syntax symbol)))))) + (push (match-string 1) accum) + (setq length (+ length 1 (length (car accum))))) + (when (= (current-indentation) 0) + (throw 'done nil)))) (when accum (when (and length-limit (> length length-limit)) (setcar accum "..")) -- 2.39.5