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:
parent
3e46acf717
commit
3b95603fb5
2 changed files with 28 additions and 12 deletions
|
@ -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.
|
||||
|
|
|
@ -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)))
|
||||
|
|
Loading…
Add table
Reference in a new issue