From 48b24c9b031ba593426d4e9980b360c273f57166 Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Fri, 29 Apr 2016 13:35:01 +0000 Subject: [PATCH] Correct indentation of ids in a C++ enum after a protection keyword. Also correct the misfontification of the last enum identifier. * lisp/progmodes/cc-engine.el (c-forward-keyword-prefixed-id): setq c-last-identifier-range to nil to ensure that only types recognized by this macro are set for fontification as types. (c-backward-typed-enum-colon): Function renamed from c-backward-colon-prefixed-type. On finding a colon in the backward search, check it is preceded by an identifier rather than a keyword. --- lisp/progmodes/cc-engine.el | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 62bc236706d..b2fe9b27e38 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -5806,6 +5806,7 @@ comment at the start of cc-engine.el for more info." ;; ;; This macro might do hidden buffer changes. `(let (res) + (setq c-last-identifier-range nil) (while (if (setq res ,(if (eq type 'type) `(c-forward-type) `(c-forward-name))) @@ -8928,11 +8929,11 @@ comment at the start of cc-engine.el for more info." (not (looking-at "="))))) b-pos))) -(defun c-backward-colon-prefixed-type () - ;; We're at the token after what might be a type prefixed with a colon. Try - ;; moving backward over this type and the colon. On success, return t and - ;; leave point before colon; on failure, leave point unchanged. Will clobber - ;; match data. +(defun c-backward-typed-enum-colon () + ;; We're at a "{" which might be the opening brace of a enum which is + ;; strongly typed (by a ":" followed by a type). If this is the case, leave + ;; point before the colon and return t. Otherwise leave point unchanged and return nil. + ;; Match data will be clobbered. (let ((here (point)) (colon-pos nil)) (save-excursion @@ -8941,7 +8942,10 @@ comment at the start of cc-engine.el for more info." (or (not (looking-at "\\s)")) (c-go-up-list-backward)) (cond - ((eql (char-after) ?:) + ((and (eql (char-after) ?:) + (save-excursion + (c-backward-syntactic-ws) + (c-on-identifier))) (setq colon-pos (point)) (forward-char) (c-forward-syntactic-ws) @@ -8965,7 +8969,7 @@ comment at the start of cc-engine.el for more info." (let ((here (point)) up-sexp-pos before-identifier) (when c-recognize-post-brace-list-type-p - (c-backward-colon-prefixed-type)) + (c-backward-typed-enum-colon)) (while (and (eq (c-backward-token-2) 0) -- 2.39.2