diff lisp/progmodes/cc-engine.el @ 92572:897b09fb6e10

(c-in-knr-argdecl): Limit number of paren/bracket pairs parsed, to solve performance problem.
author Alan Mackenzie <acm@muc.de>
date Fri, 07 Mar 2008 22:34:09 +0000
parents f991f10f15ec
children 1e3a407766b9
line wrap: on
line diff
--- a/lisp/progmodes/cc-engine.el	Fri Mar 07 22:31:59 2008 +0000
+++ b/lisp/progmodes/cc-engine.el	Fri Mar 07 22:34:09 2008 +0000
@@ -6336,7 +6336,8 @@
       ;; the searchable range.
       (let* ((macro-start (c-query-macro-start))
 	     (lim (max (or lim (point-min)) (or macro-start (point-min))))
-	     before-lparen after-rparen)
+	     before-lparen after-rparen
+	     (pp-count-out 20))	; Max number of paren/brace constructs before we give up
 	(narrow-to-region lim (c-point 'eol))
 
 	;; Search backwards for the defun's argument list.  We give up if we
@@ -6358,7 +6359,8 @@
 	;; {
 
 	(catch 'knr
-	  (while t ; go round one paren/bracket construct each time round.
+	  (while (> pp-count-out 0) ; go back one paren/bracket pair each time.
+	    (setq pp-count-out (1- pp-count-out))
 	    (c-syntactic-skip-backward "^)]}")
 	    (cond ((eq (char-before) ?\))
 		   (setq after-rparen (point)))