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:
parent
d57724a879
commit
457738ffba
@ -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,
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user