Fix an infinite loop in C++ Mode when we have "{ .... [ .... }"
* lisp/progmodes/cc-fonts.el (c-font-lock-c++-lambda-captures): In the inner `while' form's condition, check for "\\s)" rather than merely "\\]", so that the loop won't hang at a "terminating" paren of a different type (due to the c-syntactic-re-search-forward at the end of the loop stopping at such characters).
This commit is contained in:
parent
5e84dcefb4
commit
93c67f6b2c
1 changed files with 9 additions and 3 deletions
|
@ -1654,8 +1654,13 @@ casts and declarations are fontified. Used on level 2 and higher."
|
|||
(c-forward-syntactic-ws)))
|
||||
(c-backward-token-2)))
|
||||
|
||||
;; Go round the following loop once per captured item.
|
||||
(while (and (not (eq (char-after) ?\]))
|
||||
;; Go round the following loop once per captured item. We use "\\s)"
|
||||
;; rather than "\\]" here to avoid infinite looping in this situation:
|
||||
;; "unsigned items [] { [ }". The second "[" triggers this function,
|
||||
;; but if we don't match the "}" with an "\\s)", the
|
||||
;; `c-syntactic-re-search-forward' at the end of the loop fails to
|
||||
;; move forward over it, leaving point stuck at the "}".
|
||||
(while (and (not (looking-at "\\s)"))
|
||||
(< (point) limit))
|
||||
(if (eq (char-after) ?&)
|
||||
(progn (setq mode ?&)
|
||||
|
@ -1704,7 +1709,8 @@ casts and declarations are fontified. Used on level 2 and higher."
|
|||
(c-forward-syntactic-ws)))
|
||||
|
||||
(setq capture-default nil)
|
||||
(forward-char)))) ; over the terminating "]".
|
||||
(if (< (point) limit)
|
||||
(forward-char))))) ; over the terminating "]" or other close paren.
|
||||
nil)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue