summaryrefslogtreecommitdiff
path: root/lisp/progmodes/cc-mode.el
diff options
context:
space:
mode:
authorAlan Mackenzie <acm@muc.de>2020-12-30 18:31:56 +0000
committerAlan Mackenzie <acm@muc.de>2020-12-30 18:31:56 +0000
commit059f1863a268d6e9bd2c9b8e05e8546d4dd8f50b (patch)
treeb5b18fface6a5d732b9ee7a3bbcc3e52d24d3508 /lisp/progmodes/cc-mode.el
parentc4c8da67e85c92a296426e3fd39a15ffb80b0b41 (diff)
downloademacs-059f1863a268d6e9bd2c9b8e05e8546d4dd8f50b.tar.gz
CC Mode: correct the handling of empty strings
In particular, have the macro cache invalidated after its last use in c-before-change. * lisp/progmodes/cc-langs.el (c-get-state-before-change-functions): Remove c-invalidate-macro-cache from the entries it's in, moving it to.... * lisp/progmodes/cc-mode.el (c-before-change): Call c-invalidate-macro-cache directly from the functions, after the call to c-invalidate-state-cache.
Diffstat (limited to 'lisp/progmodes/cc-mode.el')
-rw-r--r--lisp/progmodes/cc-mode.el6
1 files changed, 5 insertions, 1 deletions
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 2f1885e5b61..d4c868dd1fc 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -2065,7 +2065,11 @@ Note that this is a strict tail, so won't match, e.g. \"0x....\".")
;; The following must be done here rather than in `c-after-change'
;; because newly inserted parens would foul up the invalidation
;; algorithm.
- (c-invalidate-state-cache beg)))
+ (c-invalidate-state-cache beg)
+ ;; The following must happen after the previous, which likely alters
+ ;; the macro cache.
+ (when c-opt-cpp-symbol
+ (c-invalidate-macro-cache beg end))))
(defvar c-in-after-change-fontification nil)
(make-variable-buffer-local 'c-in-after-change-fontification)