1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-03 08:30:09 +00:00

Fix infinite loop with long macros.

This commit is contained in:
Alan Mackenzie 2012-02-12 11:06:42 +00:00
parent faccede13a
commit 0bc5886ace
2 changed files with 26 additions and 20 deletions

View File

@ -1,3 +1,8 @@
2012-02-12 Alan Mackenzie <acm@muc.de>
Fix infinite loop with long macros.
* cc-engine.el (c-state-safe-place): Handle macros properly.
2012-02-12 Chong Yidong <cyd@gnu.org>
* window.el (display-buffer): Doc fix (Bug#10785).

View File

@ -2129,7 +2129,7 @@ comment at the start of cc-engine.el for more info."
(widen)
(save-excursion
(let ((c c-state-nonlit-pos-cache)
pos npos lit macro-beg)
pos npos lit macro-beg macro-end)
;; Trim the cache to take account of buffer changes.
(while (and c (> (car c) c-state-nonlit-pos-cache-limit))
(setq c (cdr c)))
@ -2143,28 +2143,29 @@ comment at the start of cc-engine.el for more info."
;; Add an element to `c-state-nonlit-pos-cache' each iteration.
(and
(<= (setq npos (+ pos c-state-nonlit-pos-interval)) here)
;; Test for being in a literal.
(progn
(setq lit (car (cddr (c-state-pp-to-literal pos npos))))
(cond
((null lit)
(setq pos npos)
t)
((<= (cdr lit) here)
(setq pos (cdr lit))
t)
(t
(setq pos (car lit))
nil))))
(or (null lit)
(prog1 (<= (cdr lit) here)
(setq npos (cdr lit)))))
(goto-char pos)
(when (and (c-beginning-of-macro) (/= (point) pos))
(setq macro-beg (point))
(c-syntactic-end-of-macro)
(or (eobp) (forward-char))
(setq pos (if (<= (point) here)
(point)
macro-beg)))
(setq c-state-nonlit-pos-cache (cons pos c-state-nonlit-pos-cache)))
;; Test for being in a macro.
(progn
(goto-char npos)
(setq macro-beg
(and (c-beginning-of-macro) (/= (point) npos) (point)))
(when macro-beg
(c-syntactic-end-of-macro)
(or (eobp) (forward-char))
(setq macro-end (point)))
(or (null macro-beg)
(prog1 (<= macro-end here)
(setq npos macro-end)))))
(setq pos npos)
(setq c-state-nonlit-pos-cache (cons pos c-state-nonlit-pos-cache)))
(if (> pos c-state-nonlit-pos-cache-limit)
(setq c-state-nonlit-pos-cache-limit pos))