emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master eaa5dc9: Fix C++ class initializers not always bein


From: Alan Mackenzie
Subject: [Emacs-diffs] master eaa5dc9: Fix C++ class initializers not always being fontified at mode start.
Date: Thu, 27 Jul 2017 14:05:07 -0400 (EDT)

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

    Fix C++ class initializers not always being fontified at mode start.
    
    The problem here happened when an "outer list" of declarations moved beyond 
an
    "inner list" containing class initializers.  These weren't being checked for
    by the code.
    
    Also, fix places in c-get-fontification-context where point is undefined.
    
    * lisp/progmodes/cc-fonts.el (c-get-fontification-context): when argument
    not-front-decl is set, test for class initializers.  Also, anchor point in
    places where it is moved and is otherwise undefined.
---
 lisp/progmodes/cc-fonts.el | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index e8552af..b35d33a 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -1231,13 +1231,16 @@ casts and declarations are fontified.  Used on level 2 
and higher."
          ;; Got a cached hit in some other type of arglist.
          (type
           (cons 'arglist t))
-         (not-front-decl
+         ((and not-front-decl
           ;; The point is within the range of a previously
           ;; encountered type decl expression, so the arglist
           ;; is probably one that contains declarations.
           ;; However, if `c-recognize-paren-inits' is set it
           ;; might also be an initializer arglist.
-          ;;
+               (or (not c-recognize-paren-inits)
+                   (save-excursion
+                     (goto-char match-pos)
+                     (not (c-back-over-member-initializers)))))
           ;; The result of this check is cached with a char
           ;; property on the match token, so that we can look
           ;; it up again when refontifying single lines in a
@@ -1248,17 +1251,21 @@ casts and declarations are fontified.  Used on level 2 
and higher."
          ;; Got an open paren preceded by an arith operator.
          ((and (eq (char-before match-pos) ?\()
                (save-excursion
+                 (goto-char match-pos)
                  (and (zerop (c-backward-token-2 2))
                       (looking-at c-arithmetic-op-regexp))))
           (cons nil nil))
          ;; In a C++ member initialization list.
          ((and (eq (char-before match-pos) ?,)
                (c-major-mode-is 'c++-mode)
-               (save-excursion (c-back-over-member-initializers)))
+               (save-excursion
+                 (goto-char match-pos)
+                 (c-back-over-member-initializers)))
           (c-put-char-property (1- match-pos) 'c-type 'c-not-decl)
           (cons 'not-decl nil))
          ;; At start of a declaration inside a declaration paren.
          ((save-excursion
+            (goto-char match-pos)
             (and (memq (char-before match-pos) '(?\( ?\,))
                  (c-go-up-list-backward match-pos)
                  (eq (char-after) ?\()



reply via email to

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