[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 681d3f1: Fix C-M-a in a C function finding the star

From: Alan Mackenzie
Subject: [Emacs-diffs] master 681d3f1: Fix C-M-a in a C function finding the start of a macro preceding it.
Date: Wed, 29 Jun 2016 20:21:07 +0000 (UTC)

branch: master
commit 681d3f1f582d9b549f41ef1eacff42abb98f878d
Author: Alan Mackenzie <address@hidden>
Commit: Alan Mackenzie <address@hidden>

    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 
    * 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
    * doc/misc/cc-mode.texi (Macros with ;): Enhance, stating that configuring
    macros with semicolon can prevent C-M-a missing the beginning of defun.
 doc/misc/cc-mode.texi       |    6 ++++--
 lisp/progmodes/cc-engine.el |    3 ++-
 lisp/progmodes/cc-vars.el   |    5 +----
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi
index 82f8cbc..f311ec8 100644
--- a/doc/misc/cc-mode.texi
+++ b/doc/misc/cc-mode.texi
@@ -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.  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
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 4bc4056..75f07e3 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -9298,7 +9298,8 @@ comment at the start of cc-engine.el for more info."
                (/= last-stmt-start (point))
                  (c-backward-syntactic-ws lim)
-                 (not (memq (char-before) '(?\; ?} ?: nil))))
+                 (not (or (memq (char-before) '(?\; ?} ?: nil))
+                          (c-at-vsemi-p))))
                  (not (looking-at "\\s(")))
diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el
index f03aec2..7a6f4ba 100644
--- a/lisp/progmodes/cc-vars.el
+++ b/lisp/progmodes/cc-vars.el
@@ -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
-Note that currently \(2008-11-04) this variable is a prototype,
-and is likely to disappear or change its form soon.")
 (make-variable-buffer-local 'c-macro-names-with-semicolon)
 (put 'c-macro-names-with-semicolon 'safe-local-variable

reply via email to

[Prev in Thread] Current Thread [Next in Thread]