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

progmodes/cc-fonts.el (c-font-lock-declarations): Cache the result of

`c-beginning-of-decl-1' between invocations of a lambda function (Bug
#7265).
This commit is contained in:
Alan Mackenzie 2010-10-24 15:27:37 +00:00
parent de635afe1b
commit 10f5e3e60c
2 changed files with 29 additions and 11 deletions

View File

@ -1,3 +1,9 @@
2010-10-24 Alan Mackenzie <acm@muc.de>
* progmodes/cc-fonts.el (c-font-lock-declarations): Cache the
result of `c-beginning-of-decl-1' between invocations of a lambda
function (Bug #7265).
2010-10-24 Daiki Ueno <ueno@unixuser.org>
* epg-config.el (epg-gpg-program): Try to use "gpg2" if "gpg"

View File

@ -1045,6 +1045,9 @@ casts and declarations are fontified. Used on level 2 and higher."
;; The position of the next token after the closing paren of
;; the last detected cast.
last-cast-end
;; Start of containing declaration (if any); limit for searching
;; backwards for it.
decl-start decl-search-lim
;; The result from `c-forward-decl-or-cast-1'.
decl-or-cast
;; The maximum of the end positions of all the checked type
@ -1184,20 +1187,29 @@ casts and declarations are fontified. Used on level 2 and higher."
match-pos context last-cast-end))
(if (not decl-or-cast)
;; Are we at a declarator?
;; Try to go back to the declaration to check this.
(let (paren-state bod-res lim encl-pos is-typedef)
;; Are we at a declarator? Try to go back to the declaration
;; to check this. Note that `c-beginning-of-decl-1' is slow,
;; so we cache its result between calls.
(let (paren-state bod-res encl-pos is-typedef)
(goto-char start-pos)
(save-excursion
(setq lim (and (c-syntactic-skip-backward "^;" nil t)
(point))))
(unless (and decl-search-lim
(eq decl-search-lim
(save-excursion
(c-syntactic-skip-backward "^;" nil t)
(point))))
(setq decl-search-lim
(and (c-syntactic-skip-backward "^;" nil t) (point)))
(setq bod-res (car (c-beginning-of-decl-1 decl-search-lim)))
(if (and (eq bod-res 'same)
(progn
(c-backward-syntactic-ws)
(eq (char-before) ?\})))
(c-beginning-of-decl-1 decl-search-lim))
(setq decl-start (point))))
(save-excursion
(setq bod-res (car (c-beginning-of-decl-1 lim)))
(if (and (eq bod-res 'same)
(progn
(c-backward-syntactic-ws)
(eq (char-before) ?\})))
(c-beginning-of-decl-1 lim))
(goto-char decl-start)
;; We're now putatively at the declaration.
(setq paren-state (c-parse-state))
;; At top level or inside a "{"?