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.
c-before-change-check-raw-strings
c-before-change-check-<>-operators
c-depropertize-CPP
- c-invalidate-macro-cache
c-truncate-bs-cache
c-before-change-check-unbalanced-strings
c-parse-quotes-before-change)
(c objc) '(c-extend-region-for-CPP
c-depropertize-CPP
- c-invalidate-macro-cache
c-truncate-bs-cache
c-before-change-check-unbalanced-strings
c-parse-quotes-before-change)
;; 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)