1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-22 07:09:54 +00:00

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:
Alan Mackenzie 2016-01-08 22:42:47 +00:00
parent d57724a879
commit 457738ffba
2 changed files with 33 additions and 16 deletions

View File

@ -654,23 +654,35 @@ right side of it."
;; Wrappers for common scan-lists cases, mainly because it's almost
;; impossible to get a feel for how that function works.
(defmacro c-go-list-forward ()
"Move backward across one balanced group of parentheses.
(defmacro c-go-list-forward (&optional pos limit)
"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
point unmoved."
`(c-safe (let ((endpos (scan-lists (point) 1 0)))
(goto-char endpos)
endpos)))
A LIMIT for the search may be given. The start position is assumed to be
before it."
(let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) 1 0)) (point))))
(if limit
`(save-restriction
(if ,limit
(narrow-to-region (point-min) ,limit))
,res)
res)))
(defmacro c-go-list-backward ()
"Move backward across one balanced group of parentheses.
(defmacro c-go-list-backward (&optional pos limit)
"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
point unmoved."
`(c-safe (let ((endpos (scan-lists (point) -1 0)))
(goto-char endpos)
endpos)))
A LIMIT for the search may be given. The start position is assumed to be
after it."
(let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) -1 0)) (point))))
(if limit
`(save-restriction
(if ,limit
(narrow-to-region ,limit (point-max)))
,res)
res)))
(defmacro c-up-list-forward (&optional pos limit)
"Return the first position after the list sexp containing POS,

View File

@ -5688,8 +5688,8 @@ comment at the start of cc-engine.el for more info."
(c-backward-token-2)
(setq c-restricted-<>-arglists
(and (not (looking-at c-opt-<>-sexp-key))
(progn (c-backward-syntactic-ws) ; to < or ,
(and (memq (char-before) '(?< ?,))
(progn (c-backward-syntactic-ws) ; to ( or ,
(and (memq (char-before) '(?\( ?,)) ; what about <?
(not (eq (c-get-char-property (point) 'c-type)
'c-decl-arg-start)))))))
(or (c-forward-<>-arglist nil)
@ -9106,6 +9106,11 @@ comment at the start of cc-engine.el for more info."
(goto-char containing-sexp)
(if (or (save-excursion
(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)))
(c-on-identifier)))
(and c-special-brace-lists