]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix miscellaneous glitches in cc-mode.el. Fixes debbugs#20245.
authorAlan Mackenzie <acm@muc.de>
Mon, 6 Apr 2015 22:20:16 +0000 (22:20 +0000)
committerAlan Mackenzie <acm@muc.de>
Mon, 6 Apr 2015 22:23:30 +0000 (22:23 +0000)
* progmodes/cc-mode.el (c-common-init): bind
\(before\|after\)-change-functions to nil around invocations of
c-get-state-before-change-functions and
c-before-font-lock-functions to prevent recursive invocations.
(c-neutralize-syntax-in-and-mark-CPP): On c-beginning-of-macro,
check that point has actually moved back.
(c-fl-decl-start): Check whether c-beginning-of-decl-1 has
actually found a boundary (as contrasted with hitting a search
limit).

lisp/ChangeLog
lisp/progmodes/cc-mode.el

index 38bb8afa15cd3258c7b1d392109f84cf31184ed2..1d25e8f870ebaf567ec277a006b9022da3d9fa29 100644 (file)
@@ -1,3 +1,17 @@
+2015-04-06  Alan Mackenzie  <acm@muc.de>
+
+       Fix miscellaneous glitches in cc-mode.el.  Fixes debbugs#20245.
+
+       * progmodes/cc-mode.el (c-common-init): bind
+       \(before\|after\)-change-functions to nil around invocations of
+       c-get-state-before-change-functions and
+       c-before-font-lock-functions to prevent recursive invocations.
+       (c-neutralize-syntax-in-and-mark-CPP): On c-beginning-of-macro,
+       check that point has actually moved back.
+       (c-fl-decl-start): Check whether c-beginning-of-decl-1 has
+       actually found a boundary (as contrasted with hitting a search
+       limit).
+
 2015-02-01  Alan Mackenzie  <acm@muc.de>
 
        CC Mode: Stop Font Lock forcing fontification from BOL.  Fixes
index d88fe702c59451cb30548f541e1b551a1804c7ac..1f58ba1ee9ba053ef935d063320cf75913ac7aa1 100644 (file)
@@ -659,13 +659,14 @@ compatible with old code; callers should always specify it."
     (setq c-new-BEG (point-min))
     (setq c-new-END (point-max))
     (save-excursion
-      (mapc (lambda (fn)
-             (funcall fn (point-min) (point-max)))
-           c-get-state-before-change-functions)
-      (mapc (lambda (fn)
-             (funcall fn (point-min) (point-max)
-                      (- (point-max) (point-min))))
-           c-before-font-lock-functions)))
+      (let (before-change-functions after-change-functions)
+       (mapc (lambda (fn)
+               (funcall fn (point-min) (point-max)))
+             c-get-state-before-change-functions)
+       (mapc (lambda (fn)
+               (funcall fn (point-min) (point-max)
+                        (- (point-max) (point-min))))
+             c-before-font-lock-functions))))
 
   (set (make-local-variable 'outline-regexp) "[^#\n\^M]")
   (set (make-local-variable 'outline-level) 'c-outline-level)
@@ -972,7 +973,9 @@ Note that the style variables are always made local to the buffer."
        (unless
            (or (save-excursion
                  (goto-char (match-beginning 0))
-                 (c-beginning-of-macro))
+                 (let ((here (point)))
+                   (and (save-match-data (c-beginning-of-macro))
+                        (< (point) here))))
                (progn
                  (setq pps-state
                        (parse-partial-sexp pps-position (point) nil nil pps-state)
@@ -1170,6 +1173,7 @@ Note that the style variables are always made local to the buffer."
        ;; Go to a less nested declaration each time round this loop.
        (and
         (eq (car (c-beginning-of-decl-1 bod-lim)) 'same)
+        (> (point) bod-lim)
         (progn (setq bo-decl (point))
                ;; Are we looking at a keyword such as "template" or
                ;; "typedef" which can decorate a type, or the type itself?