Fix an infloop in CC-mode (Bug#7595).

* progmodes/cc-cmds.el (c-forward-over-illiterals): Continue
parsing if we encounter a naked # (Bug#7595).
(c-beginning-of-statement): Avoid loop in locating the beginning
of a macro.
This commit is contained in:
Alan Mackenzie 2011-01-31 18:07:43 -05:00 committed by Chong Yidong
parent 3e46acf717
commit 3b95603fb5
2 changed files with 28 additions and 12 deletions

View file

@ -1,3 +1,10 @@
2011-01-31 Alan Mackenzie <acm@muc.de>
* progmodes/cc-cmds.el (c-forward-over-illiterals): Continue
parsing if we encounter a naked # (Bug#7595).
(c-beginning-of-statement): Avoid loop in locating the beginning
of a macro.
2011-01-31 Chong Yidong <cyd@stupidchicken.com>
* files.el (copy-directory): Fix arguments to recursive call.

View file

@ -2458,13 +2458,15 @@ function does not require the declaration to contain a brace block."
(goto-char last)
(throw 'done '(nil . nil)))
;; Stop if we encounter a preprocessor line.
((and (not macro-end)
;; Stop if we encounter a preprocessor line. Continue if we
;; hit a naked #
((and c-opt-cpp-prefix
(not macro-end)
(eq (char-after) ?#)
(= (point) (c-point 'boi)))
(goto-char last)
;(throw 'done (cons (eq (point) here) 'macro-boundary))) ; Changed 2003/3/26
(throw 'done '(t . macro-boundary)))
(if (= (point) here) ; Not a macro, therefore naked #.
(forward-char)
(throw 'done '(t . macro-boundary))))
;; Stop after a ';', '}', or "};"
((looking-at ";\\|};?")
@ -2578,14 +2580,21 @@ be more \"DWIM:ey\"."
(c-backward-syntactic-ws))
(or (bobp) (c-after-statement-terminator-p)))))))
;; Are we about to move backwards into or out of a
;; preprocessor command? If so, locate it's beginning.
;; preprocessor command? If so, locate its beginning.
(when (eq (cdr res) 'macro-boundary)
(save-excursion
(beginning-of-line)
(setq macro-fence
(and (not (bobp))
(progn (c-skip-ws-backward) (c-beginning-of-macro))
(point)))))
(setq macro-fence
(save-excursion
(if macro-fence
(progn
(end-of-line)
(and (not (eobp))
(progn (c-skip-ws-forward)
(c-beginning-of-macro))
(progn (c-end-of-macro)
(point))))
(and (not (eobp))
(c-beginning-of-macro)
(progn (c-end-of-macro) (point)))))))
;; Are we about to move backwards into a literal?
(when (memq (cdr res) '(macro-boundary literal))
(setq range (c-ascertain-preceding-literal)))