Fix misfontification of C++ member initialization list after "throw"
* lisp/progmodes/cc-engine.el (c-forward-type): Stop recognizing a "type" starting with "throw", by using c-opt-type-modifier-prefix-key. * lisp/progmodes/cc-langs.el (c-type-modifier-prefix-kwds): New lang const which, in C++, doesn't contain "throw", otherwise like c-type-modifier-kwds. (c-opt-type-modifier-prefix-key): New lang const and var, a regexp matching any keyword in the previous lang const.
This commit is contained in:
parent
232c6465ce
commit
f838210b01
2 changed files with 24 additions and 8 deletions
|
@ -7572,8 +7572,8 @@ comment at the start of cc-engine.el for more info."
|
||||||
|
|
||||||
;; Skip leading type modifiers. If any are found we know it's a
|
;; Skip leading type modifiers. If any are found we know it's a
|
||||||
;; prefix of a type.
|
;; prefix of a type.
|
||||||
(when c-opt-type-modifier-key ; e.g. "const" "volatile", but NOT "typedef"
|
(when c-opt-type-modifier-prefix-key ; e.g. "const" "volatile", but NOT "typedef"
|
||||||
(while (looking-at c-opt-type-modifier-key)
|
(while (looking-at c-opt-type-modifier-prefix-key)
|
||||||
(goto-char (match-end 1))
|
(goto-char (match-end 1))
|
||||||
(c-forward-syntactic-ws)
|
(c-forward-syntactic-ws)
|
||||||
(setq res 'prefix)))
|
(setq res 'prefix)))
|
||||||
|
|
|
@ -1925,16 +1925,32 @@ on one of the `*-decl-kwds' lists."
|
||||||
t (c-make-keywords-re t (c-lang-const c-type-prefix-kwds)))
|
t (c-make-keywords-re t (c-lang-const c-type-prefix-kwds)))
|
||||||
(c-lang-defvar c-type-prefix-key (c-lang-const c-type-prefix-key))
|
(c-lang-defvar c-type-prefix-key (c-lang-const c-type-prefix-key))
|
||||||
|
|
||||||
(c-lang-defconst c-type-modifier-kwds
|
(c-lang-defconst c-type-modifier-prefix-kwds
|
||||||
"Type modifier keywords. These can occur almost anywhere in types
|
"Type modifier keywords which can appear in front of a type. These can
|
||||||
but they don't build a type of themselves. Unlike the keywords on
|
also occur almost anywhere in types but they don't build a type of
|
||||||
`c-primitive-type-kwds', they are fontified with the keyword face and
|
themselves. Unlike the keywords on `c-primitive-type-kwds', they are
|
||||||
not the type face."
|
fontified with the keyword face and not the type face."
|
||||||
t nil
|
t nil
|
||||||
c '("const" "restrict" "volatile")
|
c '("const" "restrict" "volatile")
|
||||||
c++ '("const" "noexcept" "volatile" "throw")
|
c++ '("const" "noexcept" "volatile")
|
||||||
objc '("const" "volatile"))
|
objc '("const" "volatile"))
|
||||||
|
|
||||||
|
(c-lang-defconst c-opt-type-modifier-prefix-key
|
||||||
|
;; Adorned regexp matching `c-type-modifier-prefix-kwds', or nil in
|
||||||
|
;; languages without such keywords.
|
||||||
|
t (and (c-lang-const c-type-modifier-prefix-kwds)
|
||||||
|
(c-make-keywords-re t (c-lang-const c-type-modifier-prefix-kwds))))
|
||||||
|
(c-lang-defvar c-opt-type-modifier-prefix-key
|
||||||
|
(c-lang-const c-opt-type-modifier-prefix-key))
|
||||||
|
|
||||||
|
(c-lang-defconst c-type-modifier-kwds
|
||||||
|
"Type modifier keywords. These can occur almost anywhere in types except
|
||||||
|
at the start, but they don't build a type of themselves. Unlike the keywords
|
||||||
|
on `c-primitive-type-kwds', they are fontified with the keyword face and not
|
||||||
|
the type face."
|
||||||
|
t (c-lang-const c-type-modifier-prefix-kwds)
|
||||||
|
c++ (append (c-lang-const c-type-modifier-prefix-kwds) '("throw")))
|
||||||
|
|
||||||
(c-lang-defconst c-opt-type-modifier-key
|
(c-lang-defconst c-opt-type-modifier-key
|
||||||
;; Adorned regexp matching `c-type-modifier-kwds', or nil in
|
;; Adorned regexp matching `c-type-modifier-kwds', or nil in
|
||||||
;; languages without such keywords.
|
;; languages without such keywords.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue