1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

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:
Alan Mackenzie 2017-12-14 17:55:59 +00:00
parent 232c6465ce
commit f838210b01
2 changed files with 24 additions and 8 deletions

View file

@ -1925,16 +1925,32 @@ on one of the `*-decl-kwds' lists."
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-defconst c-type-modifier-kwds
"Type modifier keywords. These can occur almost anywhere in types
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."
(c-lang-defconst c-type-modifier-prefix-kwds
"Type modifier keywords which can appear in front of a type. These can
also occur almost anywhere in types 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 nil
c '("const" "restrict" "volatile")
c++ '("const" "noexcept" "volatile" "throw")
c++ '("const" "noexcept" "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
;; Adorned regexp matching `c-type-modifier-kwds', or nil in
;; languages without such keywords.