emacs-diffs
[Top][All Lists]
Advanced

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

master 433e157: Merge from origin/emacs-27


From: Glenn Morris
Subject: master 433e157: Merge from origin/emacs-27
Date: Mon, 28 Jun 2021 10:57:19 -0400 (EDT)

branch: master
commit 433e157899063741c4e047616e3b52ecc8ae6476
Merge: 7c93009 ef5f3d5
Author: Glenn Morris <rgm@gnu.org>
Commit: Glenn Morris <rgm@gnu.org>

    Merge from origin/emacs-27
    
    ef5f3d5ee7 (origin/emacs-27) C++ Mode: Handle new keywords static_cas...
---
 lisp/progmodes/cc-engine.el | 33 ++++++++++++++++++++++++++-------
 lisp/progmodes/cc-langs.el  |  3 ++-
 2 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 622d951..984a75c 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -6942,8 +6942,10 @@ comment at the start of cc-engine.el for more info."
        (c-go-list-forward))
       (when (equal (c-get-char-property (1- (point)) 'syntax-table)
                   c->-as-paren-syntax) ; should always be true.
-       (c-unmark-<->-as-paren (1- (point))))
-      (c-unmark-<->-as-paren pos))))
+       (c-unmark-<->-as-paren (1- (point)))
+       (c-truncate-lit-pos-cache (1- (point))))
+      (c-unmark-<->-as-paren pos)
+      (c-truncate-lit-pos-cache pos))))
 
 (defun c-clear->-pair-props (&optional pos)
   ;; POS (default point) is at a > character.  If it is marked with
@@ -6959,8 +6961,10 @@ comment at the start of cc-engine.el for more info."
        (c-go-up-list-backward))
       (when (equal (c-get-char-property (point) 'syntax-table)
                        c-<-as-paren-syntax) ; should always be true.
-       (c-unmark-<->-as-paren (point)))
-      (c-unmark-<->-as-paren pos))))
+       (c-unmark-<->-as-paren (point))
+       (c-truncate-lit-pos-cache (point)))
+      (c-unmark-<->-as-paren pos)
+      (c-truncate-lit-pos-cache pos))))
 
 (defun c-clear-<>-pair-props (&optional pos)
   ;; POS (default point) is at a < or > character.  If it has an
@@ -6993,7 +6997,8 @@ comment at the start of cc-engine.el for more info."
                 (equal (c-get-char-property (1- (point)) 'syntax-table)
                        c->-as-paren-syntax)) ; should always be true.
        (c-unmark-<->-as-paren (1- (point)))
-       (c-unmark-<->-as-paren pos))
+       (c-unmark-<->-as-paren pos)
+       (c-truncate-lit-pos-cache pos))
       t)))
 
 (defun c-clear->-pair-props-if-match-before (lim &optional pos)
@@ -7014,6 +7019,7 @@ comment at the start of cc-engine.el for more info."
                 (equal (c-get-char-property (point) 'syntax-table)
                        c-<-as-paren-syntax)) ; should always be true.
        (c-unmark-<->-as-paren (point))
+       (c-truncate-lit-pos-cache (point))
        (c-unmark-<->-as-paren pos))
       t)))
 
@@ -8057,13 +8063,14 @@ comment at the start of cc-engine.el for more info."
        ;; bracket arglist.  It's propagated through the return value
        ;; on successful completion.
        (c-record-found-types c-record-found-types)
+       (syntax-table-prop-on-< (c-get-char-property (point) 'syntax-table))
        ;; List that collects the positions after the argument
        ;; separating ',' in the arglist.
        arg-start-pos)
     ;; If the '<' has paren open syntax then we've marked it as an angle
     ;; bracket arglist before, so skip to the end.
     (if (and (not c-parse-and-markup-<>-arglists)
-            (c-get-char-property (point) 'syntax-table))
+            syntax-table-prop-on-<)
 
        (progn
          (forward-char)
@@ -8148,8 +8155,20 @@ comment at the start of cc-engine.el for more info."
                        (c-put-c-type-property (1- (car arg-start-pos))
                                               'c-<>-arg-sep)
                        (setq arg-start-pos (cdr arg-start-pos)))
+                     (when (and (not syntax-table-prop-on-<)
+                                (c-get-char-property (1- (point))
+                                                     'syntax-table))
+                       ;; Clear the now spuriously matching < of its
+                       ;; syntax-table property.  This could happen on
+                       ;; inserting "_cast" into "static <" with C-y.
+                       (save-excursion
+                         (and (c-go-list-backward)
+                              (eq (char-after) ?<)
+                              (c-truncate-lit-pos-cache (point))
+                              (c-unmark-<->-as-paren (point)))))
                      (c-mark-<-as-paren start)
-                     (c-mark->-as-paren (1- (point))))
+                     (c-mark->-as-paren (1- (point)))
+                     (c-truncate-lit-pos-cache start))
                    (setq res t)
                    nil))               ; Exit the loop.
 
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index f664849..35efadf 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -2743,7 +2743,8 @@ if this isn't nil."
 `c-recognize-<>-arglists' for details.  That language constant is
 assumed to be set if this isn't nil."
   t    nil
-  c++  '("template")
+  c++  '("template" "const_cast" "dynamic_cast" "reinterpret_cast"
+        "static_cast")
   idl  '("fixed" "string" "wstring"))
 
 (c-lang-defconst c-<>-sexp-kwds



reply via email to

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