[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r107261: Fix infinite loop with long
From: |
Alan Mackenzie |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r107261: Fix infinite loop with long macros. |
Date: |
Sun, 12 Feb 2012 11:06:42 +0000 |
User-agent: |
Bazaar (2.3.1) |
------------------------------------------------------------
revno: 107261
committer: Alan Mackenzie <address@hidden>
branch nick: cc-mode
timestamp: Sun 2012-02-12 11:06:42 +0000
message:
Fix infinite loop with long macros.
modified:
lisp/ChangeLog
lisp/progmodes/cc-engine.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2012-02-12 05:10:30 +0000
+++ b/lisp/ChangeLog 2012-02-12 11:06:42 +0000
@@ -1,3 +1,8 @@
+2012-02-12 Alan Mackenzie <address@hidden>
+
+ Fix infinite loop with long macros.
+ * cc-engine.el (c-state-safe-place): Handle macros properly.
+
2012-02-12 Chong Yidong <address@hidden>
* window.el (display-buffer): Doc fix (Bug#10785).
=== modified file 'lisp/progmodes/cc-engine.el'
--- a/lisp/progmodes/cc-engine.el 2012-02-07 15:19:52 +0000
+++ b/lisp/progmodes/cc-engine.el 2012-02-12 11:06:42 +0000
@@ -2129,7 +2129,7 @@
(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 @@
;; 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))))
-
- (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)))
+ (or (null lit)
+ (prog1 (<= (cdr lit) here)
+ (setq npos (cdr lit)))))
+
+ ;; 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))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r107261: Fix infinite loop with long macros.,
Alan Mackenzie <=