mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-03-06 14:02:07 -08:00
Fix CC Mode fontification problem apparent in test file decls-6.cc.
* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): Recognize "bar (gnu);" as a declarator only when the construct is directly inside a class (etc.) called "bar". (c-directly-in-class-called-p): New function.
This commit is contained in:
parent
65885ccf29
commit
4e9014f025
1 changed files with 43 additions and 7 deletions
|
|
@ -7966,16 +7966,32 @@ comment at the start of cc-engine.el for more info."
|
|||
maybe-typeless
|
||||
backup-maybe-typeless
|
||||
(eq at-decl-or-cast t)
|
||||
;; Check whether we have "bar (gnu);" where we
|
||||
;; are directly inside a class (etc.) called "bar".
|
||||
(save-excursion
|
||||
(goto-char name-start)
|
||||
(not (memq (c-forward-type) '(nil maybe))))))
|
||||
(and
|
||||
(progn
|
||||
(goto-char name-start)
|
||||
(not (memq (c-forward-type) '(nil maybe))))
|
||||
(progn
|
||||
(goto-char id-start)
|
||||
(c-directly-in-class-called-p
|
||||
(buffer-substring
|
||||
type-start
|
||||
(progn
|
||||
(goto-char type-start)
|
||||
(c-forward-type)
|
||||
(c-backward-syntactic-ws)
|
||||
(point)))))))))
|
||||
;; Got a declaration of the form "foo bar (gnu);" or "bar
|
||||
;; (gnu);" where we've recognized "bar" as the type and "gnu"
|
||||
;; as the declarator. In this case it's however more likely
|
||||
;; that "bar" is the declarator and "gnu" a function argument
|
||||
;; or initializer (if `c-recognize-paren-inits' is set),
|
||||
;; since the parens around "gnu" would be superfluous if it's
|
||||
;; a declarator. Shift the type one step backward.
|
||||
;; as the declarator, and in the latter case, checked that
|
||||
;; "bar (gnu)" appears directly inside the class "bar". In
|
||||
;; this case it's however more likely that "bar" is the
|
||||
;; declarator and "gnu" a function argument or initializer
|
||||
;; (if `c-recognize-paren-inits' is set), since the parens
|
||||
;; around "gnu" would be superfluous if it's a declarator.
|
||||
;; Shift the type one step backward.
|
||||
(c-fdoc-shift-type-backward)))
|
||||
|
||||
;; Found no identifier.
|
||||
|
|
@ -9414,6 +9430,26 @@ comment at the start of cc-engine.el for more info."
|
|||
|
||||
kwd-start)))
|
||||
|
||||
(defun c-directly-in-class-called-p (name)
|
||||
;; Check whether point is directly inside a brace block which is the brace
|
||||
;; block of a class, struct, or union which is called NAME, a string.
|
||||
(let* ((paren-state (c-parse-state))
|
||||
(brace-pos (c-pull-open-brace paren-state))
|
||||
)
|
||||
(when (eq (char-after brace-pos) ?{)
|
||||
(goto-char brace-pos)
|
||||
(save-excursion
|
||||
; *c-looking-at-decl-block
|
||||
; containing-sexp goto-start &optional
|
||||
; limit)
|
||||
(when (and (c-looking-at-decl-block
|
||||
(c-pull-open-brace paren-state)
|
||||
nil)
|
||||
(looking-at c-class-key))
|
||||
(goto-char (match-end 1))
|
||||
(c-forward-syntactic-ws)
|
||||
(looking-at name))))))
|
||||
|
||||
(defun c-search-uplist-for-classkey (paren-state)
|
||||
;; Check if the closest containing paren sexp is a declaration
|
||||
;; block, returning a 2 element vector in that case. Aref 0
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue