C++ Mode: Handle new keywords static_cast, etc., wrt angle brackets
* lisp/progmodes/cc-langs.el (c-<>-arglist-kwds): Add const_cast, dynamic_cast, reinterpret_cast and static_cast into this lang const. * lisp/progmodes/cc-engine.el (c-clear-<-pair-props, c-clear->-pair-props) (c-clear-<-pair-props-if-match-after, c-clear->-pair-props-if-match-before) (c-forward-<>-arglist-recur): Invalidate caches with c-trunctate-lit-pos-cache. (c-forward-<>-arglist-recur): If in a matching <...> expression, the < has a syntax-table property, but the > not, remove that property.
This commit is contained in:
parent
7722b510aa
commit
ef5f3d5ee7
2 changed files with 28 additions and 8 deletions
|
@ -6868,8 +6868,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
|
||||
|
@ -6885,8 +6887,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
|
||||
|
@ -6919,7 +6923,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)
|
||||
|
@ -6940,6 +6945,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)))
|
||||
|
||||
|
@ -7980,13 +7986,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)
|
||||
|
@ -8071,8 +8078,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.
|
||||
|
||||
|
|
|
@ -2719,7 +2719,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
|
||||
|
|
Loading…
Add table
Reference in a new issue