Correctly analyze brace arguments in templated C++ function declarations.
* lisp/progmodes/cc-defs.el (c-go-list-forward, c-go-list-backward): add POS and LIMIT parameters, like the other c-go-list-* functions have. * lisp/progmodes/cc-engine.el (c-restore-<>-properties): Check backwards for a ?\( rather than a ?<. (c-looking-at-inexpr-block): Handle names followed by template specifiers.
This commit is contained in:
parent
d57724a879
commit
457738ffba
2 changed files with 33 additions and 16 deletions
|
@ -654,23 +654,35 @@ right side of it."
|
||||||
;; Wrappers for common scan-lists cases, mainly because it's almost
|
;; Wrappers for common scan-lists cases, mainly because it's almost
|
||||||
;; impossible to get a feel for how that function works.
|
;; impossible to get a feel for how that function works.
|
||||||
|
|
||||||
(defmacro c-go-list-forward ()
|
(defmacro c-go-list-forward (&optional pos limit)
|
||||||
"Move backward across one balanced group of parentheses.
|
"Move forward across one balanced group of parentheses starting at POS or
|
||||||
|
point. Return POINT when we succeed, NIL when we fail. In the latter case,
|
||||||
|
leave point unmoved.
|
||||||
|
|
||||||
Return POINT when we succeed, NIL when we fail. In the latter case, leave
|
A LIMIT for the search may be given. The start position is assumed to be
|
||||||
point unmoved."
|
before it."
|
||||||
`(c-safe (let ((endpos (scan-lists (point) 1 0)))
|
(let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) 1 0)) (point))))
|
||||||
(goto-char endpos)
|
(if limit
|
||||||
endpos)))
|
`(save-restriction
|
||||||
|
(if ,limit
|
||||||
|
(narrow-to-region (point-min) ,limit))
|
||||||
|
,res)
|
||||||
|
res)))
|
||||||
|
|
||||||
(defmacro c-go-list-backward ()
|
(defmacro c-go-list-backward (&optional pos limit)
|
||||||
"Move backward across one balanced group of parentheses.
|
"Move backward across one balanced group of parentheses starting at POS or
|
||||||
|
point. Return POINT when we succeed, NIL when we fail. In the latter case,
|
||||||
|
leave point unmoved.
|
||||||
|
|
||||||
Return POINT when we succeed, NIL when we fail. In the latter case, leave
|
A LIMIT for the search may be given. The start position is assumed to be
|
||||||
point unmoved."
|
after it."
|
||||||
`(c-safe (let ((endpos (scan-lists (point) -1 0)))
|
(let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) -1 0)) (point))))
|
||||||
(goto-char endpos)
|
(if limit
|
||||||
endpos)))
|
`(save-restriction
|
||||||
|
(if ,limit
|
||||||
|
(narrow-to-region ,limit (point-max)))
|
||||||
|
,res)
|
||||||
|
res)))
|
||||||
|
|
||||||
(defmacro c-up-list-forward (&optional pos limit)
|
(defmacro c-up-list-forward (&optional pos limit)
|
||||||
"Return the first position after the list sexp containing POS,
|
"Return the first position after the list sexp containing POS,
|
||||||
|
|
|
@ -5688,8 +5688,8 @@ comment at the start of cc-engine.el for more info."
|
||||||
(c-backward-token-2)
|
(c-backward-token-2)
|
||||||
(setq c-restricted-<>-arglists
|
(setq c-restricted-<>-arglists
|
||||||
(and (not (looking-at c-opt-<>-sexp-key))
|
(and (not (looking-at c-opt-<>-sexp-key))
|
||||||
(progn (c-backward-syntactic-ws) ; to < or ,
|
(progn (c-backward-syntactic-ws) ; to ( or ,
|
||||||
(and (memq (char-before) '(?< ?,))
|
(and (memq (char-before) '(?\( ?,)) ; what about <?
|
||||||
(not (eq (c-get-char-property (point) 'c-type)
|
(not (eq (c-get-char-property (point) 'c-type)
|
||||||
'c-decl-arg-start)))))))
|
'c-decl-arg-start)))))))
|
||||||
(or (c-forward-<>-arglist nil)
|
(or (c-forward-<>-arglist nil)
|
||||||
|
@ -9106,6 +9106,11 @@ comment at the start of cc-engine.el for more info."
|
||||||
(goto-char containing-sexp)
|
(goto-char containing-sexp)
|
||||||
(if (or (save-excursion
|
(if (or (save-excursion
|
||||||
(c-backward-syntactic-ws lim)
|
(c-backward-syntactic-ws lim)
|
||||||
|
(while (and (eq (char-before) ?>)
|
||||||
|
(c-get-char-property (1- (point))
|
||||||
|
'syntax-table)
|
||||||
|
(c-go-list-backward nil lim))
|
||||||
|
(c-backward-syntactic-ws lim))
|
||||||
(and (> (point) (or lim (point-min)))
|
(and (> (point) (or lim (point-min)))
|
||||||
(c-on-identifier)))
|
(c-on-identifier)))
|
||||||
(and c-special-brace-lists
|
(and c-special-brace-lists
|
||||||
|
|
Loading…
Add table
Reference in a new issue