emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master a23974d: Correct c-parse-state-get-strategy for mov


From: Alan Mackenzie
Subject: [Emacs-diffs] master a23974d: Correct c-parse-state-get-strategy for moving HERE backward into a macro.
Date: Sat, 14 Jan 2017 12:41:14 +0000 (UTC)

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

    Correct c-parse-state-get-strategy for moving HERE backward into a macro.
    
    * list/progmodes/c-engine.el (c-parse-state-get-strategy): When HERE is 
below
    its previous value, we chose strategy 'forward, and the new HERE is in a
    (different) macro, ensure the returned START-POINT is not above the start of
    the macro.
---
 lisp/progmodes/cc-engine.el |   26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 3077e00..e84c4ce 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -2931,11 +2931,23 @@ comment at the start of cc-engine.el for more info."
   ;; o - ('BOD START-POINT) - scan forwards from START-POINT, which is at the
   ;;   top level.
   ;; o - ('IN-LIT nil) - point is inside the literal containing point-min.
-  (let ((cache-pos (c-get-cache-scan-pos here))        ; highest position 
below HERE in cache (or 1)
-       BOD-pos             ; position of 2nd BOD before HERE.
-       strategy            ; 'forward, 'backward, 'BOD, or 'IN-LIT.
-       start-point
-       how-far)                        ; putative scanning distance.
+  (let* ((in-macro-start             ; start of macro containing HERE or nil.
+         (save-excursion
+           (goto-char here)
+           (and (c-beginning-of-macro)
+                (point))))
+        (changed-macro-start
+         (and in-macro-start
+              (not (and c-state-old-cpp-beg
+                        (= in-macro-start c-state-old-cpp-beg)))
+              in-macro-start))
+        (cache-pos (c-get-cache-scan-pos (if changed-macro-start
+                                             (min changed-macro-start here)
+                                           here))) ; highest suitable position 
in cache (or 1)
+        BOD-pos                      ; position of 2nd BOD before HERE.
+        strategy                     ; 'forward, 'backward, 'BOD, or 'IN-LIT.
+        start-point
+        how-far)                       ; putative scanning distance.
     (setq good-pos (or good-pos (c-state-get-min-scan-pos)))
     (cond
      ((< here (c-state-get-min-scan-pos))
@@ -2945,7 +2957,9 @@ comment at the start of cc-engine.el for more info."
            how-far 0))
      ((<= good-pos here)
       (setq strategy 'forward
-           start-point (max good-pos cache-pos)
+           start-point (if changed-macro-start
+                           cache-pos
+                         (max good-pos cache-pos))
            how-far (- here start-point)))
      ((< (- good-pos here) (- here cache-pos)) ; FIXME!!! ; apply some sort of 
weighting.
       (setq strategy 'backward



reply via email to

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