]> git.eshelyaron.com Git - emacs.git/commit
CC Mode: Refactor c-forward-delarator and callers
authorAlan Mackenzie <acm@muc.de>
Thu, 29 Sep 2022 15:22:42 +0000 (15:22 +0000)
committerAlan Mackenzie <acm@muc.de>
Thu, 29 Sep 2022 15:22:42 +0000 (15:22 +0000)
commita18918df0bd0ddd9c8b05b99c302e26b226af5d3
treef6dc68cd4a98a9ec0b89a07266f1c05f712b9d24
parent48c9f9d31d3eab756595c05cd2d3aced0fd856ca
CC Mode: Refactor c-forward-delarator and callers

c-forward-declarator now moves over a complete declarator, including any
arglist expression, but possibly not including certain C++20 constructs.

* lisp/progmodes/cc-engine.el (c-forward-decl-arglist): New function,
extracted from c-do-declarators.
(c-forward-declarator): Extend the result list by one element, denoting
whether the function parsed an argument list.  Insert special handling for a
C++ operator<op> construct.  If there is a parenthesis expression, and it is
an argument list, move forward over it.
(c-do-declarators): Append an optional parameter, cdd-anon-accepted
instructing the function to handle declarators without identifiers.  Extract
c-forward-decl-arglist.

* lisp/progmodes/cc-fonts.el (c-font-lock-declarators): New &optional
parameter accept-anon, as above.  Analyze and use the identifier location
returned by c-do-declarators, rather than using c-last-identifier-range.
(c-font-lock-single-decl): Determine accept-anon from the context, passing it
as argument to c-font-lock-declarators.

* lisp/progmodes/cc-langs.el (c-opt-identifier-prefix-key): Make a
c-lang-defvar out of this existing c-lang-defconst.

* lisp/progmodes/cc-mode.el (c-fl-decl-end): Adapt for the new
c-forward-declarator which now moves over arglists.  Amend better to handle
certain syntactically invalid constructs in C++.
lisp/progmodes/cc-engine.el
lisp/progmodes/cc-fonts.el
lisp/progmodes/cc-langs.el
lisp/progmodes/cc-mode.el