emacs-diffs
[Top][All Lists]
Advanced

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

emacs-27 efc9d4f: Amend c-backward-sws better to handle multiline block


From: Alan Mackenzie
Subject: emacs-27 efc9d4f: Amend c-backward-sws better to handle multiline block comments
Date: Sun, 16 Feb 2020 12:48:29 -0500 (EST)

branch: emacs-27
commit efc9d4fe3ef256e6c546c1690bf7dd968f1fdac8
Author: Alan Mackenzie <address@hidden>
Commit: Alan Mackenzie <address@hidden>

    Amend c-backward-sws better to handle multiline block comments
    
    In particular, multiline comments lacking escaped newlines.
    
    * lisp/progmodes/cc-engine.el (c-backward-sws): Whilst searching backward 
for
    a putative beginning of macro, move back over block comments whose innards
    lack escaped newlines.
---
 lisp/progmodes/cc-engine.el | 35 +++++++++++++++++++++++++++--------
 1 file changed, 27 insertions(+), 8 deletions(-)

diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 0964c04..0c338fa 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -327,6 +327,8 @@ comment at the start of cc-engine.el for more info."
          (when (or (null lim)
                    (>= here lim))
            (save-match-data
+             ;; Note the similarity of the code here to some in
+             ;; `c-backward-sws'.
              (while
                  (progn
                    (while (eq (char-before (1- (point))) ?\\)
@@ -2461,17 +2463,34 @@ comment at the start of cc-engine.el for more info."
                   (/= cmt-skip-pos simple-ws-beg)
                   (c-beginning-of-macro))
              ;; Inside a cpp directive.  See if it should be skipped over.
-             (let ((cpp-beg (point)))
+             (let ((cpp-beg (point))
+                   pause pos)
 
-               ;; Move back over all line continuations in the region skipped
-               ;; over by `c-backward-comments'.  If we go past it then we
-               ;; started inside the cpp directive.
+               ;; Move back over all line continuations and block comments in
+               ;; the region skipped over by `c-backward-comments'.  If we go
+               ;; past it then we started inside the cpp directive.
                (goto-char simple-ws-beg)
                (beginning-of-line)
-               (while (and (> (point) cmt-skip-pos)
-                           (progn (backward-char)
-                                  (eq (char-before) ?\\)))
-                 (beginning-of-line))
+               ;; Note the similarity of the code here to some in
+               ;; `c-beginning-of-macro'.
+               (setq pause (point))
+               (while
+                   (progn
+                     (while (and (> (point) cmt-skip-pos)
+                                 (progn (backward-char)
+                                        (eq (char-before) ?\\)))
+                       (beginning-of-line))
+                     (setq pos (point))
+                     (when (and c-last-c-comment-end-on-line-re
+                                (re-search-forward
+                                 c-last-c-comment-end-on-line-re pause t))
+                       (goto-char (match-end 1))
+                       (if (c-backward-single-comment)
+                           (progn
+                             (beginning-of-line)
+                             (setq pause (point)))
+                         (goto-char pos)
+                         nil))))
 
                (if (< (point) cmt-skip-pos)
                    ;; Don't move past the cpp directive if we began inside



reply via email to

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