Fix C-M-a in a C function finding the start of a macro preceding it.
Also amend some pertinent documentation. This fixes bug #23818. * lisp/progmodes/cc-engine.el (c-beginning-of-decl-1): Also check for a virtual semicolon at a place where we check for other types of statement ends. * lisp/progmodes/cc-vars.el (c-macro-nacmes-with-semicolon): Remove from the doc string the bit saying that the variable is a prototype and liable to change. * doc/misc/cc-mode.texi (Macros with ;): Enhance, stating that configuring macros with semicolon can prevent C-M-a missing the beginning of defun.
This commit is contained in:
parent
4a2a1eba09
commit
681d3f1f58
3 changed files with 7 additions and 7 deletions
|
@ -6727,9 +6727,11 @@ Macros which needn't (or mustn't) be followed by a semicolon when you
|
|||
invoke them, @dfn{macros with semicolons}, are very common. These can
|
||||
cause @ccmode{} to parse the next line wrongly as a
|
||||
@code{statement-cont} (@pxref{Function Symbols}) and thus mis-indent
|
||||
it.
|
||||
it. At the top level, a macro invocation before a defun start can
|
||||
cause, for example, @code{c-beginning-of-defun} (@kbd{C-M-a}) not to
|
||||
find the correct start of the current function.
|
||||
|
||||
You can prevent this by specifying which macros have semicolons. It
|
||||
You can prevent these by specifying which macros have semicolons. It
|
||||
doesn't matter whether or not such a macro has a parameter list:
|
||||
|
||||
@defopt c-macro-names-with-semicolon
|
||||
|
|
|
@ -9298,7 +9298,8 @@ comment at the start of cc-engine.el for more info."
|
|||
(/= last-stmt-start (point))
|
||||
(progn
|
||||
(c-backward-syntactic-ws lim)
|
||||
(not (memq (char-before) '(?\; ?} ?: nil))))
|
||||
(not (or (memq (char-before) '(?\; ?} ?: nil))
|
||||
(c-at-vsemi-p))))
|
||||
(save-excursion
|
||||
(backward-char)
|
||||
(not (looking-at "\\s(")))
|
||||
|
|
|
@ -1702,10 +1702,7 @@ the regular expression must match only valid identifiers.
|
|||
|
||||
If you change this variable's value, call the function
|
||||
`c-make-macros-with-semi-re' to set the necessary internal
|
||||
variables.
|
||||
|
||||
Note that currently \(2008-11-04) this variable is a prototype,
|
||||
and is likely to disappear or change its form soon.")
|
||||
variables.")
|
||||
(make-variable-buffer-local 'c-macro-names-with-semicolon)
|
||||
(put 'c-macro-names-with-semicolon 'safe-local-variable
|
||||
#'c-string-or-string-list-p)
|
||||
|
|
Loading…
Add table
Reference in a new issue